Name: series-workflowlfv2j Phase: Failed StartedAt: 2026-08-20 09:11:48 +0000 UTC FinishedAt: 2026-08-20 09:52:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfv2j[0] Phase: Succeeded StartedAt: 2026-08-20 09:11:48 +0000 UTC FinishedAt: 2026-08-20 09:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfv2j[0].run-triage Phase: Succeeded StartedAt: 2026-08-20 09:11:48 +0000 UTC FinishedAt: 2026-08-20 09:52:38 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4mIzQzO1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3N0YmM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5pbmRleCAwMWZkMjk5YWJiN2ZlLi5mZGUyMWM4NDBhYzAyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTJcbiYjNDM7XHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cbiBcdCAqL1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXHUwMDI2XHUwMDI2IHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuJiM0MztcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkpIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCYjMzQ7emVybyBsZW5ndGggcGFja2V0XCYjMzQ7KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiAmIzQzOzIwLDE3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dHguaFwmIzM0O1xuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcdFx0XHRcdDEwMDBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXG4mIzQzOyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcbiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuJiM0MzsgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcdFx0XHQ4XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcdFx0XHRtc2Vjc190b19qaWZmaWVzKDEpXG4gXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXG4ge1xuQEAgLTU0OCwxMiAmIzQzOzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cbiYjNDM7ICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbiYjNDM7ICogZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGF0b21pY190OyB3aGVuZXZlciB0aGV5IGNsYWltIHRoZXJlIGlzXG4mIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXG4mIzQzOyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19OT1JNQUwpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YixcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcbiYjNDM7ICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZFxuJiM0MzsgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZyZWVfdHhwZylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xuJiM0MzsgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxuJiM0MzsgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kXG4mIzQzOyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuJiM0MztcdHUxNiBhY3FfcGdfbnVtID0gcnR3ZGV2LVx1MDAzZWZpZm8uYWNxX3BnX251bTtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoYWNxX3BnX251bSBcdTAwM2M9IHJlc2VydmVkX251bSkge1xuJiM0MztcdFx0cnR3X2VycihydHdkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O25vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcHVicV9udW0gPSBhY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcHVicV9udW07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2VlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIHdoZW4gdGhlIGNoaXAgaGFzIG5vdGhpbmcgdG8gcmVwb3J0IHlldC4gKi9cbiYjNDM7XHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcdTAwMjZwdWJxX251bSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XG4mIzQzOyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxuJiM0MzsgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBhdG9taWNfdCAqZGVkaWNhdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHF1ZXVlKSB7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGF0b21pY190ICpkZWRpY2F0ZWQ7XG4mIzQzO1xuJiM0MztcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmICghZGVkaWNhdGVkKSB7XG4mIzQzO1x0XHRcdHJ0d193YXJuKHJ0d2RldiwgXCYjMzQ7VW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwmIzM0OywgcXVldWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0aWYgKHBhZ2VzX25lZWRlZCBcdTAwM2M9IHBhZ2VzX2ZyZWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDEwICYjNDM7Nzg4LDU2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4mIzQzO1x0dTggZnJlZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTtcbiYjNDM7XHRcdGlmIChmcmVlKSB7XG4mIzQzO1x0XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVCVVNZO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuJiM0MztcdHVuc2lnbmVkIGludCB0YWtlbjtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIWRlZGljYXRlZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XG4mIzQzO1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuJiM0MztcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4mIzQzO1xuJiM0MztcdHBhZ2VzIC09IHRha2VuO1xuJiM0MztcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbkBAIC02NDUsMzEgJiM0Mzs4NDcsNzMgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXR4YWRkcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cdTAwM2VsZW4sIDQpO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4mIzQzO1x0XHRcdCAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogX19za2JfcGFkKCkgemVyb2VzIHRoZSBwYWRkaW5nIHdpdGhvdXQgbW92aW5nIHNrYi1cdTAwM2VsZW4gYW5kXG4mIzQzO1x0XHQgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLFxuJiM0MztcdFx0ICogc28gdGhlIHBhZGRpbmcgY2FuIG5ldmVyIGxhbmQgaW4gYSBidWZmZXIgYSBjbG9uZSBzdGlsbFxuJiM0MztcdFx0ICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzXG4mIzQzO1x0XHQgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRyZXQgPSBfX3NrYl9wYWQoc2tiLCB3cml0ZV9zaXplIC0gc2tiLVx1MDAzZWxlbiwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZnJlZSBwYWdlIGNoZWNrLCB0aGUgb3V0cHV0IHF1ZXVlIHdhaXQgYW5kIHRoZSBhY2NvdW50aW5nXG4mIzQzO1x0ICogYWZ0ZXIgdGhlIHRyYW5zZmVyIG11c3Qgbm90IGludGVybGVhdmUgd2l0aCBhbm90aGVyIHdyaXRlcjogdGhlXG4mIzQzO1x0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcbiYjNDM7XHQgKiBib3RoIHBhc3MgdGhlIGNoZWNrcyBjYW4gY2xhaW0gdGhlIHNhbWUgcGFnZXMgYW5kIG91dHB1dCBxdWV1ZVxuJiM0MztcdCAqIGVudHJ5LCBhZnRlciB3aGljaCB0aGUgY2hpcCBzaWxlbnRseSBkaXNjYXJkcyB3aGljaGV2ZXIgdHJhbnNmZXJcbiYjNDM7XHQgKiBhcnJpdmVzIHNlY29uZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnRsODcyM2JzKVxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXG4gXHRcdHJ0d193YXJuKHJ0d2RldiwgXCYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cJiMzNDssXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4mIzQzO1x0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcJiMzNDssXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbiYjNDM7XHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4mIzQzO1x0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuJiM0MztcdH1cbiBcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpZiAocnRsODcyM2JzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfY3JlZGl0X2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs5MjEsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5NjEsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7MTAwMCw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4mIzQzOyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4mIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXG4mIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuJiM0MztcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuJiM0MztcdHUzMiBjbGVhcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcbiYjNDM7XHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcilcbkBAIC04MzEsNiAmIzQzOzExMzgsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XG4gfVxuIFxuQEAgLTkyMiwxMiAmIzQzOzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBzb2Z0d2FyZSBGSUZPIGZpbGxzXG4mIzQzOyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzOyAqIGhhbmRpbmcgZnJhbWVzIGRvd24sIHdoaWNoIGJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gVGhlIHF1ZXVlIGlzIHdva2VuXG4mIzQzOyAqIGFnYWluIGZyb20gdGhlIFRYIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBmYWxscyBiYWNrIHRvIHRoZSBsb3cgd2F0ZXJtYXJrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChSRUFEX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIHRydWUpO1xuJiM0MztcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB3b3JrZXIgbWF5IGhhdmUgZHJhaW5lZCB0aGUgcXVldWUgYmV0d2VlbiB0aGUgbGVuZ3RoIGNoZWNrXG4mIzQzO1x0ICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZVxuJiM0MztcdCAqIGZsYWcgc3RpbGwgY2xlYXIgYW5kIHRoaXMgc3RvcCB3b3VsZCBuZXZlciBiZSB1bmRvbmUuIFJlLWNoZWNrXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGZsYWcgaXMgc2V0IGFuZCB1bmRvIHRoZSBzdG9wIGlmIHNvLiBCb3RoIHNpZGVzIGNhblxuJiM0MztcdCAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW5cbiYjNDM7XHQgKiBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZSgpIHNvIGF0IGxlYXN0IG9uZSBzaWRlIGRvZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbiYjNDM7XHRcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHBhaXJzIHdpdGggdGhlIGJhcnJpZXIgaW4gcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoKSAqL1xuJiM0MztcdHNtcF9tYigpO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgZmFsc2UpO1xuJiM0MztcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdFx0XHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlID0gcnR3X3R4X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiYjNDM7XHR1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHN0cnVjdCBydHdfc2Rpb190eF9kYXRhICp0eF9kYXRhO1xuIFxuIFx0cnR3X3NkaW9fdHhfc2tiX3ByZXBhcmUocnR3ZGV2LCBwa3RfaW5mbywgc2tiLCBxdWV1ZSk7XG5AQCAtOTM1LDggJiM0MzsxMzA3LDE1IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdHR4X2RhdGEgPSBydHdfc2Rpb19nZXRfdHhfZGF0YShza2IpO1xuIFx0dHhfZGF0YS1cdTAwM2VzbiA9IHBrdF9pbmZvLVx1MDAzZXNuO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiX3F1ZXVlX3RhaWwoKSBwdWJsaXNoZXMgdGhlIHNrYiB0byB0aGUgVFggd29ya2VyLCB3aGljaCBtYXlcbiYjNDM7XHQgKiBwcm9jZXNzIGFuZCBmcmVlIGl0IGltbWVkaWF0ZWx5LCBzbyBub3RoaW5nIG1heSB0b3VjaCB0aGUgc2tiXG4mIzQzO1x0ICogcGFzdCB0aGlzIHBvaW50LlxuJiM0MztcdCAqL1xuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMDk1LDYgJiM0MzsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxuJiM0MztcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuJiM0MztcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNlaXJxX3RocmVhZCA9IE5VTEw7XG5AQCAtMTIzMSwzMyAmIzQzOzE2MTgsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4mIzQzOy8qXG4mIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXG4mIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4mIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcbiYjNDM7ICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXG4mIzQzOyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxuJiM0MzsgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcbiYjNDM7XHRcdGRlbGF5ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTcwMiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTczNSwxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTc2MCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li42ZTdlNjAwOTc0NGIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4mIzQzO1x0Lyogb25lIHdyaXRlciBhdCBhIHRpbWUgYmV0d2VlbiB0aGUgY3JlZGl0IGNoZWNrIGFuZCB0aGUgYWNjb3VudGluZyAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCB0eF9jcmVkaXRfbG9jaztcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcXVldWUsIHNrYik7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxuJiM0MztcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuJiM0MztcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpXG4gXHRcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApO1xuIFxuIFx0bW9kX3RpbWVyKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VwdXJnZV90aW1lciwgamlmZmllcyAmIzQzOyB0aW1lb3V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAppbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaApAQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUgewogCVJUV19DSElQX1RZUEVfODcyM0QsCiAJUlRXX0NISVBfVFlQRV84ODIxQywKIAlSVFdfQ0hJUF9UWVBFXzg3MDNCLAomIzQzOwlSVFdfQ0hJUF9UWVBFXzg3MjNCLAogCVJUV19DSElQX1RZUEVfODgyMUEsCiAJUlRXX0NISVBfVFlQRV84ODEyQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTRBLApAQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gcnR3ZGV2LSZndDtjaGlwLSZndDt0eF9zdGJjOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0IgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgcnR3ZGV2LSZndDtoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBtYWNfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwpAQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJcnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTsKIAotCS8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplICZsdDsgMTQgb3Igc2l6ZSAmZ3Q7IDgxOTIgYW5kCi0JICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuCiYjNDM7CS8qCiYjNDM7CSAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MgomIzQzOwkgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC4KIAkgKi8KLQlpZiAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCICZhbXA7JmFtcDsgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewomIzQzOwlpZiAocGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkpIHsKIAkJcnhfc3RhdHVzLSZndDtmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTsKIAkJcnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsICYjMzQ7emVybyBsZW5ndGggcGFja2V0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKaW5kZXggNWI0MGQ3NGIxNmVlMC4uYTIxYzM2NzM3ZTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKQEAgLTIwLDYgJiM0MzsyMCwxNyBAQAogI2luY2x1ZGUgJiMzNDt0eC5oJiMzNDsKIAogI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTCQkJNTAKJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TCQkJCTEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlCiYjNDM7ICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZQomIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kKJiM0MzsgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUgkJCTE2CiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIJCQk4CiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWQkJCW1zZWNzX3RvX2ppZmZpZXMoMSkKIAogc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpCiB7CkBAIC01NDgsMTIgJiM0Mzs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuCiYjNDM7ICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcywKJiM0MzsgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXMKJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlcgomIzQzOyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgdTMyIGZyZWVfdHhwZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2hpZ2gsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19OT1JNQUwpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93LAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWZyZXNoIHRoZSBjYWNoZWQgY291bnRlcnMgZnJvbSB0aGUgY2hpcC4gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBjaGlwCiYjNDM7ICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZAomIzQzOyAqIGFuZCB0aGUgY2FsbGVyIGhhcyB0byBkZWNpZGUgd2hhdCB0byBkbyBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoIWZyZWVfdHhwZykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNpemUgb2YgdGhlIHB1YmxpYyBwYWdlIHBvb2w6IHdoYXRldmVyIHRoZSB0cmFuc21pdCBwYWdlIGFsbG9jYXRpb24gaGFzCiYjNDM7ICogbGVmdCBvbmNlIHRoZSBwZXIgcXVldWUgcG9vbHMgYXJlIHRha2VuIG91dC4gRmFpbHMgaWYgdGhlIGFsbG9jYXRpb24KJiM0MzsgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kCiYjNDM7ICogdGhlcmUgd291bGQgYmUgbm8gc2Vuc2libGUgcG9vbCB0byBoYW5kIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSAmYW1wO3J0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV90YWJsZVswXTsKJiM0MzsJdTE2IGFjcV9wZ19udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bTsKJiM0MzsJdTE2IHJlc2VydmVkX251bTsKJiM0MzsKJiM0MzsJcmVzZXJ2ZWRfbnVtID0gcGdfdGJsLSZndDtocV9udW0gJiM0MzsgcGdfdGJsLSZndDtscV9udW0gJiM0MzsgcGdfdGJsLSZndDtucV9udW0gJiM0MzsKJiM0MzsJCSAgICAgICBwZ190YmwtJmd0O2V4cV9udW0gJiM0MzsgcGdfdGJsLSZndDtnYXBxX251bTsKJiM0MzsJaWYgKGFjcV9wZ19udW0gJmx0Oz0gcmVzZXJ2ZWRfbnVtKSB7CiYjNDM7CQlydHdfZXJyKHJ0d2RldiwKJiM0MzsJCQkmIzM0O25vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXG4mIzM0OywKJiM0MzsJCQlyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqLwomIzQzOwlpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCAmYW1wO3B1YnFfbnVtKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1bSBvZiB0aGUgcXVldWUmIzM5O3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOgomIzQzOyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKQomIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlCiYjNDM7ICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgZnJlZTsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCkgJiM0MzsgYXRvbWljX3JlYWQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1Yik7CiYjNDM7CiYjNDM7CXJldHVybiBmcmVlICZndDsgMCA/IGZyZWUgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlzd2l0Y2ggKHF1ZXVlKSB7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWw7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JFOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CSzoKJiM0MzsJCXJldHVybiAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93OwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CQ046CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0gyQzoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSEkwOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9NR01UOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9WTzoKJiM0MzsJCXJldHVybiAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJCQkJICAgIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkOwogCi0JaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CiYjNDM7CQlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJaWYgKCFkZWRpY2F0ZWQpIHsKJiM0MzsJCQlydHdfd2FybihydHdkZXYsICYjMzQ7VW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxuJiMzNDssIHF1ZXVlKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7CiYjNDM7CQlwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCWlmIChwYWdlc19uZWVkZWQgJmx0Oz0gcGFnZXNfZnJlZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJfSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkgewogCQl1MzIgZnJlZV90eHBnOwogCiAJCWZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CkBAIC02MzIsMTAgJiM0Mzs3ODgsNTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7CiYjNDM7CWRvIHsKJiM0MzsJCWZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7CiYjNDM7CQlpZiAoZnJlZSkgewomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwgZnJlZSAtIDEpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CXVuc2lnbmVkIGludCB0YWtlbjsKJiM0MzsJaW50IGZyZWU7CiYjNDM7CiYjNDM7CWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CWlmICghZGVkaWNhdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTsKJiM0MzsJdGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlICZndDsgMCA/IGZyZWUgOiAwKTsKJiM0MzsJYXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTsKJiM0MzsKJiM0MzsJcGFnZXMgLT0gdGFrZW47CiYjNDM7CWlmIChwYWdlcyAmYW1wOyZhbXA7IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKSAmbHQ7IDApCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJYm9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlczsKJiM0MzsJc2l6ZV90IHdyaXRlX3NpemU7CiAJYm9vbCBidXNfY2xhaW07CiAJc2l6ZV90IHR4c2l6ZTsKIAl1MzIgdHhhZGRyOwpAQCAtNjQ1LDMxICYjNDM7ODQ3LDczIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghdHhhZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAoc2tiLSZndDtsZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBfX3NrYl9wYWQoKSB6ZXJvZXMgdGhlIHBhZGRpbmcgd2l0aG91dCBtb3Zpbmcgc2tiLSZndDtsZW4gYW5kCiYjNDM7CQkgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLAomIzQzOwkJICogc28gdGhlIHBhZGRpbmcgY2FuIG5ldmVyIGxhbmQgaW4gYSBidWZmZXIgYSBjbG9uZSBzdGlsbAomIzQzOwkJICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzCiYjNDM7CQkgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LgomIzQzOwkJICovCiYjNDM7CQlpZiAod3JpdGVfc2l6ZSAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJcmV0ID0gX19za2JfcGFkKHNrYiwgd3JpdGVfc2l6ZSAtIHNrYi0mZ3Q7bGVuLCBmYWxzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZyZWUgcGFnZSBjaGVjaywgdGhlIG91dHB1dCBxdWV1ZSB3YWl0IGFuZCB0aGUgYWNjb3VudGluZwomIzQzOwkgKiBhZnRlciB0aGUgdHJhbnNmZXIgbXVzdCBub3QgaW50ZXJsZWF2ZSB3aXRoIGFub3RoZXIgd3JpdGVyOiB0aGUKJiM0MzsJICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXQKJiM0MzsJICogYm90aCBwYXNzIHRoZSBjaGVja3MgY2FuIGNsYWltIHRoZSBzYW1lIHBhZ2VzIGFuZCBvdXRwdXQgcXVldWUKJiM0MzsJICogZW50cnksIGFmdGVyIHdoaWNoIHRoZSBjaGlwIHNpbGVudGx5IGRpc2NhcmRzIHdoaWNoZXZlciB0cmFuc2ZlcgomIzQzOwkgKiBhcnJpdmVzIHNlY29uZC4KJiM0MzsJICovCiYjNDM7CWlmIChydGw4NzIzYnMpCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfY3JlZGl0X2xvY2spOwogCiAJcmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCiAJaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi0mZ3Q7ZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKQogCQlydHdfd2FybihydHdkZXYsICYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcbiYjMzQ7LAogCQkJIF9fZnVuY19fLCBxdWV1ZSk7CiAKIAlidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pOwotCiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tJmd0O3NkaW9fZnVuYyk7Ci0KLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgdHhhZGRyLCBza2ItJmd0O2RhdGEsIHR4c2l6ZSk7Ci0KJiM0MzsJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLAomIzQzOwkJCSAgICAgICB3cml0ZV9zaXplKTsKIAlpZiAoYnVzX2NsYWltKQogCQlzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwogCi0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlydHdfd2FybihydHdkZXYsCiAJCQkgJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eCYjMzQ7LAotCQkJIHR4c2l6ZSwgdHhhZGRyKTsKJiM0MzsJCQkgd3JpdGVfc2l6ZSwgdHhhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7CiYjNDM7CX0KIAomIzQzO291dF91bmxvY2s6CiYjNDM7CWlmIChydGw4NzIzYnMpCiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtydHdzZGlvLSZndDt0eF9jcmVkaXRfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc3LDcgJiM0Mzs5MjEsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDsKJiM0MzsJZWxzZQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfAomIzQzOwkJCQkgICAgUkVHX1NESU9fSElNUl9DUFdNMTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC02ODUsNiAmIzQzOzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXU4IHNpemUsIHRpbWVvdXQ7CiAKIAlzd2l0Y2ggKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQpIHsKJiM0MzsJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODgyMUE6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOgpAQCAtNzEyLDYgJiM0Mzs5NjEsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTsKIAogCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7MTAwMCw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzCiYjNDM7ICogYSByZXBhaXIgcGF0aCwgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBzdGFydCBzZXF1ZW5jZTogYSBub24temVybyBmcmVlIHBhZ2UKJiM0MzsgKiBjb3VudCBtZWFucyB0aGUgYWxsb2NhdGlvbiBsYXRjaGVkIGR1cmluZyBwb3dlciBvbiBhbmQgbXVzdCBiZSBsZWZ0IGFsb25lLAomIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi0mZ3Q7Y2hpcDsKJiM0MzsJc3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSAmYW1wO3J0d2Rldi0mZ3Q7ZmlmbzsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7CiYjNDM7CXUzMiBmcmVlX3R4cGc7CiYjNDM7CXUxNiBwdWJxX251bTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CWlmIChmcmVlX3R4cGcgfHwgIWZpZm8tJmd0O2FjcV9wZ19udW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgJmFtcDtwdWJxX251bSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLAomIzQzOwkJICAgIEJJVF9SUVBOX05FKHBnX3RibC0mZ3Q7bnFfbnVtLCBwZ190YmwtJmd0O2V4cV9udW0pKTsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTiwKJiM0MzsJCSAgICBCSVRfUlFQTl9ITFAocGdfdGJsLSZndDtocV9udW0sIHBnX3RibC0mZ3Q7bHFfbnVtLCBwdWJxX251bSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJaW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwogCXJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQljbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSAmYW1wOyBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CQlpZiAoY2xlYXIpCiYjNDM7CQkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7CiYjNDM7CX0KJiM0MzsKIAlydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNSw3ICYjNDM7MTExOCwxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlxdWV1ZV93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrKTsKJiM0MzsJLyoKJiM0MzsJICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHkKJiM0MzsJICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuCiYjNDM7CSAqLwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKQpAQCAtODMxLDYgJiM0MzsxMTM4LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCiAJdmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpOwogCXZhbCAmYW1wOz0gMHhmZmY4OwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJdmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7CiB9CiAKQEAgLTkyMiwxMiAmIzQzOzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSkKIAlyZXR1cm4gcnR3X3NkaW9fd3JpdGVfZGF0YShydHdkZXYsICZhbXA7cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHMKJiM0MzsgKiBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOyAqIGhhbmRpbmcgZnJhbWVzIGRvd24sIHdoaWNoIGJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gVGhlIHF1ZXVlIGlzIHdva2VuCiYjNDM7ICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmbHQ7IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgdHJ1ZSk7CiYjNDM7CWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHdvcmtlciBtYXkgaGF2ZSBkcmFpbmVkIHRoZSBxdWV1ZSBiZXR3ZWVuIHRoZSBsZW5ndGggY2hlY2sKJiM0MzsJICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZQomIzQzOwkgKiBmbGFnIHN0aWxsIGNsZWFyIGFuZCB0aGlzIHN0b3Agd291bGQgbmV2ZXIgYmUgdW5kb25lLiBSZS1jaGVjawomIzQzOwkgKiBub3cgdGhhdCB0aGUgZmxhZyBpcyBzZXQgYW5kIHVuZG8gdGhlIHN0b3AgaWYgc28uIEJvdGggc2lkZXMgY2FuCiYjNDM7CSAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW4KJiM0MzsJICogcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoKSBzbyBhdCBsZWFzdCBvbmUgc2lkZSBkb2VzLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmbHQ7PQomIzQzOwkgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7CiYjNDM7CQlXUklURV9PTkNFKHJ0d3NkaW8tJmd0O3R4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogcGFpcnMgd2l0aCB0aGUgYmFycmllciBpbiBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZSgpICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwomIzQzOwlpZiAoIVJFQURfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmZ3Q7IFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgZmFsc2UpOwomIzQzOwlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCQkJICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCWVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUgPSBydHdfdHhfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwl1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSAqdHhfZGF0YTsKIAogCXJ0d19zZGlvX3R4X3NrYl9wcmVwYXJlKHJ0d2RldiwgcGt0X2luZm8sIHNrYiwgcXVldWUpOwpAQCAtOTM1LDggJiM0MzsxMzA3LDE1IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAl0eF9kYXRhID0gcnR3X3NkaW9fZ2V0X3R4X2RhdGEoc2tiKTsKIAl0eF9kYXRhLSZndDtzbiA9IHBrdF9pbmZvLSZndDtzbjsKIAomIzQzOwkvKgomIzQzOwkgKiBza2JfcXVldWVfdGFpbCgpIHB1Ymxpc2hlcyB0aGUgc2tiIHRvIHRoZSBUWCB3b3JrZXIsIHdoaWNoIG1heQomIzQzOwkgKiBwcm9jZXNzIGFuZCBmcmVlIGl0IGltbWVkaWF0ZWx5LCBzbyBub3RoaW5nIG1heSB0b3VjaCB0aGUgc2tiCiYjNDM7CSAqIHBhc3QgdGhpcyBwb2ludC4KJiM0MzsJICovCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk1LDYgJiM0MzsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKQogCQlydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkCiYjNDM7CSAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpcwomIzQzOwkgKiBkcml2ZXIgZGVmaW5lcy4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCWhpc3IgJmFtcDs9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSzsKJiM0MzsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpOwogCiAJcnR3c2Rpby0mZ3Q7aXJxX3RocmVhZCA9IE5VTEw7CkBAIC0xMjMxLDMzICYjNDM7MTYxOCw4MSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKLQkJCQkgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQomIzQzOy8qCiYjNDM7ICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGUKJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlCiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTE2IHFfbWFwOwogCWludCByZXQ7CiAKIAlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSk7CiAJaWYgKCFza2IpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiAxOwogCiYjNDM7CXFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJcmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpOwogCWlmIChyZXQpIHsKIAkJc2tiX3F1ZXVlX2hlYWQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7Ci0JCXJldHVybjsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCiAJcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvCiYjNDM7ICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LgomIzQzOyAqCiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmUKJiM0MzsgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdAomIzQzOyAqIG1hdHRlcnMgb25jZSB0aGUgbWFjODAyMTEgcXVldWUgY2FuIGJlIHN0b3BwZWQ6IGEgc3RvcHBlZCBxdWV1ZSBpcyBoYW5kZWQKJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3MKJiM0MzsgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmUKJiM0MzsgKiB0aGV5IGhhcHBlbiBhbmQgYXJlIG5vdCByZXRyaWVkLgomIzQzOyAqCiYjNDM7ICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlCiYjNDM7ICogam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cCBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhLAomIzQzOwkJCQkJICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWxheTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKQomIzQzOwkJZGVsYXkgPSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWTsKJiM0MzsJZWxzZSBpZiAocmV0ID09IDAgJmFtcDsmYW1wOyBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCkKJiM0MzsJCWRlbGF5ID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIGRlbGF5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiAKIAlydHdkZXYgPSB3b3JrX2RhdGEtJmd0O3J0d2RldjsKIAlydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKQEAgLTEyNjcsNyAmIzQzOzE3MDIsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsCiYjNDM7CQkJCQkJCSAgcXVldWUsIHJldCkpCiYjNDM7CQkJCXJldHVybjsKIAogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSkpCiAJCQkJYnJlYWs7CkBAIC0xMjk0LDE0ICYjNDM7MTczNSwxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOykKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3J0d3NkaW8tJmd0O3R4X2NyZWRpdF9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOykgewogCQlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbaV0pOwomIzQzOwkJcnR3c2Rpby0mZ3Q7dHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlOwomIzQzOwl9CiAJcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAJaWYgKCFydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpCiAJCWdvdG8gZXJyX2Rlc3Ryb3lfd3E7CiAKIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3J0d2RldiA9IHJ0d2RldjsKLQlJTklUX1dPUksoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTMxNSw2ICYjNDM7MTc2MCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAJaW50IGk7CiAKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLSZndDt0eHdxKTsKIAlrZnJlZShydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCmluZGV4IDQ1N2U4YjAyMzgwZTUuLjZlN2U2MDA5NzQ0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogCiAvKiBTRElPIFR4IENvbnRyb2wgKi8KICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDApCiYjNDM7I2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkUJQklUKDQpCiAKIC8qU0RJTyBzdGF0dXMgdGltZW91dCovCiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVQJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKQpAQCAtNzcsNiAmIzQzOzc4LDE0IEBACiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUgkJCUJJVCgyOCkKICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFCQlCSVQoMjkpCiYjNDM7I2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0sJCVwKJiM0MzsJKFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKQogCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovCiAjZGVmaW5lIFJFR19TRElPX0hDUFdNCQkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMTkpCkBAIC04Niw2ICYjNDM7OTUsMTAgQEAKICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEcJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKQogLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqLwogI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEcJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDIwKQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdICQkJR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUwJCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1cJCQlHRU5NQVNLKDIzLCAxNikKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCCQkJR0VOTUFTSygzMSwgMjQpCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDEgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00xCQkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi8KQEAgLTE0Myw3ICYjNDM7MTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEgewogfTsKIAogc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2OwogfTsKIApAQCAtMTU5LDYgJiM0MzsxNzIsMTUgQEAgc3RydWN0IHJ0d19zZGlvIHsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTsKIAlzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07CiYjNDM7CWJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07CiYjNDM7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfaGlnaDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfbG93OwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX3B1YjsKJiM0MzsJYXRvbWljX3QgdHhfb3F0X2ZyZWU7CiYjNDM7CS8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi8KJiM0MzsJc3RydWN0IG11dGV4IHR4X2NyZWRpdF9sb2NrOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwppbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKQogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDt0eF9yZXBvcnQtJmd0O3F1ZXVlLCBza2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eF9yZXBvcnQtJmd0O3FfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7CiAKIAltb2RfdGltZXIoJmFtcDt0eF9yZXBvcnQtJmd0O3B1cmdlX3RpbWVyLCBqaWZmaWVzICYjNDM7IHRpbWVvdXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGlvbiBvZiB0aGUgcnR3ODggUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyBlZmZvcnRzLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBydHc4OGAgd2lyZWxlc3MgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgb3IgZml4aW5nIGxvZ2ljIGZvciB0aGUgYFJUV19DSElQX1RZUEVfODcyM0JgIGNoaXAgb3ZlciBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hhdCB0aGlzIG1lYW5zIGZvciByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgbWFpbi5oYCwgYHJ4LmNgLCBgc2Rpby5jYCwgYHNkaW8uaGAsIGFuZCBgdHguY2AsIGFsbCB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGlwIHR5cGUsIGhlbHBlciBmdW5jdGlvbnMsIG1vZGlmeWluZyBSWCBwYWNrZXQgc2l6ZSBjaGVja3MsIGFuZCBhZGRpbmcgU0RJTy1zcGVjaWZpYyBUWCBGSUZPIGJhY2stcHJlc3N1cmUsIHBhZ2UgdHJhY2tpbmcsIE9RVCB3YWl0IGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGBydHdfc2Rpb190eF9oYW5kbGVyYCBhbmQgYWRkaW5nIG5ldyBgX3N0b3BfdHhfcXVldWVgIGFuZCBgX3dha2VfdHhfcXVldWVgIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyByZWFjaGFibGUuIEl0JiMzOTtzIGEgUmVhbHRlayB3aXJlbGVzcyBkcml2ZXIsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGUgY29kZSB0b3VjaGVzIFNESU8gZmlsZXMgYW5kIG1lbnRpb25zIGFuIGA4NzIzQlNgIGNoaXAsIHNvIGl0JiMzOTtzIGEgc3BlY2lmaWMgU0RJTyBjYXJkLiBDYW4gd2UgZW11bGF0ZSBTRElPIGRldmljZXMgZWZmZWN0aXZlbHkgaW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/IFN5emthbGxlciBkb2VzbiYjMzk7dCBuYXRpdmVseSBlbXVsYXRlIFNESU8sIGFsdGhvdWdoIHRoZXJlIGFyZSBvcHRpb25zIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3IgbWFjODAyMTEvY2ZnODAyMTEtYmFzZWQgZHJpdmVycyBidXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciAoYHJ0dzg4YCkuCgpUaGUgcHJvbXB0IGhhcyBhIHNwZWNpZmljIGNsYXVzZSBhYm91dCBub3QgZnV6emluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIERvZXMgdGhpcyBhcHBseSBoZXJlPyBIYXJkd2FyZS1zcGVjaWZpYyBXaS1GaSBkcml2ZXJzIG9mdGVuIGZhbGwgaW50byBhIHNpbWlsYXIgY2F0ZWdvcnksIHVubGVzcyB0aGV5IGhhdmUgYSBVU0IgaW50ZXJmYWNlLiBEb2VzIGBydHc4OGAgaGF2ZSBVU0Igc3VwcG9ydD8gTGV0IG1lIGNoZWNrLgoKVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCwgc28gaXQmIzM5O3MgU0RJTy1jZW50cmljLiBUaGUgbmV3IGhlbHBlciBmdW5jdGlvbiBgcnR3X2lzXzg3MjNicygpYCBjaGVja3MgZm9yIGBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPYCwgY29uZmlybWluZyB0aGUgU0RJTyBkZXBlbmRlbmN5LiBDYW4gU0RJTyBpdHNlbGYgYmUgZW11bGF0ZWQ/IEkmIzM5O2QgbmVlZCB0byBsb29rIGludG8gd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgU0RJTyBlbXVsYXRpb24gaW4gc3l6a2FsbGVyIG9yIFFFTVUuIFVzdWFsbHksIFNESU8gaXNuJiMzOTt0IGVhc2lseSByZWFjaGFibGUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCB0aGUgY2hhbmdlcyBpbiBgdHguY2AgYW5kIGByeC5jYCBhZGQgdGhlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGNoZWNrLCB3aGljaCByZWluZm9yY2VzIHRoZSBTRElPLW9ubHkgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIEFsbCBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gc3BlY2lmaWMgdG8gYFJUV19DSElQX1RZUEVfODcyM0JgIHdpdGggYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNESU8gZHJpdmVyLCBpdCByZWFsbHkgZG9lcyByZXF1aXJlIHRoZSBwaHlzaWNhbCBSZWFsdGVrIFdpLUZpIGNoaXAgYW5kIFNESU8gY2FyZCB0byBmdW5jdGlvbi4KCkRvZXMgUUVNVSBoZWxwIGhlcmU/IFFFTVUgaGFzIGBzZGhjaS1wY2lgLCBidXQgcmVhY2hpbmcgdGhlIHByb2JlIGFuZCBsYXRlciBsb2dpYyByZXF1aXJlcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBTRElPIGNhcmQgdG8gYmUgZW11bGF0ZWQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgY2FzZSBmb3IgdGhlIFJUTDg3MjNCUy4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBmcmFtZXdvcmtzIGluIExpbnV4IHRvIGluamVjdCBTRElPIGRldmljZXM/IFVubGlrZSBVU0ImIzM5O3MgYGR1bW15X2hjZGAsIHRoZXJlJiMzOTtzIG5vIGB2aGNpYCBlcXVpdmFsZW50IGZvciBTRElPLCBzbyBpdCYjMzk7cyBnZW5lcmFsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggZG9lc24mIzM5O3QgZXhpc3QgZm9yIHRoaXMgZHJpdmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgc2VhcmNoaW5nIGZvciBhbnkgU0RJTyBmdXp6aW5nIHN1cHBvcnQsIGJ1dCBiYXNlZCBvbiBteSBleHBlcmllbmNlIGFuZCBpbml0aWFsIGZpbmRpbmdzLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBmdXp6aW5nIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudCBiZWNhdXNlIG9mIHRoZSByZXF1aXJlZCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydHdfc2Rpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTI4LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyYnNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3NTg9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTc3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3NzE6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzItXHRcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0NS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODQ2OkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oOjE4ODppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg5LVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJ0d19zZGlvX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBydHdfc2Rpb19wcm9iZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgZnVuZGFtZW50YWwgYW5kIHVzZWQgYWNyb3NzIG11bHRpcGxlIGRyaXZlcnMuIExldCYjMzk7cyBzZWUuLi4gYHJ0dzg3MjNjc2AsIGBydHc4NzIzZHNgLCBgcnR3ODgyMWNzYCwgYHJ0dzg4MjJic2AsIGFuZCBgcnR3ODgyMmNzYCBhbGwgbGV2ZXJhZ2UgaXQuIFRoYXQmIzM5O3MgYSBkZWNlbnQgcmFuZ2Ugb2YgQnJvYWRjb20vUmVhbHRlayBXaS1GaSBjaGlwcy4gSW50ZXJlc3RpbmcuIE5vdywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBjb25zdGFudCBhbmQgYSBoZWxwZXIgZnVuY3Rpb24gYHJ0d19pc184NzIzYnMoKWAuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldyBkcml2ZXIgZmlsZS4gSXMgdGhlcmUgYW4gYHJ0dzg3MjNicy5jYD8gR290dGEgdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0dzg3MjNicyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgUlRXX0NISVBfVFlQRV84NzIzQmAgaW50byB0aGUgYHJ0d19jaGlwX3R5cGVgIGVudW0uICBOb3RoaW5nIGluaGVyZW50bHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgdGhlbiBkZWZpbmVzIGBydHdfaXNfODcyM2JzKClgLCB3aGljaCB1c2VzIHRoZSBuZXcgZW51bSB2YWx1ZSBhbG9uZ3NpZGUgYSBjaGVjayBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSA4NzIzQiBjaGlwIGFuZCBhIHBhcnRpY3VsYXIgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4gSXQmIzM5O3MgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCB3aG8gdXNlcyB0aGlzIGNoZWNrPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBmaWxlcyBpbiB0aGUgY29kZWJhc2Ugbm93IHJlbHkgb24gYFJUV19DSElQX1RZUEVfODcyM0JgLiBGaW5kaW5nIHdoZXJlIGBydHdfaXNfODcyM2JzKClgIGlzIGludm9rZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgYWRkaXRpb24gcHJvYmFibHkgYWRkcmVzc2VzIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCBvciBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRXX0NISVBfVFlQRV84NzIzQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaD0xOTE9ZW51bSBydHdfY2hpcF90eXBlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg6MTk3Olx0UlRXX0NISVBfVFlQRV84NzIzQixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTE5OC1cdFJUV19DSElQX1RZUEVfODgyMUEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MjE5OD1zdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmgtMjE5OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVx0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYz05MzE9c3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6OTM2Olx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDEzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBDb2RlOiBXaGVyZSYjMzk7cyBUaGF0IENoaXAgSUQ/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgaGF2ZSBhIHF1aWNrIHF1ZXN0aW9uOiB3aGVyZSBleGFjdGx5IGlzIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhY3R1YWxseSBiZWluZyBhc3NpZ25lZCB0byBgcnR3ZGV2LSZndDtjaGlwLSZndDtpZGA/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCBtYWtlcyBtZSBhIGxpdHRsZSB1bmVhc3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoLiBQZXJoYXBzIHRoaXMgY29uc3RhbnQgaXNuJiMzOTt0IGRlZmluZWQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodCBhbmQgaXMgaGlkaW5nIHNvbWV3aGVyZSBlbHNlLCBtYXliZSB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRXX0NISVBfVFlQRV84NzIzQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTE5MT1lbnVtIHJ0d19jaGlwX3R5cGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTE5Ni1cdFJUV19DSElQX1RZUEVfODcwM0IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmgtMTk4LVx0UlRXX0NISVBfVFlQRV84ODIxQSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaD0yMTk4PXN0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oOjIyMDA6XHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTIyMDEtXHQgICAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTkzMT1zdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy05MzUtXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzo5MzY6XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy05MzctXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYFJUV19DSElQX1RZUEVfODcyM0JgIGlzbiYjMzk7dCBhc3NpZ25lZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCBhbmQgYXNzaWduZWQgZWxzZXdoZXJlLCBwZXJoYXBzIGluIGFuIGVhcmxpZXIgcGF0Y2ggaW4gdGhlIHNlcmllcy4gSG93ZXZlciwgc2luY2UgSSBvbmx5IGhhdmUgKnRoaXMqIHBhdGNoIHRvIHdvcmsgd2l0aCwgaXQgbWFrZXMgbWUgdGhpbmsgdGhhdCBgcnR3X2lzXzg3MjNicygpYCB3b3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlLiBJIGRpZCBhIHF1aWNrIGdyZXBwaW5nIHRvIHZlcmlmeSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB1c2VkIGFueXdoZXJlIGVsc2UgYW5kIG5vdGhpbmcgY2FtZSB1cC4gTm93IEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIGFzc2lnbmVkIGluIGEgcm91bmRhYm91dCB3YXksIGxpa2UgYGlkID09IDBgLCBidXQgaXQmIzM5O3MgYW4gZW51bSwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBkZXBlbmQgb24gYHJ0d19pc184NzIzYnMoKWAuIEkgc2VlIGluIGB0eC5jYCBhbmQgYHJ4LmNgIHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhcmUgY29uZGl0aW9uYWwgb24gYHJ0d19pc184NzIzYnMoKWAsIHNvIEkgY2FuJiMzOTt0IGxvb2sgYXQgdGhlbSBub3cuCgpIb3dldmVyLCBpbiBgc2Rpby5jYCwgSSBzZWUgYSBzZWN0aW9uIG9mIGNvZGUgdGhhdCAqZG9lc24mIzM5O3QqIGRlcGVuZCBvbiBgcnR3X2lzXzg3MjNicygpYC4gVGhlcmUgYXJlIHN1YnN0YW50aWFsIGNoYW5nZXMgaGVyZTogdGhlIHdvcmsgaXRlbSBgcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYSBgd29ya19zdHJ1Y3RgIHRvIGEgYGRlbGF5ZWRfd29ya2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgY29yZSBoYW5kbGluZyBvZiBTRElPIHRyYW5zYWN0aW9ucy4gSXQgYWxzbyBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGFjY291bnQgZm9yIHRoZSB3b3JrIHN0cnVjdCBjaGFuZ2UuIEkgbm90ZSB0aGF0IGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBub3cgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLgoKRGl2aW5nIGRlZXBlciwgd2l0aGluIGBydHdfc2Rpb190eF9oYW5kbGVyYCwgaXQgbG9va3MgbGlrZSB0aGUgbG9vcCBjb25kaXRpb24gaGFzIGNoYW5nZWQgYW5kIG5vdyBicmVha3Mgb3V0IG9mIGEgbG9vcCBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYC4gU28sIGluc3RlYWQgb2YgcmV0dXJuaW5nIHZvaWQgYW5kIHRoZW4gdGVzdGluZyBhIHF1ZXVlJiMzOTtzIGVtcHRpbmVzcywgaXQgY2hlY2tzIHRoZSByZXR1cm4gb2YgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgKmFsbCogU0RJTyBjaGlwcz8gVGhlIGNvZGUgaGl0cyBhbGwgU0RJTyBjaGlwcyBiZWNhdXNlIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgVFggcXVldWUgaXMgcHJvY2Vzc2VkLiBJZiBgcmV0ICZndDsgMGAsIGl0IGJyZWFrcyB0aGUgaW5uZXIgbG9vcC4gUHJldmlvdXNseSwgaXQgZGlkbiYjMzk7dCB1c2UgYW4gZXhwbGljaXQgcmV0dXJuIGNvZGUuCgpUaGlzIGlzIGEga2V5IHBvaW50LCBidXQgaGVyZSYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY3JpdGljYWxseTogY2FuIEkgZXZlbiAqdHJpZ2dlciogdGhpcyBjb2RlIHBhdGg/IFNESU8gZGV2aWNlcyBhcmVuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhleSByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlLCBzbyBpdCBpcyBwcm9iYWJseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDYW4gSSBpbmplY3QgU0RJTyBpbiBzb2Z0d2FyZT8gVGhlcmUmIzM5O3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0JiMzOTtzIGlycmVsZXZhbnQgaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgYHJ0dzg4YCBkcml2ZXIgcmVnaXN0ZXJzIGFuIFNESU8gZHJpdmVyLiBZZXMsIGl0IHJlZ2lzdGVycyBgcnR3X3NkaW9fcHJvYmVgLiBUbyBwcm9iZSwgdGhlIGtlcm5lbCBuZWVkcyB0byBkZXRlY3QgYW4gU0RJTyBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRHMuIE1NQyBzdWJzeXN0ZW1zIGVudW1lcmF0ZSBTRElPIGRldmljZXMuIERvZXMgc3l6a2FsbGVyIGRvIHRoaXM/IE5vLCBpdCBoYXMgbm8gYHZoY2lgIGZvciBNTUMvU0RJTy4gVGhlcmUgaXNuJiMzOTt0IGFueSBgZHVtbXlfbW1jYCBvciBgcmF3X3NkaW9gIGRyaXZlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIGZvciBhcmJpdHJhcnkgU0RJTyBkZXZpY2UgaW5qZWN0aW9uIGZyb20gdXNlcnNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlJiMzOTtzIG5vIE1NQy9TRElPIGVtdWxhdGlvbiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXlfbW1jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgTU1DIEhvc3QgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBgc2Rpb2AsIGxpa2VseSB3aXRoaW4gdGhlIE1NQyBob3N0IGRyaXZlcnMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9tbWMvaG9zdC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBTRElPIGNvbnRyb2xsZXIgY29kZSwgZHJpdmVyIGludGVyZmFjZSwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIE1NQyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW5kIHRoZXJlZm9yZSBhIHZlcnkgbGlrZWx5IHNwb3QgZm9yIGFueXRoaW5nIFNESU8tcmVsYXRlZCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNESU8gcHJvdG9jb2wmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTU1DIGhvc3QgaGFyZHdhcmUgd291bGQgcmVzaWRlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21tYy9ob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnPTY1OT1jb25maWcgTU1DX01WU0RJT1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnOjY2OTpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NzAtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXHQmIzQzOz0gdGlmbV9zZC5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19NTUNfTVZTRElPKVx0JiM0Mzs9IG12c2Rpby5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19NTUNfREFWSU5DSSkgICAgICAgJiM0Mzs9IGRhdmluY2lfbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcdCYjNDM7PSBtZXNvbi1teC1zZGhjLm9cbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX01NQ19NRVNPTl9NWF9TRElPKVx0JiM0Mzs9IG1lc29uLW14LXNkaW8ub1xuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTU1DX01PWEFSVClcdCYjNDM7PSBtb3hhcnQtbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9ob3N0LmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0zMS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4Ny0gKiBAc2RjX3JlZzogVmFsdWUgb2YgU0RDUiB0byBiZSB3cml0dGVuIGJlZm9yZSB1c2luZyB0aGlzIHNsb3QuXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg5LSAqIEBtcnE6IG1tY19yZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgb3Igd2FpdGluZyB0byBiZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy00MDUtXHR1MzJcdFx0XHRzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzo0MDY6XHR1MzJcdFx0XHRzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU0NT1zdGF0aWMgaW50IGF0bWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NTk6c3RhdGljIHZvaWQgYXRtY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjQtXHRpZiAoZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoxNTY1Olx0XHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2Ni1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NzpcdFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdG1jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVx0LmdldF9jZFx0XHQ9IGF0bWNpX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU3NTpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdG1jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIwMTE9c3RhdGljIHZvaWQgYXRtY2lfd3JpdGVfZGF0YV9waW8oc3RydWN0IGF0bWVsX21jaSAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwNzgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwNzk6c3RhdGljIHZvaWQgYXRtY2lfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgdTMyIHN0YXR1cylcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg0LVx0XHRzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LVx1MDAzZXNsb3RbaV07XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoc3RhdHVzIFx1MDAyNiBzbG90LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMDg2Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoc2xvdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVx0XHR9XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0yMDkyPXN0YXRpYyBpcnFyZXR1cm5fdCBhdG1jaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cdFx0aWYgKHBlbmRpbmcgXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjIxNDpcdFx0XHRhdG1jaV9zZGlvX2ludGVycnVwdChob3N0LCBzdGF0dXMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjE1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjIzNj1zdGF0aWMgaW50IGF0bWNpX2luaXRfc2xvdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM3LVx0XHRzdHJ1Y3QgbWNpX3Nsb3RfcGRhdGEgKnNsb3RfZGF0YSwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjM4Olx0XHR1MzIgc2RjX3JlZywgdTMyIHNkaW9faXJxKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM5LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNTQtXHRzbG90LVx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjU1Olx0c2xvdC1cdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU2LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cdG1tYy1cdTAwM2VvY3JfYXZhaWxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyNjg6XHRpZiAoc2Rpb19pcnEpXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXHRcdG1tYy1cdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM9Nzc4PXN0YXRpYyBpcnFyZXR1cm5fdCBhdTF4bW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtNzg4LVx0aWYgKHN0YXR1cyBcdTAwMjYgU0RfU1RBVFVTX1NJKVx0LyogU0RJTyAqL1xuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6Nzg5Olx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MDY9c3RhdGljIHZvaWQgYXUxeG1tY19kYmRtYV9zaHV0ZG93bihzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkxNC1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkxNTpzdGF0aWMgdm9pZCBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuKVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTI5LVx0LmdldF9jZFx0XHQ9IGF1MXhtbWNfY2FyZF9pbnNlcnRlZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkzMDpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkzMS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jOjk6ICogVGhlIHNkaGNpIGNvbnRyb2xsZXIgc3VwcG9ydHMgYm90aCBzZGNhcmQgYW5kIHNkaW8uICBUaGUgc2Rob3N0XG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYy0xMC0gKiBjb250cm9sbGVyIHN1cHBvcnRzIHRoZSBzZGNhcmQgb25seSwgYnV0IGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UuXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxuZHJpdmVycy9tbWMvaG9zdC9iY20yODM1LmMtMTItICogdGhlIHNkaG9zdCBjb250cm9sbGVyIGFsbG93cyB0byB1c2UgdGhlIHNkaGNpIGNvbnRyb2xsZXIgZm9yIHdpZmlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTczLVx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE3NDpcdGludCBtbWNfaXJxLCBzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXHR1bnNpZ25lZCBjaGFyIGJ1c19tb2RlO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXHRib29sIGRvX2RtYTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxODg6XHRib29sIHNkaW9faW50O1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTE4OS1cdGJvb2wgYWN0aXZlX3JlcXVlc3Q7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTc1Nj1tbWNfZGF2aW5jaV94ZmVyX2RvbmUoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XHRcdGlmIChob3N0LVx1MDAzZXNkaW9faW50IFx1MDAyNlx1MDAyNiAhKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9TVDApIFx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2Ny1cdFx0XHRcdFx0U0RJT1NUMF9EQVQxX0hJKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2OC1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6NzY5Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc3MC1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz04MzM9ZGF2aW5jaV9hYm9ydF9kYXRhKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg0MC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NDE6c3RhdGljIGlycXJldHVybl90IG1tY19kYXZpbmNpX3NkaW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NTAtXHRcdHdyaXRlbChzdGF0dXMgfCBTRElPSVNUX0lPSU5ULCBob3N0LVx1MDAzZWJhc2UgJiM0MzsgREFWSU5DSV9TRElPSVNUKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NTE6XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cdH1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTAzMjpcdFx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XHRcdFx0aG9zdC1cdTAwM2VzZGlvX2ludCA9IHRydWU7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzNS1cdFx0XHR3cml0ZWwocmVhZGwoaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lFTikgfFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5Olx0XHRob3N0LVx1MDAzZXNkaW9faW50ID0gZmFsc2U7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0MC1cdFx0d3JpdGVsKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9JRU4pIFx1MDAyNiB+U0RJT0lFTl9JT0lOVEVOLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0OS1cdC5nZXRfcm9cdFx0PSBtbWNfZGF2aW5jaV9nZXRfcm8sXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcdC5lbmFibGVfc2Rpb19pcnEgPSBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA1MS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMTg0PXN0YXRpYyBpbnQgZGF2aW5jaV9tbWNzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVx0aG9zdC1cdTAwM2VtbWNfaXJxID0gaXJxO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XHRob3N0LVx1MDAzZXNkaW9faXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMzAxLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XHRpZiAoaG9zdC1cdTAwM2VzZGlvX2lycSBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzAzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBob3N0LVx1MDAzZXNkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDQ6XHRcdFx0XHQgICAgICAgbW1jX2RhdmluY2lfc2Rpb19pcnEsIDAsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cdFx0XHRcdCAgICAgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTAzLVx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jOjUwNDpcdGhvc3QtXHUwMDNlc2Rpb19pcnEgPSA4O1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDUtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2QuaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTQ4MD1zdGF0aWMgdm9pZCBkd19tY2lfaHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICptbWMpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTEzOnN0YXRpYyB2b2lkIGR3X21jaV9wcmVwYXJlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGJvb2wgcHJlcGFyZSlcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTUxNC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQwLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTQxOnN0YXRpYyB2b2lkIF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBpbnQgZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTAtXHRpZiAoZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTUxOlx0XHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1Mi1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MzpcdFx0aW50X21hc2sgXHUwMDI2PSB+U0RNTUNfSU5UX1NESU8oaG9zdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXHRtY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIGludF9tYXNrKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTk6c3RhdGljIHZvaWQgZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYilcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTYzOlx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU2NDpcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCBlbmIpO1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3Mi1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTc0LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1Nzc6XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBkd19tY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTY3Ny1cdC5jYXJkX2h3X3Jlc2V0ICAgICAgICAgID0gZHdfbWNpX2h3X3Jlc2V0LFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4Olx0LmVuYWJsZV9zZGlvX2lycVx0PSBkd19tY2lfZW5hYmxlX3NkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5Olx0LmFja19zZGlvX2lycVx0XHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2ODAtXHQuZXhlY3V0ZV90dW5pbmdcdFx0PSBkd19tY2lfZXhlY3V0ZV90dW5pbmcsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTctXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XHRcdGlmIChwZW5kaW5nIFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNzU5LVx0XHRcdG1jaV93cml0ZWwoaG9zdCwgUklOVFNUUyxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcdFx0XHRcdCAgIFNETU1DX0lOVF9TRElPKGhvc3QtXHUwMDNlc2Rpb19pcnEpKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcdFx0XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NjI6XHRcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9Mjc5ND1zdGF0aWMgaW50IGR3X21jaV9pbml0X2hvc3RfY2FwcyhzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MjgyNjpcdC8qIFByb2Nlc3MgU0RJTyBJUlFzIHRocm91Z2ggdGhlIHNkaW9faXJxX3dvcmsuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXHRpZiAobW1jLVx1MDAzZWNhcHMgXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0zNDQzPWludCBkd19tY2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5NC1cdC8qIFJlLWVuYWJsZSBTRElPIGludGVycnVwdHMuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XHRpZiAoc2Rpb19pcnFfY2xhaW1lZChob3N0LVx1MDAzZW1tYykpXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XHRcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTUyPXN0cnVjdCBkd19tY2lfZG1hX3NsYXZlIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMS0gKiBAaXJxOiBUaGUgaXJxIHZhbHVlIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS5cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MTIyOiAqIEBzZGlvX2lycTogU0RJTyBpbnRlcnJ1cHQgYml0IGluIGludGVycnVwdCByZWdpc3RlcnMuXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTE2MT1zdHJ1Y3QgZHdfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzMy1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MjM0Olx0aW50XHRcdFx0c2Rpb19pcnE7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzNS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtODU5LVx0XHRqejQ3NDBfbW1jX3dyaXRlX2lycV9yZWcoaG9zdCwgSlpfTU1DX0lSUV9TRElPKTtcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jOjg2MDpcdFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVx1MDAzZW1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXHRcdGlycV9yZWcgXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTk0MD1zdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk0LVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6OTk1OnN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz0xMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGp6NDc0MF9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjQtXHQuZ2V0X2NkXHRcdD0gbW1jX2dwaW9fZ2V0X2NkLFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6MTAyNTpcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjYtXHQuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoID0gano0NzQwX3ZvbHRhZ2Vfc3dpdGNoLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZC5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz00MTM9c3RhdGljIGlycXJldHVybl90IGxvb25nc29uMl9tbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQyOC1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjQyOTpcdFx0c2Rpb19zaWduYWxfaXJxKG1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MzAtXHRcdHJldHVybiBJUlFfSEFORExFRDtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01ODgtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTAte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjU5NjpzdGF0aWMgdm9pZCBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5Ny17XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XHRsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIDEpO1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk5LX1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MDE9c3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbG9vbmdzb24yX21tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVx0LmdldF9jZFx0XHQ9IG1tY19ncGlvX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNjpcdC5lbmFibGVfc2Rpb19pcnEgPSBsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcdC5hY2tfc2Rpb19pcnFcdD0gbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MTc9c3RhdGljIGludCBsb29uZ3NvbjJfcmVvcmRlcl9jbWRfbGlzdFtdID0geyBTRF9BUFBfU0VORF9TQ1IsIFNEX0FQUF9TRU5EX05VTV9XUl9CTEtTLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTYyMi0gKiByZXNwb25zZSBkYXRhcyBoYXMgZGlmZmVyZW50IGJ5dGUgb3JkZXIgd2l0aCB1c3VhbCBkYXRhIHBhY2tldHMuXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MjM6ICogSG93ZXZlciBzZGlvIGNvbnRyb2xsZXIgd2lsbCBzZW5kIHRoZXNlIGRhdGFzIGluIHVzdWFsIGRhdGEgZm9ybWF0LFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTk0MD1zdGF0aWMgaW50IGxvb25nc29uMl9tbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy05NzMtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo5NzQ6XHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTc1LVx0aWYgKG1tYy1cdTAwM2VjYXBzIFx1MDAyNiBNTUNfQ0FQX1NESU9fSVJRKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3Nsb3QtZ3Bpby5oXHUwMDNlXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01My0jZGVmaW5lICAgQ0xLX0FMV0FZU19PTihoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWFsd2F5c19vbilcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWlycV9zZGlvX3NsZWVwKVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01NS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzNj1zdHJ1Y3QgbWVzb25fbW1jX2RhdGEge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVx0dW5zaWduZWQgaW50IGFkanVzdDtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTQxOlx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xNDItfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMC1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy05NTYtXHRcdHNwaW5fbG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzo5NTc6XHRcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVx1MDAzZW1tYywgMCk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjk1ODpcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVx0XHRzcGluX3VubG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMDktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExMS17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aG9zdC1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTY6XHRfX21lc29uX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCBlbmFibGUpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZob3N0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEyMS17XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjI6XHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzMy1cdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMzQ6XHQuZW5hYmxlX3NkaW9faXJxID0gbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcdC5hY2tfc2Rpb19pcnFcdD0gbWVzb25fbW1jX2Fja19zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2d4X2RhdGEgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzEzLVx0LmFkanVzdFx0XHQ9IFNEX0VNTUNfQURKVVNULFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMzE0Olx0LmlycV9zZGlvX3NsZWVwXHQ9IENMS19WMl9JUlFfU0RJT19TTEVFUCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxNS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2F4Z19kYXRhID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cdC5hZGp1c3RcdFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTMyMjpcdC5pcnFfc2Rpb19zbGVlcFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTEzMjMtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYz0xMzI9c3RhdGljIHZvaWQgbWVzb25fbXhfc2RoY19zdGFydF9jbWQoc3RydWN0IG1tY19ob3N0ICptbWMsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cdFx0ICogZG93bmxvYWQgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBmb3IgYSBCQ000MzM2Mi8xIGNhcmQuXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlx0XHQgKiBXaXRob3V0IHRoaXMgc2Rpb19tZW1jcHlfdG9pbygpICh3aXRoIGEgc2l6ZSBvZiAyMTk1NTdcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXHRcdCAqIGJ5dGVzKSB0aW1lcyBvdXQgaWYgTUVTT05fU0RIQ19NSVNDX01BTlVBTF9TVE9QIGlzIG5vdCBzZXQuXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMi0vKlxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6MzogKiBtZXNvbi1teC1zZGlvLmMgLSBNZXNvbjYsIE1lc29uOCBhbmQgTWVzb244YiBTRElPL01NQyBIb3N0IENvbnRyb2xsZXJcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvbW1jLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjMwLXtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjYzMTpcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMi1cdFx0LnJlZ19iaXRzID0gOCxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NjgtXHRob3N0LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjY2OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZtZXNvbl9teF9zZGlvX3JlZ21hcF9jb25maWcpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjcwLVx0aWYgKElTX0VSUihob3N0LVx1MDAzZXJlZ21hcCkpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo3NDk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YW1sb2dpYyxtZXNvbjgtc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthbWxvZ2ljLG1lc29uOGItc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1OC1cdC5kcml2ZXIgID0ge1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzU5Olx0XHQubmFtZSA9IFwmIzM0O21lc29uLW14LXNkaW9cJiMzNDssXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXHRcdC5wcm9iZV90eXBlID0gUFJPQkVfUFJFRkVSX0FTWU5DSFJPTk9VUyxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zMy0gKlxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmM6MzQ6ICogLSBGb3Igbm93LCB3ZSB3b24mIzM5O3QgdHJ5IHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgcmVhbCBtbWMvc2Qvc2Rpb1xuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzUtICogICBjb250cm9sbGVyLCBhbHRob3VnaCBzb21lIG9mIHRoZW0gZG8gaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGZvclxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTExMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3UzMDAgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVx0LmRhdGFjdHJsX2Jsb2Nrc3pcdD0gMTEsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcdC5zdF9zZGlvXHRcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI0LVx0LnB3cnJlZ19wb3dlcnVwXHRcdD0gTUNJX1BXUl9PTixcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMzY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9ub21hZGlrID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNDktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzYtXHQuZG1hX3Bvd2VyX29mXzJcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxMS1cdC5kbWFfcG93ZXJfb2ZfMlx0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcdC5zdF9zZGlvXHRcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxNC1cdC5zdF9jbGtkaXZcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI0NC1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MjQ1Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDY6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0yNTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9zdG0zMl9zZG1tYyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzItXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI3MzpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc0LVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTIsIDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc1LVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNSksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzY6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3Ny1cdC5idXN5X3RpbWVvdXRcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAwLVx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDE6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMi1cdC5zdG0zMl9pZG1hYnNpemVfbWFza1x0PSBHRU5NQVNLKDE2LCA1KSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMy1cdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cdD0gQklUKDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MzA0Olx0LnN1cHBvcnRzX3NkaW9faXJxXHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDUtXHQuZG1hX2xsaVx0XHQ9IHRydWUsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MzEzPXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfc3RtMzJfc2RtbWN2MyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTYsIDYpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNiksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cdC5kbWFfbGxpXHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz00MjU9c3RhdGljIHZvaWQgbW1jaV93cml0ZV9kYXRhY3RybHJlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1MzIgZGF0YWN0cmwpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDI4LVx0ZGF0YWN0cmwgfD0gaG9zdC1cdTAwM2VkYXRhY3RybF9yZWcgXHUwMDI2IChob3N0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6NDI5Olx0XHRcdFx0XHQgIGhvc3QtXHUwMDNldmFyaWFudC1cdTAwM2VkYXRhY3RybF9tYXNrX3NkaW8pO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTEyMzY9c3RhdGljIHZvaWQgbW1jaV9zdGFydF9kYXRhKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYxLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2MjpcdGlmIChob3N0LVx1MDAzZW1tYy1cdTAwM2VjYXJkIFx1MDAyNlx1MDAyNiBtbWNfY2FyZF9zZGlvKGhvc3QtXHUwMDNlbW1jLVx1MDAzZWNhcmQpKSB7XG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYzLVx0XHR1MzIgY2xrO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2NC1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNjU6XHRcdGRhdGFjdHJsIHw9IHZhcmlhbnQtXHUwMDNlZGF0YWN0cmxfbWFza19zZGlvO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjcyLVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNzM6XHRcdGlmICh2YXJpYW50LVx1MDAzZXN0X3NkaW8gXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZmxhZ3MgXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cdFx0ICAgIChob3N0LVx1MDAzZXNpemUgXHUwMDNjIDggfHxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3NjgtXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzcwLXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3ODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhpcyBTRElPIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gVGhlcmUmIzM5O3Mgbm8gYnVpbHQtaW4gYGR1bW15X21tY2Agb3IgYHZoY2lgIGVxdWl2YWxlbnQgZm9yIFNESU8sIHdoaWNoIHdvdWxkIGFsbG93IG1lIHRvIGluamVjdCBhIHZpcnR1YWwgU0RJTyBkZXZpY2UuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBgZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmNgLCBidXQgaXQgZXhwbGljaXRseSBzYXlzIGl0ICpkb2VzbiYjMzk7dCogaW50ZXJhY3Qgd2l0aCByZWFsIE1NQy9TRC9TRElPIGNvbnRyb2xsZXJzLiBRRU1VIGRvZXMgaGF2ZSBgc2RoY2ktcGNpYCB0byBlbXVsYXRlIGFuIFNEIGhvc3QgY29udHJvbGxlciwgYnV0IHRoYXQmIzM5O3MgZm9yIFNEIGNhcmRzLCBub3QgU0RJTy4gRGFtbi4gSSBldmVuIHdvbmRlcmVkIGlmIGEgdXNlci1zcGFjZSBwcm9ncmFtIGNvdWxkIGFjdCBhcyBhbiBTRElPIGRldmljZSBzb21laG93LCBidXQgbm8sIHRoZSBMaW51eCBrZXJuZWwgZG9lc24mIzM5O3Qgb2ZmZXIgYW55IGludGVyZmFjZSBmb3IgdGhhdC4KClNvLCB0aGUgYHJ0dzg4YCBTRElPIGRyaXZlciBjYW4mIzM5O3QgYmUgcHJvYmVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIGl0IHVucmVhY2hhYmxlIGNvZGUuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkLCBidXQgbmV2ZXIgcHJvYmVkLCBkb2VzIHRoYXQgY29kZSBtYXR0ZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IFRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyB1bnJlYWNoYWJsZSBjb2RlIGxpa2UgdGhpcy4KCkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBgbWFjODAyMTFfaHdzaW1gICptaWdodCogcHJvdmlkZSBhIHBhdGggdG8gdGhpcyBjb2RlLCBidXQgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBJdCYjMzk7cyBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgc29mdHdhcmUtZW11bGF0ZWQgV2ktRmkgZHJpdmVyIGFuZCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBydHc4OGAgZHJpdmVyIG9yIGFueSBvZiB0aGUgUmVhbHRlayBkcml2ZXIgY29kZS4KClRoZSBwYXRjaCBtb2RpZmllcyBgdHguY2AsIGJ1dCB0aGUgYWRkZWQgY29kZSBpcyBndWFyZGVkIGJ5IGEgY29uZGl0aW9uIHRoYXQgcmVxdWlyZXMgdGhlIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhbmQgYW4gU0RJTyBpbnRlcmZhY2UuIEkgbG9va2VkIGF0IHRoZSBjb25kaXRpb246CmBgYGMKCWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEICZhbXA7JmFtcDsKCSAgICAgcnR3ZGV2LSZndDtoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fAoJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKYGBgClRoZSBVU0IgcGF0aCB3YXMgYWxyZWFkeSB0aGVyZTsgdGhlIHBhdGNoIGp1c3QgYWRkcyBgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gVGhlIG5ldyBjb25kaXRpb24gaXMgb25seSB0YWtlbiBmb3IgdGhlIFJUTDg3MjNCUyBjaGlwICh0aGF0IHRyaWdnZXJzIGBydHdfaXNfODcyM2JzKHJ0d2RldilgKSB3aGljaCAqcmVxdWlyZXMqIHRoZSBTRElPIGludGVyZmFjZS4gQW55IGNoYW5nZXMgaW4gYHNkaW8uY2AgYW5kIGBzZGlvLmhgIGFyZSAqb25seSogY29tcGlsZWQgYW5kIHVzZWQgaWYgdGhlIFNESU8gaW50ZXJmYWNlIGlzIGFjdGl2ZS4KClNvLCBldmVuIGlmIGBDT05GSUdfUlRXODhfU0RJT2AgaXMgc2V0LCBgc2Rpby5jYCB3aWxsIHN0aWxsIGJlIGNvbXBpbGVkLCBidXQgdGhlIGNvZGUgd2lsbCAqb25seSogYmUgZXhlY3V0ZWQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLgoKVGhlIGJvdHRvbSBsaW5lOiBnaXZlbiB0aGF0IHdlIGNhbiYjMzk7dCBlbXVsYXRlIFNESU8gZGV2aWNlcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBzb21lIGNsZXZlciBzb2Z0d2FyZSBpbmplY3Rpb24gbWVjaGFuaXNtIGZvciBTRElPIGhpZGluZyBpbiBgZHJpdmVycy9tbWMvY29yZS9gLCBidXQgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvX3JlZ2lzdGVyX2RyaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jPTE3NDU9c3RhdGljIGludCBfX2luaXQgYnRtcnZsX3NkaW9faW5pdF9tb2R1bGUodm9pZClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMtMTc0Ni17XG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jOjE3NDc6XHRpZiAoc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YnRfbXJ2bF9zZGlvKSAhPSAwKSB7XG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jLTE3NDgtXHRcdEJUX0VSUihcJiMzNDtTRElPIERyaXZlciBSZWdpc3RyYXRpb24gRmFpbGVkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9Mjc0PXN0YXRpYyB2b2lkIHNkaW9fbGVnYWN5X3NodXRkb3duKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4Mi0vKipcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzoyODM6ICpcdF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGZ1bmN0aW9uIGRyaXZlclxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4NC0gKlx0QGRydjogU0RJTyBmdW5jdGlvbiBkcml2ZXJcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg2LSAqL1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjI4NzppbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg4LXtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAxLX1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzozMDI6RVhQT1JUX1NZTUJPTF9HUEwoX19zZGlvX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAzLVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM9MTExNT1zdGF0aWMgaW50IF9faW5pdCBzZGlvX3VhcnRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0MC1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM6MTE0MTpcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnNkaW9fdWFydF9kcml2ZXIpO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMTQyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvc2Rpby5jPTE5NT1pbnQgYjQzX3NkaW9faW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYy0xOTYte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYzoxOTc6XHRyZXR1cm4gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YjQzX3NkaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9zZGlvLmMtMTk4LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTI3MT1pbnQgYnJjbWZfc2Rpb19yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEyNzIte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjEyNzM6XHRyZXR1cm4gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YnJjbWZfc2RtbWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMjc0LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYz0xMzkwPXN0YXRpYyBpbnQgX19pbml0IGlmX3NkaW9faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy0xMzk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6MTM5NzpcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmlmX3NkaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM9NDkzPXN0YXRpYyBpbnQgX19pbml0IHdmeF9jb3JlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy01MDItXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6NTAzOlx0XHRyZXQgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ3Znhfc2Rpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtNTA0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9jdzEyMDBfc2Rpby5jPTM4OD1zdGF0aWMgaW50IF9faW5pdCBjdzEyMDBfc2Rpb19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmMtNDAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmM6NDAxOlx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2c2Rpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmMtNDAyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL29zX2RlcC9zZGlvX2ludGYuYz00NTE9c3RhdGljIGludCBfX2luaXQgcnR3X2Rydl9lbnRyeSh2b2lkKVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDUyLXtcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jOjQ1MzpcdHJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydGw4NzIzYnNfc2Rpb19kcml2ZXIpO1xuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDU0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaD03NT1zdHJ1Y3Qgc2Rpb19kcml2ZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExMC0vKiB1c2UgYSBtYWNybyB0byBhdm9pZCBpbmNsdWRlIGNoYWluaW5nIHRvIGdldCBUSElTX01PRFVMRSAqL1xuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTExOiNkZWZpbmUgc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2KSBcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEyOlx0X19zZGlvX3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFKVxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEzOmV4dGVybiBpbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKiwgc3RydWN0IG1vZHVsZSAqKTtcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExNC1leHRlcm4gdm9pZCBzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjQtI2RlZmluZSBtb2R1bGVfc2Rpb19kcml2ZXIoX19zZGlvX2RyaXZlcikgXFxcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oOjEyNTpcdG1vZHVsZV9kcml2ZXIoX19zZGlvX2RyaXZlciwgc2Rpb19yZWdpc3Rlcl9kcml2ZXIsIFxcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjYtXHRcdCAgICAgIHNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTE4CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDE1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGVyZSYjMzk7cyBubyBgZHVtbXlfc2Rpb2Agb3IgYW55dGhpbmcgY29tcGFyYWJsZSBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdG8gYWxsb3cgZm9yIFNESU8gZW11bGF0aW9uLiBUaGUgYHJ0dzg4YCBkcml2ZXIgdXNlcyBgbW9kdWxlX3NkaW9fZHJpdmVyYCBvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgIHRvIHJlZ2lzdGVyIGl0cyBTRElPIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIGBwcm9iZWAgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgdGhlIFNESU8tc3BlY2lmaWMgY29kZSwgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgaGl0IHVubGVzcyB0aGVyZSYjMzk7cyBhbiBhY3R1YWwgU0RJTyBjb250cm9sbGVyIGFuZCBjYXJkIHByZXNlbnQuIFNvLCBhbnkgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSB0aWVkIHRvIFNESU8gYXJlIHVucmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY2hhbmdlcy4gVGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gaW4gYHNkaW8uY2A6ICB0aGUgY2hhbmdlIHRvIHVzZSBgbW9kX2RlbGF5ZWRfd29ya2AgaW5zdGVhZCBvZiBgcXVldWVfd29ya2Agd2hpY2ggYWZmZWN0cyB0aGUgcmV0cnkgbWVjaGFuaXNtIGZvciBTRElPIGNoaXBzLiBJdCBtb2RpZmllcyB0aGUgYmVoYXZpb3IgZm9yICphbGwqIFNESU8gY2hpcHMgc3VwcG9ydGVkIGJ5IGBydHc4OGAuIEJ1dCBhZ2FpbiwgdGhhdCYjMzk7cyBTRElPLXNwZWNpZmljLiBUaGlzIGNoYW5nZSBpcyBzdGlsbCB1bi1mdXp6YWJsZS4KClRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYHJ4LmNgOgpgYGBjCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiAmYW1wOyZhbXA7IHBrdF9zdGF0LSZndDtwa3RfbGVuID09IDApIHsKJiM0MzsJaWYgKHBrdF9zdGF0LSZndDtwa3RfbGVuID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7CmBgYAphbmQgYHR4LmNgOgpgYGBjCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKYGBgClRoZXNlIGFmZmVjdCBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggYXJlIGNhbGxlZCBmb3IgYWxsIGludGVyZmFjZXMgKFBDSWUsIFVTQiwgYW5kIFNESU8pLiBCdXQsIEkgKmNhbiogcmVhY2ggYHJ0dzg4YCB2aWEgUENJZSBvciBVU0IuIEZvciBpbnN0YW5jZSwgYHJ0dzg4MjJiZWAgaXMgYSBQQ0llIGRyaXZlcjsgYHJ0dzg4MjJidWAgaXMgVVNCLiBVc2luZyBgZHVtbXlfaGNkYCBvciBgcmF3X2dhZGdldGAsIEkgKmNhbiogZW11bGF0ZSBhIFVTQiBkZXZpY2UgbWF0Y2hpbmcgdGhlIGBydHc4OGAgVVNCIElEcyBhbmQgdGhlcmVmb3JlIHRyaWdnZXIgYHJ0d19yeF9maWxsX3J4X3N0YXR1c2AuCgpIb3dldmVyLCB0aGUga2V5IGhlcmUgaXMgdGhlIGBydHdfaXNfODcyM2JzKClgIGNoZWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIFRoZSBjaGFuZ2UgaW4gYHJ4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBub24tODcyM2JzIGNoaXBzLCBpcyBlc3NlbnRpYWxseSByZW9yZGVyaW5nIG9mIGFuIGFscmVhZHkgcHJlc2VudCBjb25kaXRpb24sIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzaW1wbHkgYWRkcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggd2lsbCAqYWx3YXlzKiBiZSBmYWxzZSBmb3IgVVNCL1BDSWUgZGV2aWNlcy4gSW4gYHR4LmNgIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMuIEFnYWluLCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyBhZGRlZCwgYW5kIGl0IGlzIHN0aWxsIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gVGhlIGNoYW5nZSBpcyBub24tZnVuY3Rpb25hbC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgYXJlIGZvciBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBhbmQgdGhlIFNESU8tc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBpbiBgc2Rpby5jYC4gVGhlIFNESU8gY2hhbmdlcyBhcmUgaW5hY2Nlc3NpYmxlLCBhbmQgdGhlIGBydHdfaXNfODcyM2JzKClgIGlzIGd1YXJkZWQgYnkgdGhlIGBSVFdfSENJX1RZUEVfU0RJT2Agd2hpY2ggY2FuIG5ldmVyIGJlIHNldCBieSBVU0IvUENJZSBpbiB0aGlzIGRyaXZlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrOiBldmVuIGlmIEkgZW11bGF0ZSBhIFVTQiBkZXZpY2UgYW5kIHNvbWVob3cgc2V0IGl0cyBjaGlwIElEIHRvIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCwgYHJ0d19pc184NzIzYnMoKWAgd2lsbCBzdGlsbCByZXR1cm4gZmFsc2UgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU9gLiBPa2F5LCB0aGF0IGNvbmZpcm1zIGl0LgoKVGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHBhdGNoIHBlcmZlY3RseSBmaXRzIHRoZSBjcml0ZXJpYTogaXQgaW50cm9kdWNlcyBjb2RlIHBhdGhzIHRoYXQgY2Fubm90IGJlIGFjY2Vzc2VkIGR1ZSB0byB0aGUgbGFjayBvZiBTRElPIGVtdWxhdGlvbiwgYW5kIHRoZSBzaGFyZWQgY29kZSBoYXMgY2hlY2tzIGluIHBsYWNlIHRoYXQgcHJldmVudCB0aGVtIGZyb20gYWZmZWN0aW5nIG5vbi1TRElPIHBhdGhzLgoKSSYjMzk7bSBjb25maWRlbnQuICoqV29ydGhGdXp6aW5nPWZhbHNlKiouCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgV2ktRmkgY2hpcCwgd2hpY2ggb3BlcmF0ZXMgb3ZlciB0aGUgU0RJTyBidXMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBTRElPLXNwZWNpZmljIGRyaXZlciBmaWxlIChzZGlvLmMpIG9yIGd1YXJkZWQgYnkgdGhlIHJ0d19pc184NzIzYnMoKSBoZWxwZXIsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBSVFdfSENJX1RZUEVfU0RJTy4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3Qgc3VwcG9ydCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYXJiaXRyYXJ5IFNESU8gZGV2aWNlcyAodW5saWtlIFVTQiB2aWEgZHVtbXlfaGNkL3Jhd19nYWRnZXQpLCB0aGUgU0RJTyBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4gVGhlIG1pbm9yIGNoYW5nZXMgdG8gc2hhcmVkIFJYL1RYIHBhdGhzIGZvciBvdGhlciBjaGlwcyBhcmUgcHVyZWx5IG5vbi1mdW5jdGlvbmFsIGNvbmRpdGlvbiByZW9yZGVyaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwLCB3aGljaCBvcGVyYXRlcyBvdmVyIHRoZSBTRElPIGJ1cy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNESU8tc3BlY2lmaWMgZHJpdmVyIGZpbGUgKHNkaW8uYykgb3IgZ3VhcmRlZCBieSB0aGUgcnR3X2lzXzg3MjNicygpIGhlbHBlciwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgZm9yIFJUV19IQ0lfVFlQRV9TRElPLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBzdXBwb3J0IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhcmJpdHJhcnkgU0RJTyBkZXZpY2VzICh1bmxpa2UgVVNCIHZpYSBkdW1teV9oY2QvcmF3X2dhZGdldCksIHRoZSBTRElPIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiBUaGUgbWlub3IgY2hhbmdlcyB0byBzaGFyZWQgUlgvVFggcGF0aHMgZm9yIG90aGVyIGNoaXBzIGFyZSBwdXJlbHkgbm9uLWZ1bmN0aW9uYWwgY29uZGl0aW9uIHJlb3JkZXJpbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjAwLjg2OTAwNzQzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODU0NzUzNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MTowMC44NjkwMTI5MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODk3NjE3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Y2VlNTg2YjU0NTVlNWJiMzU3MWMzZmFhMTI4MGI4Y2Y5ZjYzYmEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XFxuIFxcdFJUV19DSElQX1RZUEVfODcyM0QsXFxuIFxcdFJUV19DSElQX1RZUEVfODgyMUMsXFxuIFxcdFJUV19DSElQX1RZUEVfODcwM0IsXFxuK1xcdFJUV19DSElQX1RZUEVfODcyM0IsXFxuIFxcdFJUV19DSElQX1RZUEVfODgyMUEsXFxuIFxcdFJUV19DSElQX1RZUEVfODgxMkEsXFxuIFxcdFJUV19DSElQX1RZUEVfODgxNEEsXFxuQEAgLTIxOTQsNiArMjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNldHhfc3RiYztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmZkZTIxYzg0MGFjMDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXG4gXFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcXG4gXFxuLVxcdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTIgYW5kXFxuLVxcdCAqIHNpbXBseSBkcm9wcyB0aGUgcGFja2V0LlxcbitcXHQvKlxcbitcXHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTJcXG4rXFx0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFxcdTAwMjZcXHUwMDI2IHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDApIHtcXG4rXFx0aWYgKHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xcbiBcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xcbiBcXHRcXHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXFxcInplcm8gbGVuZ3RoIHBhY2tldFxcXCIpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG5AQCAtMjAsNiArMjAsMTcgQEBcXG4gI2luY2x1ZGUgXFxcInR4LmhcXFwiXFxuIFxcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcXHRcXHRcXHQ1MFxcbisjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXFx0XFx0XFx0XFx0MTAwMFxcbitcXG4rLypcXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcXG4rICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxcbisgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XFxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxcbisgKi9cXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcXHRcXHRcXHQxNlxcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlxcdFxcdFxcdDhcXG4rI2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoMSlcXG4gXFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxcbiB7XFxuQEAgLTU0OCwxMiArNTU5LDE1NyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcXG4rICogZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGF0b21pY190OyB3aGVuZXZlciB0aGV5IGNsYWltIHRoZXJlIGlzXFxuKyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXFxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBmcmVlX3R4cGcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCxcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdyxcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcXG4rICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZFxcbisgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFxuK1xcdGlmICghZnJlZV90eHBnKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xcbisgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxcbisgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kXFxuKyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV90YWJsZVswXTtcXG4rXFx0dTE2IGFjcV9wZ19udW0gPSBydHdkZXYtXFx1MDAzZWZpZm8uYWNxX3BnX251bTtcXG4rXFx0dTE2IHJlc2VydmVkX251bTtcXG4rXFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcXG4rXFx0XFx0cnR3X2VycihydHdkZXYsXFxuK1xcdFxcdFxcdFxcXCJubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfbnVtLCBhY3FfcGdfbnVtKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdCpwdWJxX251bSA9IGFjcV9wZ19udW0gLSByZXNlcnZlZF9udW07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogU2VlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIHdoZW4gdGhlIGNoaXAgaGFzIG5vdGhpbmcgdG8gcmVwb3J0IHlldC4gKi9cXG4rXFx0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xcbitcXHRcXHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcXHUwMDI2cHVicV9udW0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cGdfdGJsID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV90YWJsZVswXTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXFx1MDAzZWhxX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLCBwZ190YmwtXFx1MDAzZW5xX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXFx1MDAzZWxxX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XFxuK1xcdH1cXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLFxcbitcXHRcXHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsMTAgKzc4OCw1NiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0dTggZnJlZTtcXG4rXFxuK1xcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xcbitcXHRcXHRpZiAoZnJlZSkge1xcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdHVuc2lnbmVkIGludCB0YWtlbjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRpZiAoIWRlZGljYXRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMCk7XFxuK1xcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XFxuK1xcbitcXHRwYWdlcyAtPSB0YWtlbjtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwMjZcXHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpIFxcdTAwM2MgMClcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHVuc2lnbmVkIGludCBwYWdlcztcXG4rXFx0c2l6ZV90IHdyaXRlX3NpemU7XFxuIFxcdGJvb2wgYnVzX2NsYWltO1xcbiBcXHRzaXplX3QgdHhzaXplO1xcbiBcXHR1MzIgdHhhZGRyO1xcbkBAIC02NDUsMzEgKzg0Nyw3MyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCF0eGFkZHIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cXHUwMDNlbGVuLCA0KTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xcbitcXHRcXHRcXHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBfX3NrYl9wYWQoKSB6ZXJvZXMgdGhlIHBhZGRpbmcgd2l0aG91dCBtb3Zpbmcgc2tiLVxcdTAwM2VsZW4gYW5kXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVzIHdoZW4gdGhlIHNrYiBpcyBjbG9uZWQgb3Igc2hvcnQgb24gdGFpbHJvb20sXFxuK1xcdFxcdCAqIHNvIHRoZSBwYWRkaW5nIGNhbiBuZXZlciBsYW5kIGluIGEgYnVmZmVyIGEgY2xvbmUgc3RpbGxcXG4rXFx0XFx0ICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzXFxuK1xcdFxcdCAqIHN0aWxsIG93biBpdCwgb25lIHJlcXVldWVzIGl0IGFuZCB0aGUgb3RoZXIgZnJlZXMgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9fc2tiX3BhZChza2IsIHdyaXRlX3NpemUgLSBza2ItXFx1MDAzZWxlbiwgZmFsc2UpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZyZWUgcGFnZSBjaGVjaywgdGhlIG91dHB1dCBxdWV1ZSB3YWl0IGFuZCB0aGUgYWNjb3VudGluZ1xcbitcXHQgKiBhZnRlciB0aGUgdHJhbnNmZXIgbXVzdCBub3QgaW50ZXJsZWF2ZSB3aXRoIGFub3RoZXIgd3JpdGVyOiB0aGVcXG4rXFx0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcXG4rXFx0ICogYm90aCBwYXNzIHRoZSBjaGVja3MgY2FuIGNsYWltIHRoZSBzYW1lIHBhZ2VzIGFuZCBvdXRwdXQgcXVldWVcXG4rXFx0ICogZW50cnksIGFmdGVyIHdoaWNoIHRoZSBjaGlwIHNpbGVudGx5IGRpc2NhcmRzIHdoaWNoZXZlciB0cmFuc2ZlclxcbitcXHQgKiBhcnJpdmVzIHNlY29uZC5cXG4rXFx0ICovXFxuK1xcdGlmIChydGw4NzIzYnMpXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcXG4gXFxuIFxcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcXG4gXFx0XFx0cnR3X3dhcm4ocnR3ZGV2LCBcXFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBfX2Z1bmNfXywgcXVldWUpO1xcbiBcXG4gXFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcXG4tXFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbi1cXG4tXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLCB0eHNpemUpO1xcbi1cXG4rXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgd3JpdGVfc2l6ZSk7XFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYyk7XFxuIFxcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldixcXG4gXFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFxcXCIsXFxuLVxcdFxcdFxcdCB0eHNpemUsIHR4YWRkcik7XFxuK1xcdFxcdFxcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XFxuK1xcdH1cXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdGlmIChydGw4NzIzYnMpXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfY3JlZGl0X2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC02NzcsNyArOTIxLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XFxuK1xcdFxcdFxcdFxcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNjg1LDYgKzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHR1OCBzaXplLCB0aW1lb3V0O1xcbiBcXG4gXFx0c3dpdGNoIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkKSB7XFxuK1xcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcXG5AQCAtNzEyLDYgKzk2MSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRcXHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xcbiBcXG4gXFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTc0OSw5ICsxMDAwLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXFxuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXFxuKyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cXHUwMDNlY2hpcDtcXG4rXFx0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VmaWZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTMyIGZyZWVfdHhwZztcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXFx1MDAyNnB1YnFfbnVtKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cXHUwMDNlbnFfbnVtLCBwZ190YmwtXFx1MDAzZWV4cV9udW0pKTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXFx1MDAzZWhxX251bSwgcGdfdGJsLVxcdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XFxuK1xcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxcbitcXHQgKi9cXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTEzOCw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MjIsMTIgKzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcXG4gXFx0cmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCBcXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHNcXG4rICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cXG4rICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFdSSVRFX09OQ0UocnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIHRydWUpO1xcbitcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBxX21hcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgd29ya2VyIG1heSBoYXZlIGRyYWluZWQgdGhlIHF1ZXVlIGJldHdlZW4gdGhlIGxlbmd0aCBjaGVja1xcbitcXHQgKiBhYm92ZSBhbmQgdGhlIGZsYWcgYmVjb21pbmcgdmlzaWJsZTsgaXRzIHdha2UgY2hlY2sgdGhlbiBzYXcgdGhlXFxuK1xcdCAqIGZsYWcgc3RpbGwgY2xlYXIgYW5kIHRoaXMgc3RvcCB3b3VsZCBuZXZlciBiZSB1bmRvbmUuIFJlLWNoZWNrXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBmbGFnIGlzIHNldCBhbmQgdW5kbyB0aGUgc3RvcCBpZiBzby4gQm90aCBzaWRlcyBjYW5cXG4rXFx0ICogd2FrZSwgd2hpY2ggaXMgaGFybWxlc3M7IHRoZSBiYXJyaWVyIHBhaXJzIHdpdGggdGhlIG9uZSBpblxcbitcXHQgKiBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZSgpIHNvIGF0IGxlYXN0IG9uZSBzaWRlIGRvZXMuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYz1cXG4rXFx0ICAgIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikge1xcbitcXHRcXHRXUklURV9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7XFxuK1xcdFxcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cXHUwMDNlaHcsIHFfbWFwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBwYWlycyB3aXRoIHRoZSBiYXJyaWVyIGluIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKCkgKi9cXG4rXFx0c21wX21iKCk7XFxuK1xcbitcXHRpZiAoIVJFQURfT05DRShydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2UgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRXUklURV9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7XFxuK1xcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cXHUwMDNlaHcsIHFfbWFwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0ZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSA9IHJ0d190eF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHUxNiBxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSAqdHhfZGF0YTtcXG4gXFxuIFxcdHJ0d19zZGlvX3R4X3NrYl9wcmVwYXJlKHJ0d2RldiwgcGt0X2luZm8sIHNrYiwgcXVldWUpO1xcbkBAIC05MzUsOCArMTMwNywxNSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdHR4X2RhdGEgPSBydHdfc2Rpb19nZXRfdHhfZGF0YShza2IpO1xcbiBcXHR0eF9kYXRhLVxcdTAwM2VzbiA9IHBrdF9pbmZvLVxcdTAwM2VzbjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIHNrYl9xdWV1ZV90YWlsKCkgcHVibGlzaGVzIHRoZSBza2IgdG8gdGhlIFRYIHdvcmtlciwgd2hpY2ggbWF5XFxuK1xcdCAqIHByb2Nlc3MgYW5kIGZyZWUgaXQgaW1tZWRpYXRlbHksIHNvIG5vdGhpbmcgbWF5IHRvdWNoIHRoZSBza2JcXG4rXFx0ICogcGFzdCB0aGlzIHBvaW50LlxcbitcXHQgKi9cXG4gXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4gXFxuK1xcdHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzE0NzQsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGlzXFxuK1xcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFxuIFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcXG5AQCAtMTIzMSwzMyArMTYxOCw4MSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuKy8qXFxuKyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXFxuKyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IHFfbWFwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XFxuIFxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4rXFx0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXFxuKyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cXG4rICpcXG4rICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcXG4rICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcXG4rICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxcbisgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcXG4rICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXFxuKyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXFxuKyAqXFxuKyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxcbisgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cXG4rICovXFxuK3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWxheTtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gLUVOT01FTSlcXG4rXFx0XFx0ZGVsYXkgPSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWTtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpXFxuK1xcdFxcdGRlbGF5ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNndvcmtfZGF0YS1cXHUwMDNld29yaywgZGVsYXkpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9XFxuLVxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTtcXG4rXFx0XFx0Y29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSxcXG4rXFx0XFx0XFx0ICAgICB3b3JrKTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbi1cXHRpbnQgbGltaXQsIHF1ZXVlO1xcbitcXHRpbnQgbGltaXQsIHF1ZXVlLCByZXQ7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuQEAgLTEyNjcsNyArMTcwMiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcXVldWUsIHJldCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdFxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjk0LDE0ICsxNzM1LDE4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW2ldKTtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xcbitcXHR9XFxuIFxcdHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xcbiBcXHRpZiAoIXJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcXG4gXFx0XFx0Z290byBlcnJfZGVzdHJveV93cTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMzE1LDYgKzE3NjAsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXFx1MDAzZXR4d3EpO1xcbiBcXHRrZnJlZShydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbmluZGV4IDQ1N2U4YjAyMzgwZTUuLjZlN2U2MDA5NzQ0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAwKVxcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVxcdEJJVCg0KVxcbiBcXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxcbkBAIC03Nyw2ICs3OCwxNCBAQFxcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXFx0XFx0XFx0QklUKDI4KVxcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVxcdFxcdEJJVCgyOSlcXG4rI2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0tcXHRcXHRcXFxcXFxuK1xcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcXG4gXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcXG5AQCAtODYsNiArOTUsMTAgQEBcXG4gI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QR1xcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxRSlcXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1xcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0hcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcXHRcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXFx0XFx0XFx0R0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUJcXHRcXHRcXHRHRU5NQVNLKDMxLCAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXFx0XFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDI0KVxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbiB9O1xcbiBcXG5AQCAtMTU5LDYgKzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xcbiBcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFx0Ym9vbCB0eF9xdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFxuK1xcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbG93O1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcXG4rXFx0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XFxuK1xcdC8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi9cXG4rXFx0c3RydWN0IG11dGV4IHR4X2NyZWRpdF9sb2NrO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG5AQCAtMjA4LDggKzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXF1ZXVlLCBza2IpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXFfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4gXFx0XFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XFxuIFxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnR4X3JlcG9ydC1cXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MDIuMjU5NDI1OTY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU0NjQzMjM5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwLCB3aGljaCBvcGVyYXRlcyBvdmVyIHRoZSBTRElPIGJ1cy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNESU8tc3BlY2lmaWMgZHJpdmVyIGZpbGUgKHNkaW8uYykgb3IgZ3VhcmRlZCBieSB0aGUgcnR3X2lzXzg3MjNicygpIGhlbHBlciwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgZm9yIFJUV19IQ0lfVFlQRV9TRElPLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBzdXBwb3J0IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhcmJpdHJhcnkgU0RJTyBkZXZpY2VzICh1bmxpa2UgVVNCIHZpYSBkdW1teV9oY2QvcmF3X2dhZGdldCksIHRoZSBTRElPIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiBUaGUgbWlub3IgY2hhbmdlcyB0byBzaGFyZWQgUlgvVFggcGF0aHMgZm9yIG90aGVyIGNoaXBzIGFyZSBwdXJlbHkgbm9uLWZ1bmN0aW9uYWwgY29uZGl0aW9uIHJlb3JkZXJpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmZkZTIxYzg0MGFjMDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbisvKlxuKyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcbisgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkXG4rICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuXG4rICovXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKCFmcmVlX3R4cGcpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXNcbisgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxuKyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmRcbisgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LlxuKyAqL1xuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0dTE2IGFjcV9wZ19udW0gPSBydHdkZXYtXHUwMDNlZmlmby5hY3FfcGdfbnVtO1xuK1x0dTE2IHJlc2VydmVkX251bTtcbitcbitcdHJlc2VydmVkX251bSA9IHBnX3RibC1cdTAwM2VocV9udW0gKyBwZ190YmwtXHUwMDNlbHFfbnVtICsgcGdfdGJsLVx1MDAzZW5xX251bSArXG4rXHRcdCAgICAgICBwZ190YmwtXHUwMDNlZXhxX251bSArIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbitcdGlmIChhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKSB7XG4rXHRcdHJ0d19lcnIocnR3ZGV2LFxuK1x0XHRcdFwibm8gdHJhbnNtaXQgcGFnZXMgbGVmdCBmb3IgdGhlIHB1YmxpYyBxdWV1ZTogJXUgb2YgJXUgcmVzZXJ2ZWRcXG5cIixcbitcdFx0XHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdCpwdWJxX251bSA9IGFjcV9wZ19udW0gLSByZXNlcnZlZF9udW07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUxNiBwdWJxX251bTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqL1xuK1x0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcdTAwMjZwdWJxX251bSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVx1MDAzZWhxX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVx1MDAzZWxxX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xuK1x0fVxuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLFxuK1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDEwICs3ODgsNTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuK1x0dTggZnJlZTtcbitcbitcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcdHVuc2lnbmVkIGludCB0YWtlbjtcbitcdGludCBmcmVlO1xuK1xuK1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdGlmICghZGVkaWNhdGVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbitcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbitcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4rXG4rXHRwYWdlcyAtPSB0YWtlbjtcbitcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbkBAIC02NDUsMzEgKzg0Nyw3MyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghdHhhZGRyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIF9fc2tiX3BhZCgpIHplcm9lcyB0aGUgcGFkZGluZyB3aXRob3V0IG1vdmluZyBza2ItXHUwMDNlbGVuIGFuZFxuK1x0XHQgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLFxuK1x0XHQgKiBzbyB0aGUgcGFkZGluZyBjYW4gbmV2ZXIgbGFuZCBpbiBhIGJ1ZmZlciBhIGNsb25lIHN0aWxsXG4rXHRcdCAqIHNoYXJlcy4gSXQgbXVzdCBub3QgZnJlZSB0aGUgc2tiIG9uIGZhaWx1cmU6IGJvdGggY2FsbGVyc1xuK1x0XHQgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHdyaXRlX3NpemUgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRyZXQgPSBfX3NrYl9wYWQoc2tiLCB3cml0ZV9zaXplIC0gc2tiLVx1MDAzZWxlbiwgZmFsc2UpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSBmcmVlIHBhZ2UgY2hlY2ssIHRoZSBvdXRwdXQgcXVldWUgd2FpdCBhbmQgdGhlIGFjY291bnRpbmdcbitcdCAqIGFmdGVyIHRoZSB0cmFuc2ZlciBtdXN0IG5vdCBpbnRlcmxlYXZlIHdpdGggYW5vdGhlciB3cml0ZXI6IHRoZVxuK1x0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcbitcdCAqIGJvdGggcGFzcyB0aGUgY2hlY2tzIGNhbiBjbGFpbSB0aGUgc2FtZSBwYWdlcyBhbmQgb3V0cHV0IHF1ZXVlXG4rXHQgKiBlbnRyeSwgYWZ0ZXIgd2hpY2ggdGhlIGNoaXAgc2lsZW50bHkgZGlzY2FyZHMgd2hpY2hldmVyIHRyYW5zZmVyXG4rXHQgKiBhcnJpdmVzIHNlY29uZC5cbitcdCAqL1xuK1x0aWYgKHJ0bDg3MjNicylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0aWYgKHJ0bDg3MjNicykge1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQocnR3ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCIsXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4rXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwiLFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4rXHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4rXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuK1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuK1x0fVxuIFxuK291dF91bmxvY2s6XG4rXHRpZiAocnRsODcyM2JzKVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9jcmVkaXRfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzcsNyArOTIxLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XG4rXHRlbHNlXG4rXHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuK1x0XHRcdFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTY4NSw2ICs5MzMsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHU4IHNpemUsIHRpbWVvdXQ7XG4gXG4gXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG4rXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgKzk2MSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xuIFxuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICsxMDAwLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4rICogYSByZXBhaXIgcGF0aCwgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBzdGFydCBzZXF1ZW5jZTogYSBub24temVybyBmcmVlIHBhZ2VcbisgKiBjb3VudCBtZWFucyB0aGUgYWxsb2NhdGlvbiBsYXRjaGVkIGR1cmluZyBwb3dlciBvbiBhbmQgbXVzdCBiZSBsZWZ0IGFsb25lLFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtXHUwMDNlY2hpcDtcbitcdHN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWZpZm87XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuK1x0dTMyIGNsZWFyO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRpbnQgcmV0ID0gcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4rXHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXHRcdGlmIChjbGVhcilcbitcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbitcdH1cbitcbiBcdHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQocnR3ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTgxNSw3ICsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuK1x0LypcbitcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XG4rXHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbitcdCAqL1xuK1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgKzExMzgsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MjIsMTIgKzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuKy8qXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xuKyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKFJFQURfT05DRShydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgdHJ1ZSk7XG4rXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgd29ya2VyIG1heSBoYXZlIGRyYWluZWQgdGhlIHF1ZXVlIGJldHdlZW4gdGhlIGxlbmd0aCBjaGVja1xuK1x0ICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZVxuK1x0ICogZmxhZyBzdGlsbCBjbGVhciBhbmQgdGhpcyBzdG9wIHdvdWxkIG5ldmVyIGJlIHVuZG9uZS4gUmUtY2hlY2tcbitcdCAqIG5vdyB0aGF0IHRoZSBmbGFnIGlzIHNldCBhbmQgdW5kbyB0aGUgc3RvcCBpZiBzby4gQm90aCBzaWRlcyBjYW5cbitcdCAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW5cbitcdCAqIHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKCkgc28gYXQgbGVhc3Qgb25lIHNpZGUgZG9lcy5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNjPVxuK1x0ICAgIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikge1xuK1x0XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbitcdFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbitcdFx0XHRcdFx0ICB1MTYgcV9tYXApXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBwYWlycyB3aXRoIHRoZSBiYXJyaWVyIGluIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKCkgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2UgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbitcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbyxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0ZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSA9IHJ0d190eF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4rXHR1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHN0cnVjdCBydHdfc2Rpb190eF9kYXRhICp0eF9kYXRhO1xuIFxuIFx0cnR3X3NkaW9fdHhfc2tiX3ByZXBhcmUocnR3ZGV2LCBwa3RfaW5mbywgc2tiLCBxdWV1ZSk7XG5AQCAtOTM1LDggKzEzMDcsMTUgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0dHhfZGF0YSA9IHJ0d19zZGlvX2dldF90eF9kYXRhKHNrYik7XG4gXHR0eF9kYXRhLVx1MDAzZXNuID0gcGt0X2luZm8tXHUwMDNlc247XG4gXG4rXHQvKlxuK1x0ICogc2tiX3F1ZXVlX3RhaWwoKSBwdWJsaXNoZXMgdGhlIHNrYiB0byB0aGUgVFggd29ya2VyLCB3aGljaCBtYXlcbitcdCAqIHByb2Nlc3MgYW5kIGZyZWUgaXQgaW1tZWRpYXRlbHksIHNvIG5vdGhpbmcgbWF5IHRvdWNoIHRoZSBza2JcbitcdCAqIHBhc3QgdGhpcyBwb2ludC5cbitcdCAqL1xuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHRydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbitcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuK1x0ICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0aGlzciBcdTAwMjY9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcbitcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsMzMgKzE2MTgsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4rLypcbisgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAwIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMSB3aGVuIHRoZVxuKyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxuKyAqL1xuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDE7XG4gXG4rXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbitcbitcdHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlY2lkZSB3aGV0aGVyIHRoZSBSVEw4NzIzQlMgd2FudHMgdGhlIFRYIHdvcmsgdG8gcnVuIGFnYWluLCBhbmQgaWYgc29cbisgKiBhcnJhbmdlIGl0IGFuZCB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCBkcmFpbmluZy4gVHdvIGNhc2VzIG5lZWQgaXQuXG4rICpcbisgKiBBIHRyYW5zbWl0IHBhZ2Ugb3Igb3V0cHV0IHF1ZXVlIHNob3J0YWdlIGFuZCBhIGZhaWxlZCBza2IgZXhwYW5zaW9uIGFyZVxuKyAqIHRyYW5zaWVudCBhbmQgbGVhdmUgdGhlIGZyYW1lIHF1ZXVlZCwgc28gY29tZSBiYWNrIGZvciBpdCBzaG9ydGx5LiBUaGF0XG4rICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuKyAqIG5vIGZ1cnRoZXIgZnJhbWVzLCBzbyBub3RoaW5nIGVsc2Ugd291bGQga2ljayB0aGlzIHdvcmsgaXRlbSBhbmQgdGhlIGFjY2Vzc1xuKyAqIGNhdGVnb3J5IHdvdWxkIHN0YXkgc3RvcHBlZCBmb3IgZ29vZC4gVGhlIHJlbWFpbmluZyBlcnJvcnMgYXJlIGxvZ2dlZCB3aGVyZVxuKyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4rICpcbisgKiBBZnRlciBhIG1hbmFnZW1lbnQgZnJhbWUsIHJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBzbyB0aGVcbisgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbisgKi9cbitzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbitcdFx0XHRcdFx0ICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgZGVsYXk7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4rXHRcdGRlbGF5ID0gUlRXX1NESU9fVFhfUkVUUllfREVMQVk7XG4rXHRlbHNlIGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpXG4rXHRcdGRlbGF5ID0gMDtcbitcdGVsc2VcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIGRlbGF5KTtcbitcbitcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICsxNzAyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0Zm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgXHUwMDNlPSAwOyBxdWV1ZS0tKSB7XG4gXHRcdGZvciAobGltaXQgPSAwOyBsaW1pdCBcdTAwM2MgMTAwMDsgbGltaXQrKykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4rXHRcdFx0cmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0aWYgKHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHJ0d2Rldiwgd29ya19kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbitcdFx0XHRcdHJldHVybjtcbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE3MzUsMTggQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdG11dGV4X2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9jcmVkaXRfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4rXHRcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuK1x0fVxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFx0aWYgKCFydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcbiBcdFx0Z290byBlcnJfZGVzdHJveV93cTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXJ0d2RldiA9IHJ0d2Rldjtcbi1cdElOSVRfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICsxNzYwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXHUwMDNldHh3cSk7XG4gXHRrZnJlZShydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuaW5kZXggNDU3ZThiMDIzODBlNS4uNmU3ZTYwMDk3NDRiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtODYsNiArOTUsMTAgQEBcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFx0XHRcdEdFTk1BU0soNywgMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXHRcdFx0R0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlx0XHRcdEdFTk1BU0soMzEsIDI0KVxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbitcdC8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi9cbitcdHN0cnVjdCBtdXRleCB0eF9jcmVkaXRfbG9jaztcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCArMjA4LDkgQEAgdm9pZCBydHdfdHhfcmVwb3J0X2VucXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc24pXG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxdWV1ZSwgc2tiKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXFfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiBcdFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XG4gXG4gXHRtb2RfdGltZXIoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MTowMi4yNTk0MjcwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk4NzU2OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW9uIG9mIHRoZSBydHc4OCBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgZWZmb3J0cy4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgcnR3ODhgIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IG9yIGZpeGluZyBsb2dpYyBmb3IgdGhlIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBjaGlwIG92ZXIgU0RJTy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgdGhpcyBtZWFucyBmb3IgcmVhY2hhYmlsaXR5IGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGBzZGlvLmhgLCBhbmQgYHR4LmNgLCBhbGwgd2l0aGluIHRoZSBgcnR3ODhgIGRpcmVjdG9yeS5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGlwIHR5cGUsIGhlbHBlciBmdW5jdGlvbnMsIG1vZGlmeWluZyBSWCBwYWNrZXQgc2l6ZSBjaGVja3MsIGFuZCBhZGRpbmcgU0RJTy1zcGVjaWZpYyBUWCBGSUZPIGJhY2stcHJlc3N1cmUsIHBhZ2UgdHJhY2tpbmcsIE9RVCB3YWl0IGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGBydHdfc2Rpb190eF9oYW5kbGVyYCBhbmQgYWRkaW5nIG5ldyBgX3N0b3BfdHhfcXVldWVgIGFuZCBgX3dha2VfdHhfcXVldWVgIGZ1bmN0aW9ucy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlYWNoYWJsZS4gSXQncyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gVGhlIGNvZGUgdG91Y2hlcyBTRElPIGZpbGVzIGFuZCBtZW50aW9ucyBhbiBgODcyM0JTYCBjaGlwLCBzbyBpdCdzIGEgc3BlY2lmaWMgU0RJTyBjYXJkLiBDYW4gd2UgZW11bGF0ZSBTRElPIGRldmljZXMgZWZmZWN0aXZlbHkgaW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/IFN5emthbGxlciBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgU0RJTywgYWx0aG91Z2ggdGhlcmUgYXJlIG9wdGlvbnMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciBtYWM4MDIxMS9jZmc4MDIxMS1iYXNlZCBkcml2ZXJzIGJ1dCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIChgcnR3ODhgKS5cblxuVGhlIHByb21wdCBoYXMgYSBzcGVjaWZpYyBjbGF1c2UgYWJvdXQgbm90IGZ1enppbmcgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEb2VzIHRoaXMgYXBwbHkgaGVyZT8gSGFyZHdhcmUtc3BlY2lmaWMgV2ktRmkgZHJpdmVycyBvZnRlbiBmYWxsIGludG8gYSBzaW1pbGFyIGNhdGVnb3J5LCB1bmxlc3MgdGhleSBoYXZlIGEgVVNCIGludGVyZmFjZS4gRG9lcyBgcnR3ODhgIGhhdmUgVVNCIHN1cHBvcnQ/IExldCBtZSBjaGVjay5cblxuVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCwgc28gaXQncyBTRElPLWNlbnRyaWMuIFRoZSBuZXcgaGVscGVyIGZ1bmN0aW9uIGBydHdfaXNfODcyM2JzKClgIGNoZWNrcyBmb3IgYHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJT2AsIGNvbmZpcm1pbmcgdGhlIFNESU8gZGVwZW5kZW5jeS4gQ2FuIFNESU8gaXRzZWxmIGJlIGVtdWxhdGVkPyBJJ2QgbmVlZCB0byBsb29rIGludG8gd2hldGhlciB0aGVyZSdzIGFueSBTRElPIGVtdWxhdGlvbiBpbiBzeXprYWxsZXIgb3IgUUVNVS4gVXN1YWxseSwgU0RJTyBpc24ndCBlYXNpbHkgcmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCB0aGUgY2hhbmdlcyBpbiBgdHguY2AgYW5kIGByeC5jYCBhZGQgdGhlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGNoZWNrLCB3aGljaCByZWluZm9yY2VzIHRoZSBTRElPLW9ubHkgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIEFsbCBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gc3BlY2lmaWMgdG8gYFJUV19DSElQX1RZUEVfODcyM0JgIHdpdGggYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNESU8gZHJpdmVyLCBpdCByZWFsbHkgZG9lcyByZXF1aXJlIHRoZSBwaHlzaWNhbCBSZWFsdGVrIFdpLUZpIGNoaXAgYW5kIFNESU8gY2FyZCB0byBmdW5jdGlvbi5cblxuRG9lcyBRRU1VIGhlbHAgaGVyZT8gUUVNVSBoYXMgYHNkaGNpLXBjaWAsIGJ1dCByZWFjaGluZyB0aGUgcHJvYmUgYW5kIGxhdGVyIGxvZ2ljIHJlcXVpcmVzIGEgdmVyeSBzcGVjaWZpYyBSZWFsdGVrIFNESU8gY2FyZCB0byBiZSBlbXVsYXRlZCwgd2hpY2ggaXNuJ3QgdGhlIGNhc2UgZm9yIHRoZSBSVEw4NzIzQlMuIEFyZSB0aGVyZSBhbnkgc29mdHdhcmUgZnJhbWV3b3JrcyBpbiBMaW51eCB0byBpbmplY3QgU0RJTyBkZXZpY2VzPyBVbmxpa2UgVVNCJ3MgYGR1bW15X2hjZGAsIHRoZXJlJ3Mgbm8gYHZoY2lgIGVxdWl2YWxlbnQgZm9yIFNESU8sIHNvIGl0J3MgZ2VuZXJhbGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoIGRvZXNuJ3QgZXhpc3QgZm9yIHRoaXMgZHJpdmVyLlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBzZWFyY2hpbmcgZm9yIGFueSBTRElPIGZ1enppbmcgc3VwcG9ydCwgYnV0IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UgYW5kIGluaXRpYWwgZmluZGluZ3MsIHRoaXMgcGF0Y2ggaXMgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50IGJlY2F1c2Ugb2YgdGhlIHJlcXVpcmVkIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MToxOS4yNDY5OTg3ODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjQ4Mzk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydHdfc2Rpb19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTIzLVxcdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0yOC1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0zMC1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIxY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMmJzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9MTc1OD1zdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6MTc3MTppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzItXFx0XFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE4NDUtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE4NDY6RVhQT1JUX1NZTUJPTChydHdfc2Rpb19wcm9iZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oPTE4Nj1leHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaDoxODg6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODktXFx0XFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjIwLjkxMzQ4Njk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczOTk1ODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0d19zZGlvX3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHJ0d19zZGlvX3Byb2JlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGFjcm9zcyBtdWx0aXBsZSBkcml2ZXJzLiBMZXQncyBzZWUuLi4gYHJ0dzg3MjNjc2AsIGBydHc4NzIzZHNgLCBgcnR3ODgyMWNzYCwgYHJ0dzg4MjJic2AsIGFuZCBgcnR3ODgyMmNzYCBhbGwgbGV2ZXJhZ2UgaXQuIFRoYXQncyBhIGRlY2VudCByYW5nZSBvZiBCcm9hZGNvbS9SZWFsdGVrIFdpLUZpIGNoaXBzLiBJbnRlcmVzdGluZy4gTm93LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYFJUV19DSElQX1RZUEVfODcyM0JgIGNvbnN0YW50IGFuZCBhIGhlbHBlciBmdW5jdGlvbiBgcnR3X2lzXzg3MjNicygpYC4gVGhlIGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuZXcgZHJpdmVyIGZpbGUuIElzIHRoZXJlIGFuIGBydHc4NzIzYnMuY2A/IEdvdHRhIHZlcmlmeSB0aGF0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MjQuNjUzNDQ5MTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI0NjU2MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0dzg3MjNic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MjYuMzE1OTI1Mjk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MjM5NTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgUlRXX0NISVBfVFlQRV84NzIzQmAgaW50byB0aGUgYHJ0d19jaGlwX3R5cGVgIGVudW0uICBOb3RoaW5nIGluaGVyZW50bHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgdGhlbiBkZWZpbmVzIGBydHdfaXNfODcyM2JzKClgLCB3aGljaCB1c2VzIHRoZSBuZXcgZW51bSB2YWx1ZSBhbG9uZ3NpZGUgYSBjaGVjayBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gVGhhdCdzIGltcG9ydGFudDsgaXQncyBzcGVjaWZpYyB0byB0aGUgODcyM0IgY2hpcCBhbmQgYSBwYXJ0aWN1bGFyIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuIEl0J3MgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCB3aG8gdXNlcyB0aGlzIGNoZWNrPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBmaWxlcyBpbiB0aGUgY29kZWJhc2Ugbm93IHJlbHkgb24gYFJUV19DSElQX1RZUEVfODcyM0JgLiBGaW5kaW5nIHdoZXJlIGBydHdfaXNfODcyM2JzKClgIGlzIGludm9rZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgYWRkaXRpb24gcHJvYmFibHkgYWRkcmVzc2VzIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCBvciBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTU5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjMwLjQ2ODMyNDA2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxNzA2OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUV19DSElQX1RZUEVfODcyM0JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MTkxPWVudW0gcnR3X2NoaXBfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTgtXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTIxOTg9c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVxcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9OTMxPXN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjkzNjpcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MzEuOTEwMDM1MTkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MDk2MTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIENvZGU6IFdoZXJlJ3MgVGhhdCBDaGlwIElEPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBoYXZlIGEgcXVpY2sgcXVlc3Rpb246IHdoZXJlIGV4YWN0bHkgaXMgYFJUV19DSElQX1RZUEVfODcyM0JgIGFjdHVhbGx5IGJlaW5nIGFzc2lnbmVkIHRvIGBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZGA/IEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCB0aGF0IG1ha2VzIG1lIGEgbGl0dGxlIHVuZWFzeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaC4gUGVyaGFwcyB0aGlzIGNvbnN0YW50IGlzbid0IGRlZmluZWQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodCBhbmQgaXMgaGlkaW5nIHNvbWV3aGVyZSBlbHNlLCBtYXliZSB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAxMywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjM1LjI5MDk5OTQ2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNTQ3NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUV19DSElQX1RZUEVfODcyM0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MTkxPWVudW0gcnR3X2NoaXBfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTgtXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTIxOTg9c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVxcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9OTMxPXN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjkzNjpcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MzYuMDQyNTU1NTM2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTUxMTIwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYFJUV19DSElQX1RZUEVfODcyM0JgIGlzbid0IGFzc2lnbmVkIGFueXdoZXJlIHdpdGhpbiB0aGUgY29udGV4dCBvZiAqdGhpcyogcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgbGlrZWx5IGRlZmluZWQgYW5kIGFzc2lnbmVkIGVsc2V3aGVyZSwgcGVyaGFwcyBpbiBhbiBlYXJsaWVyIHBhdGNoIGluIHRoZSBzZXJpZXMuIEhvd2V2ZXIsIHNpbmNlIEkgb25seSBoYXZlICp0aGlzKiBwYXRjaCB0byB3b3JrIHdpdGgsIGl0IG1ha2VzIG1lIHRoaW5rIHRoYXQgYHJ0d19pc184NzIzYnMoKWAgd291bGQgYWx3YXlzIHJldHVybiBmYWxzZS4gSSBkaWQgYSBxdWljayBncmVwcGluZyB0byB2ZXJpZnkgaWYgdGhlIGRlZmluaXRpb24gaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGFuZCBub3RoaW5nIGNhbWUgdXAuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGFzc2lnbmVkIGluIGEgcm91bmRhYm91dCB3YXksIGxpa2UgYGlkID09IDBgLCBidXQgaXQncyBhbiBlbnVtLCBzbyB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhhdCAqZG9uJ3QqIGRlcGVuZCBvbiBgcnR3X2lzXzg3MjNicygpYC4gSSBzZWUgaW4gYHR4LmNgIGFuZCBgcnguY2AgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRoZXJlIGFyZSBjb25kaXRpb25hbCBvbiBgcnR3X2lzXzg3MjNicygpYCwgc28gSSBjYW4ndCBsb29rIGF0IHRoZW0gbm93LlxuXG5Ib3dldmVyLCBpbiBgc2Rpby5jYCwgSSBzZWUgYSBzZWN0aW9uIG9mIGNvZGUgdGhhdCAqZG9lc24ndCogZGVwZW5kIG9uIGBydHdfaXNfODcyM2JzKClgLiBUaGVyZSBhcmUgc3Vic3RhbnRpYWwgY2hhbmdlcyBoZXJlOiB0aGUgd29yayBpdGVtIGBydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYSBgd29ya19zdHJ1Y3RgIHRvIGEgYGRlbGF5ZWRfd29ya2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgY29yZSBoYW5kbGluZyBvZiBTRElPIHRyYW5zYWN0aW9ucy4gSXQgYWxzbyBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGFjY291bnQgZm9yIHRoZSB3b3JrIHN0cnVjdCBjaGFuZ2UuIEkgbm90ZSB0aGF0IGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBub3cgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLlxuXG5EaXZpbmcgZGVlcGVyLCB3aXRoaW4gYHJ0d19zZGlvX3R4X2hhbmRsZXJgLCBpdCBsb29rcyBsaWtlIHRoZSBsb29wIGNvbmRpdGlvbiBoYXMgY2hhbmdlZCBhbmQgbm93IGJyZWFrcyBvdXQgb2YgYSBsb29wIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLiBTbywgaW5zdGVhZCBvZiByZXR1cm5pbmcgdm9pZCBhbmQgdGhlbiB0ZXN0aW5nIGEgcXVldWUncyBlbXB0aW5lc3MsIGl0IGNoZWNrcyB0aGUgcmV0dXJuIG9mIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgKmFsbCogU0RJTyBjaGlwcz8gVGhlIGNvZGUgaGl0cyBhbGwgU0RJTyBjaGlwcyBiZWNhdXNlIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgVFggcXVldWUgaXMgcHJvY2Vzc2VkLiBJZiBgcmV0IFx1MDAzZSAwYCwgaXQgYnJlYWtzIHRoZSBpbm5lciBsb29wLiBQcmV2aW91c2x5LCBpdCBkaWRuJ3QgdXNlIGFuIGV4cGxpY2l0IHJldHVybiBjb2RlLlxuXG5UaGlzIGlzIGEga2V5IHBvaW50LCBidXQgaGVyZSdzIHdoZXJlIEkgbmVlZCB0byB0aGluayBjcml0aWNhbGx5OiBjYW4gSSBldmVuICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aD8gU0RJTyBkZXZpY2VzIGFyZW4ndCB1c3VhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSwgc28gaXQgaXMgcHJvYmFibHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQ2FuIEkgaW5qZWN0IFNESU8gaW4gc29mdHdhcmU/IFRoZXJlJ3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0J3MgaXJyZWxldmFudCBoZXJlLiBMZXQncyBzZWUgaWYgdGhlIGBydHc4OGAgZHJpdmVyIHJlZ2lzdGVycyBhbiBTRElPIGRyaXZlci4gWWVzLCBpdCByZWdpc3RlcnMgYHJ0d19zZGlvX3Byb2JlYC4gVG8gcHJvYmUsIHRoZSBrZXJuZWwgbmVlZHMgdG8gZGV0ZWN0IGFuIFNESU8gZGV2aWNlIHdpdGggdGhlIHJpZ2h0IHZlbmRvci9kZXZpY2UgSURzLiBNTUMgc3Vic3lzdGVtcyBlbnVtZXJhdGUgU0RJTyBkZXZpY2VzLiBEb2VzIHN5emthbGxlciBkbyB0aGlzPyBObywgaXQgaGFzIG5vIGB2aGNpYCBmb3IgTU1DL1NESU8uIFRoZXJlIGlzbid0IGFueSBgZHVtbXlfbW1jYCBvciBgcmF3X3NkaW9gIGRyaXZlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIGZvciBhcmJpdHJhcnkgU0RJTyBkZXZpY2UgaW5qZWN0aW9uIGZyb20gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUncyBubyBNTUMvU0RJTyBlbXVsYXRpb24gZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc1NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6NTMuMTkzNjc3NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcwNTk2MjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teV9tbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjU0LjY2NDI4MDI2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAzMzkwNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgTU1DIEhvc3QgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzZGlvYCwgbGlrZWx5IHdpdGhpbiB0aGUgTU1DIGhvc3QgZHJpdmVycy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL21tYy9ob3N0L2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvcmUgU0RJTyBjb250cm9sbGVyIGNvZGUsIGRyaXZlciBpbnRlcmZhY2UsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIE1NQyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW5kIHRoZXJlZm9yZSBhIHZlcnkgbGlrZWx5IHNwb3QgZm9yIGFueXRoaW5nIFNESU8tcmVsYXRlZCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNESU8gcHJvdG9jb2wncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBNTUMgaG9zdCBoYXJkd2FyZSB3b3VsZCByZXNpZGUuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjU3Ljg2NzY3MzM2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2OTk1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZz02NTk9Y29uZmlnIE1NQ19NVlNESU9cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWc6NjY5OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWctNjcwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXFx0Kz0gdGlmbV9zZC5vXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTU1DX01WU0RJTylcXHQrPSBtdnNkaW8ub1xcbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX01NQ19EQVZJTkNJKSAgICAgICArPSBkYXZpbmNpX21tYy5vXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcXHQrPSBtZXNvbi1teC1zZGhjLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RJTylcXHQrPSBtZXNvbi1teC1zZGlvLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19NTUNfTU9YQVJUKVxcdCs9IG1veGFydC1tbWMub1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL2hvc3QuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzEtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg3LSAqIEBzZGNfcmVnOiBWYWx1ZSBvZiBTRENSIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIHVzaW5nIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4OS0gKiBAbXJxOiBtbWNfcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIG9yIHdhaXRpbmcgdG8gYmVcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTQwNS1cXHR1MzJcXHRcXHRcXHRzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6NDA2OlxcdHUzMlxcdFxcdFxcdHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0xNTQ1PXN0YXRpYyBpbnQgYXRtY2lfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTU4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU1OTpzdGF0aWMgdm9pZCBhdG1jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2NC1cXHRpZiAoZW5hYmxlKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NTpcXHRcXHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTY2LVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1Njc6XFx0XFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cXHUwMDNlc2Rpb19pcnEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2OC19XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTE1NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXRtY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVxcdC5nZXRfY2RcXHRcXHQ9IGF0bWNpX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NzU6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGF0bWNpX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjAxMT1zdGF0aWMgdm9pZCBhdG1jaV93cml0ZV9kYXRhX3BpbyhzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDc4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA3OTpzdGF0aWMgdm9pZCBhdG1jaV9zZGlvX2ludGVycnVwdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCB1MzIgc3RhdHVzKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwODQtXFx0XFx0c3RydWN0IGF0bWVsX21jaV9zbG90ICpzbG90ID0gaG9zdC1cXHUwMDNlc2xvdFtpXTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XFx0XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYgKHN0YXR1cyBcXHUwMDI2IHNsb3QtXFx1MDAzZXNkaW9faXJxKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA4NjpcXHRcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKHNsb3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjA5Mj1zdGF0aWMgaXJxcmV0dXJuX3QgYXRtY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cXHRcXHRpZiAocGVuZGluZyBcXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMTQ6XFx0XFx0XFx0YXRtY2lfc2Rpb19pbnRlcnJ1cHQoaG9zdCwgc3RhdHVzKTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMTUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIyMzY9c3RhdGljIGludCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzctXFx0XFx0c3RydWN0IG1jaV9zbG90X3BkYXRhICpzbG90X2RhdGEsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMzg6XFx0XFx0dTMyIHNkY19yZWcsIHUzMiBzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzkte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU0LVxcdHNsb3QtXFx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjI1NTpcXHRzbG90LVxcdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI1Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cXHRtbWMtXFx1MDAzZW9jcl9hdmFpbFxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjY4OlxcdGlmIChzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXFx0XFx0bW1jLVxcdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz03Nzg9c3RhdGljIGlycXJldHVybl90IGF1MXhtbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc4OC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgU0RfU1RBVFVTX1NJKVxcdC8qIFNESU8gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYzo3ODk6XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkwNj1zdGF0aWMgdm9pZCBhdTF4bW1jX2RiZG1hX3NodXRkb3duKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MTQtXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTE1OnN0YXRpYyB2b2lkIGF1MXhtbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW4pXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkyOS1cXHQuZ2V0X2NkXFx0XFx0PSBhdTF4bW1jX2NhcmRfaW5zZXJ0ZWQsXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTMwOlxcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MzEtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzo5OiAqIFRoZSBzZGhjaSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggc2RjYXJkIGFuZCBzZGlvLiAgVGhlIHNkaG9zdFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEwLSAqIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlIHNkY2FyZCBvbmx5LCBidXQgaGFzIGJldHRlciBwZXJmb3JtYW5jZS5cXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEyLSAqIHRoZSBzZGhvc3QgY29udHJvbGxlciBhbGxvd3MgdG8gdXNlIHRoZSBzZGhjaSBjb250cm9sbGVyIGZvciB3aWZpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzMtXFx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxNzQ6XFx0aW50IG1tY19pcnEsIHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXFx0dW5zaWduZWQgY2hhciBidXNfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXFx0Ym9vbCBkb19kbWE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE4ODpcXHRib29sIHNkaW9faW50O1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODktXFx0Ym9vbCBhY3RpdmVfcmVxdWVzdDtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz03NTY9bW1jX2RhdmluY2lfeGZlcl9kb25lKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVxcdFxcdCAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XFx0XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faW50IFxcdTAwMjZcXHUwMDI2ICEocmVhZGwoaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT1NUMCkgXFx1MDAyNlxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjctXFx0XFx0XFx0XFx0XFx0U0RJT1NUMF9EQVQxX0hJKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjgtXFx0XFx0XFx0d3JpdGVsKFNESU9JU1RfSU9JTlQsIGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JU1QpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3Njk6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NzAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTgzMz1kYXZpbmNpX2Fib3J0X2RhdGEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDAtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg0MTpzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfc2Rpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1MC1cXHRcXHR3cml0ZWwoc3RhdHVzIHwgU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg1MTpcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI0LVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cXHRcXHRcXHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzI6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XFx0XFx0XFx0aG9zdC1cXHUwMDNlc2Rpb19pbnQgPSB0cnVlO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM1LVxcdFxcdFxcdHdyaXRlbChyZWFkbChob3N0LVxcdTAwM2ViYXNlICsgREFWSU5DSV9TRElPSUVOKSB8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzOC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5OlxcdFxcdGhvc3QtXFx1MDAzZXNkaW9faW50ID0gZmFsc2U7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEwNDAtXFx0XFx0d3JpdGVsKHJlYWRsKGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JRU4pIFxcdTAwMjYgflNESU9JRU5fSU9JTlRFTixcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDQ5LVxcdC5nZXRfcm9cXHRcXHQ9IG1tY19kYXZpbmNpX2dldF9ybyxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcXHQuZW5hYmxlX3NkaW9faXJxID0gbW1jX2RhdmluY2lfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDUxLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTE4ND1zdGF0aWMgaW50IGRhdmluY2lfbW1jc2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVxcdGhvc3QtXFx1MDAzZW1tY19pcnEgPSBpcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEzMDEtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faXJxIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTMwMzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGhvc3QtXFx1MDAzZXNkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzA0OlxcdFxcdFxcdFxcdCAgICAgICBtbWNfZGF2aW5jaV9zZGlvX2lycSwgMCxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cXHRcXHRcXHRcXHQgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDMtXFx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYzo1MDQ6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSA4O1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkaW8uaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTE0ODA9c3RhdGljIHZvaWQgZHdfbWNpX2h3X3Jlc2V0KHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTUxMzpzdGF0aWMgdm9pZCBkd19tY2lfcHJlcGFyZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBib29sIHByZXBhcmUpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTE0LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU0MC1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NDE6c3RhdGljIHZvaWQgX19kd19tY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1MC1cXHRpZiAoZW5iKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MTpcXHRcXHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTUyLVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTM6XFx0XFx0aW50X21hc2sgXFx1MDAyNj0gflNETU1DX0lOVF9TRElPKGhvc3QtXFx1MDAzZXNkaW9faXJxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXFx0bWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLCBpbnRfbWFzayk7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTU5OnN0YXRpYyB2b2lkIGR3X21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2Mi1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjM6XFx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjQ6XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIGVuYik7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTcyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTc3OlxcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGR3X21jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2NzctXFx0LmNhcmRfaHdfcmVzZXQgICAgICAgICAgPSBkd19tY2lfaHdfcmVzZXQsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4OlxcdC5lbmFibGVfc2Rpb19pcnFcXHQ9IGR3X21jaV9lbmFibGVfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5OlxcdC5hY2tfc2Rpb19pcnFcXHRcXHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNjgwLVxcdC5leGVjdXRlX3R1bmluZ1xcdFxcdD0gZHdfbWNpX2V4ZWN1dGVfdHVuaW5nLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc1Ny1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XFx0XFx0aWYgKHBlbmRpbmcgXFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpIHtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTktXFx0XFx0XFx0bWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLFxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcXHRcXHRcXHRcXHQgICBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcXHRcXHRcXHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNzYyOlxcdFxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTI3OTQ9c3RhdGljIGludCBkd19tY2lfaW5pdF9ob3N0X2NhcHMoc3RydWN0IGR3X21jaSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI4MjY6XFx0LyogUHJvY2VzcyBTRElPIElSUXMgdGhyb3VnaCB0aGUgc2Rpb19pcnFfd29yay4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXFx0aWYgKG1tYy1cXHUwMDNlY2FwcyBcXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTM0NDM9aW50IGR3X21jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTM0OTQtXFx0LyogUmUtZW5hYmxlIFNESU8gaW50ZXJydXB0cy4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XFx0aWYgKHNkaW9faXJxX2NsYWltZWQoaG9zdC1cXHUwMDNlbW1jKSlcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XFx0XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9NTI9c3RydWN0IGR3X21jaV9kbWFfc2xhdmUge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0xMjEtICogQGlycTogVGhlIGlycSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoxMjI6ICogQHNkaW9faXJxOiBTRElPIGludGVycnVwdCBiaXQgaW4gaW50ZXJydXB0IHJlZ2lzdGVycy5cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9MTYxPXN0cnVjdCBkd19tY2kge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzMtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoyMzQ6XFx0aW50XFx0XFx0XFx0c2Rpb19pcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NTktXFx0XFx0ano0NzQwX21tY193cml0ZV9pcnFfcmVnKGhvc3QsIEpaX01NQ19JUlFfU0RJTyk7XFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6ODYwOlxcdFxcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cXHUwMDNlbW1jKTtcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXFx0XFx0aXJxX3JlZyBcXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM9OTQwPXN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTk5NC1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzo5OTU6c3RhdGljIHZvaWQgano0NzQwX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTEwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgano0NzQwX21tY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI0LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzoxMDI1OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI2LVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBqejQ3NDBfdm9sdGFnZV9zd2l0Y2gsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTQxMz1zdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MjgtXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6NDI5OlxcdFxcdHNkaW9fc2lnbmFsX2lycShtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQzMC1cXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU4OC1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTkwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTY6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk3LXtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XFx0bG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTktfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGxvb25nc29uMl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MDY6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGxvb25nc29uMl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcXHQuYWNrX3NkaW9faXJxXFx0PSBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTYxNz1zdGF0aWMgaW50IGxvb25nc29uMl9yZW9yZGVyX2NtZF9saXN0W10gPSB7IFNEX0FQUF9TRU5EX1NDUiwgU0RfQVBQX1NFTkRfTlVNX1dSX0JMS1MsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MjItICogcmVzcG9uc2UgZGF0YXMgaGFzIGRpZmZlcmVudCBieXRlIG9yZGVyIHdpdGggdXN1YWwgZGF0YSBwYWNrZXRzLlxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYyMzogKiBIb3dldmVyIHNkaW8gY29udHJvbGxlciB3aWxsIHNlbmQgdGhlc2UgZGF0YXMgaW4gdXN1YWwgZGF0YSBmb3JtYXQsXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9OTQwPXN0YXRpYyBpbnQgbG9vbmdzb24yX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTczLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjk3NDpcXHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTk3NS1cXHRpZiAobW1jLVxcdTAwM2VjYXBzIFxcdTAwMjYgTU1DX0NBUF9TRElPX0lSUSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtNTMtI2RlZmluZSAgIENMS19BTFdBWVNfT04oaClcXHRcXHQoaC1cXHUwMDNlZGF0YS1cXHUwMDNlYWx3YXlzX29uKVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVxcdFxcdChoLVxcdTAwM2VkYXRhLVxcdTAwM2VpcnFfc2Rpb19zbGVlcClcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTU1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzY9c3RydWN0IG1lc29uX21tY19kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVxcdHVuc2lnbmVkIGludCBhZGp1c3Q7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxNDE6XFx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQyLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIwLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTk1Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU3OlxcdFxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMsIDApO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU4OlxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEwOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTEte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTE2OlxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIGVuYWJsZSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjEte1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEyMjpcXHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTMzLVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTM0OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcXHQuYWNrX3NkaW9faXJxXFx0PSBtZXNvbl9tbWNfYWNrX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fbW1jX2RhdGEgbWVzb25fZ3hfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxMy1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMTQ6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjJfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzE1LX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZXNvbl9tbWNfZGF0YSBtZXNvbl9heGdfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMjI6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzIzLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM9MTMyPXN0YXRpYyB2b2lkIG1lc29uX214X3NkaGNfc3RhcnRfY21kKHN0cnVjdCBtbWNfaG9zdCAqbW1jLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cXHRcXHQgKiBkb3dubG9hZCBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGZvciBhIEJDTTQzMzYyLzEgY2FyZC5cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlxcdFxcdCAqIFdpdGhvdXQgdGhpcyBzZGlvX21lbWNweV90b2lvKCkgKHdpdGggYSBzaXplIG9mIDIxOTU1N1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXFx0XFx0ICogYnl0ZXMpIHRpbWVzIG91dCBpZiBNRVNPTl9TREhDX01JU0NfTUFOVUFMX1NUT1AgaXMgbm90IHNldC5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTItLypcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzozOiAqIG1lc29uLW14LXNkaW8uYyAtIE1lc29uNiwgTWVzb244IGFuZCBNZXNvbjhiIFNESU8vTU1DIEhvc3QgQ29udHJvbGxlclxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvbW1jLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMC17XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NjMxOlxcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02MzItXFx0XFx0LnJlZ19iaXRzID0gOCxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTY2OC1cXHRob3N0LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYmFzZSxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo2Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVzb25fbXhfc2Rpb19yZWdtYXBfY29uZmlnKTtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NzAtXFx0aWYgKElTX0VSUihob3N0LVxcdTAwM2VyZWdtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzQ5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjgtc2Rpb1xcXCIsIH0sXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzUwOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjhiLXNkaW9cXFwiLCB9LFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNzU4LVxcdC5kcml2ZXIgID0ge1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1OTpcXHRcXHQubmFtZSA9IFxcXCJtZXNvbi1teC1zZGlvXFxcIixcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXFx0XFx0LnByb2JlX3R5cGUgPSBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VTLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzMtICpcXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYzozNDogKiAtIEZvciBub3csIHdlIHdvbid0IHRyeSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHJlYWwgbW1jL3NkL3NkaW9cXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zNS0gKiAgIGNvbnRyb2xsZXIsIGFsdGhvdWdoIHNvbWUgb2YgdGhlbSBkbyBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgZm9yXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMTE9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91MzAwID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcXHQuc3Rfc2Rpb1xcdFxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjQtXFx0LnB3cnJlZ19wb3dlcnVwXFx0XFx0PSBNQ0lfUFdSX09OLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfbm9tYWRpayA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cXHQuZGF0YWN0cmxfYmxvY2tzelxcdD0gMTEsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTQ5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3Ni1cXHQuZG1hX3Bvd2VyX29mXzJcXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjExLVxcdC5kbWFfcG93ZXJfb2ZfMlxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yMTQtXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjQ0LVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDU6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI0NjpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI1Nj1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjcyLVxcdC5kYXRhY3RybF9hbnlfYmxvY2tzelxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzM6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NC1cXHQuc3RtMzJfaWRtYWJzaXplX21hc2tcXHQ9IEdFTk1BU0soMTIsIDUpLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NS1cXHQuc3RtMzJfaWRtYWJzaXplX2FsaWduXFx0PSBCSVQoNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6Mjc2OlxcdC5zdXBwb3J0c19zZGlvX2lycVxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzctXFx0LmJ1c3lfdGltZW91dFxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDAtXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMwMTpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAyLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAzLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg1KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDQ6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwNS1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTMxMz1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNiksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTQyNT1zdGF0aWMgdm9pZCBtbWNpX3dyaXRlX2RhdGFjdHJscmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHUzMiBkYXRhY3RybClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTQyOC1cXHRkYXRhY3RybCB8PSBob3N0LVxcdTAwM2VkYXRhY3RybF9yZWcgXFx1MDAyNiAoaG9zdC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjQyOTpcXHRcXHRcXHRcXHRcXHQgIGhvc3QtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWRhdGFjdHJsX21hc2tfc2Rpbyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTIzNj1zdGF0aWMgdm9pZCBtbWNpX3N0YXJ0X2RhdGEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2MS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjYyOlxcdGlmIChob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQgXFx1MDAyNlxcdTAwMjYgbW1jX2NhcmRfc2Rpbyhob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQpKSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2My1cXHRcXHR1MzIgY2xrO1xcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNjQtXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2NTpcXHRcXHRkYXRhY3RybCB8PSB2YXJpYW50LVxcdTAwM2VkYXRhY3RybF9tYXNrX3NkaW87XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNzItXFx0XFx0ICovXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI3MzpcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNlc3Rfc2RpbyBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cXHRcXHQgICAgKGhvc3QtXFx1MDAzZXNpemUgXFx1MDAzYyA4IHx8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc2OC1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc3MC17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6NTcuOTIzMzc4MDQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTMyNTg4NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXMgU0RJTyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUncyBubyB3YXkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gVGhlcmUncyBubyBidWlsdC1pbiBgZHVtbXlfbW1jYCBvciBgdmhjaWAgZXF1aXZhbGVudCBmb3IgU0RJTywgd2hpY2ggd291bGQgYWxsb3cgbWUgdG8gaW5qZWN0IGEgdmlydHVhbCBTRElPIGRldmljZS5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYGRyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jYCwgYnV0IGl0IGV4cGxpY2l0bHkgc2F5cyBpdCAqZG9lc24ndCogaW50ZXJhY3Qgd2l0aCByZWFsIE1NQy9TRC9TRElPIGNvbnRyb2xsZXJzLiBRRU1VIGRvZXMgaGF2ZSBgc2RoY2ktcGNpYCB0byBlbXVsYXRlIGFuIFNEIGhvc3QgY29udHJvbGxlciwgYnV0IHRoYXQncyBmb3IgU0QgY2FyZHMsIG5vdCBTRElPLiBEYW1uLiBJIGV2ZW4gd29uZGVyZWQgaWYgYSB1c2VyLXNwYWNlIHByb2dyYW0gY291bGQgYWN0IGFzIGFuIFNESU8gZGV2aWNlIHNvbWVob3csIGJ1dCBubywgdGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IG9mZmVyIGFueSBpbnRlcmZhY2UgZm9yIHRoYXQuXG5cblNvLCB0aGUgYHJ0dzg4YCBTRElPIGRyaXZlciBjYW4ndCBiZSBwcm9iZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgaXQgdW5yZWFjaGFibGUgY29kZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCwgYnV0IG5ldmVyIHByb2JlZCwgZG9lcyB0aGF0IGNvZGUgbWF0dGVyIGZvciBmdXp6aW5nIHB1cnBvc2VzPyBUaGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgdW5yZWFjaGFibGUgY29kZSBsaWtlIHRoaXMuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBgbWFjODAyMTFfaHdzaW1gICptaWdodCogcHJvdmlkZSBhIHBhdGggdG8gdGhpcyBjb2RlLCBidXQgdGhhdCdzIGEgZGVhZCBlbmQuIEl0J3MgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIHNvZnR3YXJlLWVtdWxhdGVkIFdpLUZpIGRyaXZlciBhbmQgZG9lc24ndCB1c2UgdGhlIGBydHc4OGAgZHJpdmVyIG9yIGFueSBvZiB0aGUgUmVhbHRlayBkcml2ZXIgY29kZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGB0eC5jYCwgYnV0IHRoZSBhZGRlZCBjb2RlIGlzIGd1YXJkZWQgYnkgYSBjb25kaXRpb24gdGhhdCByZXF1aXJlcyB0aGUgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFuZCBhbiBTRElPIGludGVyZmFjZS4gSSBsb29rZWQgYXQgdGhlIGNvbmRpdGlvbjpcbmBgYGNcblx0aWYgKChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEIFx1MDAyNlx1MDAyNlxuXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuXHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuYGBgXG5UaGUgVVNCIHBhdGggd2FzIGFscmVhZHkgdGhlcmU7IHRoZSBwYXRjaCBqdXN0IGFkZHMgYHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIFRoZSBuZXcgY29uZGl0aW9uIGlzIG9ubHkgdGFrZW4gZm9yIHRoZSBSVEw4NzIzQlMgY2hpcCAodGhhdCB0cmlnZ2VycyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCkgd2hpY2ggKnJlcXVpcmVzKiB0aGUgU0RJTyBpbnRlcmZhY2UuIEFueSBjaGFuZ2VzIGluIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCBhcmUgKm9ubHkqIGNvbXBpbGVkIGFuZCB1c2VkIGlmIHRoZSBTRElPIGludGVyZmFjZSBpcyBhY3RpdmUuXG5cblNvLCBldmVuIGlmIGBDT05GSUdfUlRXODhfU0RJT2AgaXMgc2V0LCBgc2Rpby5jYCB3aWxsIHN0aWxsIGJlIGNvbXBpbGVkLCBidXQgdGhlIGNvZGUgd2lsbCAqb25seSogYmUgZXhlY3V0ZWQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLlxuXG5UaGUgYm90dG9tIGxpbmU6IGdpdmVuIHRoYXQgd2UgY2FuJ3QgZW11bGF0ZSBTRElPIGRldmljZXMgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cbkknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3Qgc29tZSBjbGV2ZXIgc29mdHdhcmUgaW5qZWN0aW9uIG1lY2hhbmlzbSBmb3IgU0RJTyBoaWRpbmcgaW4gYGRyaXZlcnMvbW1jL2NvcmUvYCwgYnV0IEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc4NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MjowOC4wNTU5NzA1NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQxNTA1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb19yZWdpc3Rlcl9kcml2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYz0xNzQ1PXN0YXRpYyBpbnQgX19pbml0IGJ0bXJ2bF9zZGlvX2luaXRfbW9kdWxlKHZvaWQpXFxuZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYy0xNzQ2LXtcXG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jOjE3NDc6XFx0aWYgKHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZidF9tcnZsX3NkaW8pICE9IDApIHtcXG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jLTE3NDgtXFx0XFx0QlRfRVJSKFxcXCJTRElPIERyaXZlciBSZWdpc3RyYXRpb24gRmFpbGVkXFxcIik7XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9Mjc0PXN0YXRpYyB2b2lkIHNkaW9fbGVnYWN5X3NodXRkb3duKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjgyLS8qKlxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzoyODM6ICpcXHRfX3NkaW9fcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBmdW5jdGlvbiBkcml2ZXJcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg0LSAqXFx0QGRydjogU0RJTyBmdW5jdGlvbiBkcml2ZXJcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0yODYtICovXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjI4NzppbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4OC17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAxLX1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6MzAyOkVYUE9SVF9TWU1CT0xfR1BMKF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zMDMtXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTExMTU9c3RhdGljIGludCBfX2luaXQgc2Rpb191YXJ0X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0MC1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jOjExNDE6XFx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnNkaW9fdWFydF9kcml2ZXIpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYz0xOTU9aW50IGI0M19zZGlvX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvc2Rpby5jLTE5Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYzoxOTc6XFx0cmV0dXJuIHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZiNDNfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9zZGlvLmMtMTk4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz0xMjcxPWludCBicmNtZl9zZGlvX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEyNzIte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMjczOlxcdHJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2YnJjbWZfc2RtbWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTI3NC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYz0xMzkwPXN0YXRpYyBpbnQgX19pbml0IGlmX3NkaW9faW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6MTM5NzpcXHRyZXQgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWZfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYz00OTM9c3RhdGljIGludCBfX2luaXQgd2Z4X2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtNTAyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTUMpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6NTAzOlxcdFxcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ3Znhfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTUwNC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmM9Mzg4PXN0YXRpYyBpbnQgX19pbml0IGN3MTIwMF9zZGlvX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9jdzEyMDBfc2Rpby5jLTQwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvY3cxMjAwX3NkaW8uYzo0MDE6XFx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnNkaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvY3cxMjAwX3NkaW8uYy00MDItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jPTQ1MT1zdGF0aWMgaW50IF9faW5pdCBydHdfZHJ2X2VudHJ5KHZvaWQpXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDUyLXtcXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL29zX2RlcC9zZGlvX2ludGYuYzo0NTM6XFx0cmV0dXJuIHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZydGw4NzIzYnNfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jLTQ1NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaD03NT1zdHJ1Y3Qgc2Rpb19kcml2ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgtMTEwLS8qIHVzZSBhIG1hY3JvIHRvIGF2b2lkIGluY2x1ZGUgY2hhaW5pbmcgdG8gZ2V0IFRISVNfTU9EVUxFICovXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTExOiNkZWZpbmUgc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2KSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEyOlxcdF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSlcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaDoxMTM6ZXh0ZXJuIGludCBfX3NkaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqLCBzdHJ1Y3QgbW9kdWxlICopO1xcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExNC1leHRlcm4gdm9pZCBzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTEyNC0jZGVmaW5lIG1vZHVsZV9zZGlvX2RyaXZlcihfX3NkaW9fZHJpdmVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTI1OlxcdG1vZHVsZV9kcml2ZXIoX19zZGlvX2RyaXZlciwgc2Rpb19yZWdpc3Rlcl9kcml2ZXIsIFxcXFxcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjYtXFx0XFx0ICAgICAgc2Rpb191bnJlZ2lzdGVyX2RyaXZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTI6MDkuNTQwMTI2MzM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTgzNTk3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJ3Mgbm8gYGR1bW15X3NkaW9gIG9yIGFueXRoaW5nIGNvbXBhcmFibGUgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRvIGFsbG93IGZvciBTRElPIGVtdWxhdGlvbi4gVGhlIGBydHc4OGAgZHJpdmVyIHVzZXMgYG1vZHVsZV9zZGlvX2RyaXZlcmAgb3IgYHNkaW9fcmVnaXN0ZXJfZHJpdmVyYCB0byByZWdpc3RlciBpdHMgU0RJTyBkcml2ZXJzLiBUaGlzIG1lYW5zIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlIHRoZSBTRElPLXNwZWNpZmljIGNvZGUsIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGhpdCB1bmxlc3MgdGhlcmUncyBhbiBhY3R1YWwgU0RJTyBjb250cm9sbGVyIGFuZCBjYXJkIHByZXNlbnQuIFNvLCBhbnkgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSB0aWVkIHRvIFNESU8gYXJlIHVucmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlJ3MgYSBtb2RpZmljYXRpb24gaW4gYHNkaW8uY2A6ICB0aGUgY2hhbmdlIHRvIHVzZSBgbW9kX2RlbGF5ZWRfd29ya2AgaW5zdGVhZCBvZiBgcXVldWVfd29ya2Agd2hpY2ggYWZmZWN0cyB0aGUgcmV0cnkgbWVjaGFuaXNtIGZvciBTRElPIGNoaXBzLiBJdCBtb2RpZmllcyB0aGUgYmVoYXZpb3IgZm9yICphbGwqIFNESU8gY2hpcHMgc3VwcG9ydGVkIGJ5IGBydHc4OGAuIEJ1dCBhZ2FpbiwgdGhhdCdzIFNESU8tc3BlY2lmaWMuIFRoaXMgY2hhbmdlIGlzIHN0aWxsIHVuLWZ1enphYmxlLlxuXG5UaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGByeC5jYDpcbmBgYGNcbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xuYGBgXG5hbmQgYHR4LmNgOlxuYGBgY1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbmBgYFxuVGhlc2UgYWZmZWN0IGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyB3aGljaCBhcmUgY2FsbGVkIGZvciBhbGwgaW50ZXJmYWNlcyAoUENJZSwgVVNCLCBhbmQgU0RJTykuIEJ1dCwgSSAqY2FuKiByZWFjaCBgcnR3ODhgIHZpYSBQQ0llIG9yIFVTQi4gRm9yIGluc3RhbmNlLCBgcnR3ODgyMmJlYCBpcyBhIFBDSWUgZHJpdmVyOyBgcnR3ODgyMmJ1YCBpcyBVU0IuIFVzaW5nIGBkdW1teV9oY2RgIG9yIGByYXdfZ2FkZ2V0YCwgSSAqY2FuKiBlbXVsYXRlIGEgVVNCIGRldmljZSBtYXRjaGluZyB0aGUgYHJ0dzg4YCBVU0IgSURzIGFuZCB0aGVyZWZvcmUgdHJpZ2dlciBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYC5cblxuSG93ZXZlciwgdGhlIGtleSBoZXJlIGlzIHRoZSBgcnR3X2lzXzg3MjNicygpYCBjaGVjay4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIFRoZSBjaGFuZ2UgaW4gYHJ4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBub24tODcyM2JzIGNoaXBzLCBpcyBlc3NlbnRpYWxseSByZW9yZGVyaW5nIG9mIGFuIGFscmVhZHkgcHJlc2VudCBjb25kaXRpb24sIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzaW1wbHkgYWRkcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggd2lsbCAqYWx3YXlzKiBiZSBmYWxzZSBmb3IgVVNCL1BDSWUgZGV2aWNlcy4gSW4gYHR4LmNgIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMuIEFnYWluLCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyBhZGRlZCwgYW5kIGl0IGlzIHN0aWxsIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gVGhlIGNoYW5nZSBpcyBub24tZnVuY3Rpb25hbC5cblxuVGhlcmVmb3JlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogY2hhbmdlcyBhcmUgZm9yIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGFuZCB0aGUgU0RJTy1zcGVjaWZpYyBtb2RpZmljYXRpb25zIGluIGBzZGlvLmNgLiBUaGUgU0RJTyBjaGFuZ2VzIGFyZSBpbmFjY2Vzc2libGUsIGFuZCB0aGUgYHJ0d19pc184NzIzYnMoKWAgaXMgZ3VhcmRlZCBieSB0aGUgYFJUV19IQ0lfVFlQRV9TRElPYCB3aGljaCBjYW4gbmV2ZXIgYmUgc2V0IGJ5IFVTQi9QQ0llIGluIHRoaXMgZHJpdmVyLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjazogZXZlbiBpZiBJIGVtdWxhdGUgYSBVU0IgZGV2aWNlIGFuZCBzb21laG93IHNldCBpdHMgY2hpcCBJRCB0byBgUlRXX0NISVBfVFlQRV84NzIzQmAsIGBydHdfaXNfODcyM2JzKClgIHdpbGwgc3RpbGwgcmV0dXJuIGZhbHNlIGJlY2F1c2UgaXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU9gLiBPa2F5LCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5UaGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggcGVyZmVjdGx5IGZpdHMgdGhlIGNyaXRlcmlhOiBpdCBpbnRyb2R1Y2VzIGNvZGUgcGF0aHMgdGhhdCBjYW5ub3QgYmUgYWNjZXNzZWQgZHVlIHRvIHRoZSBsYWNrIG9mIFNESU8gZW11bGF0aW9uLCBhbmQgdGhlIHNoYXJlZCBjb2RlIGhhcyBjaGVja3MgaW4gcGxhY2UgdGhhdCBwcmV2ZW50IHRoZW0gZnJvbSBhZmZlY3Rpbmcgbm9uLVNESU8gcGF0aHMuXG5cbkknbSBjb25maWRlbnQuICoqV29ydGhGdXp6aW5nPWZhbHNlKiouXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXBcblxuIiwiSW5wdXRUb2tlbnMiOjM2OTE4LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTI6MjcuNzIzNzI2Nzk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgV2ktRmkgY2hpcCwgd2hpY2ggb3BlcmF0ZXMgb3ZlciB0aGUgU0RJTyBidXMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBTRElPLXNwZWNpZmljIGRyaXZlciBmaWxlIChzZGlvLmMpIG9yIGd1YXJkZWQgYnkgdGhlIHJ0d19pc184NzIzYnMoKSBoZWxwZXIsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBSVFdfSENJX1RZUEVfU0RJTy4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3Qgc3VwcG9ydCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYXJiaXRyYXJ5IFNESU8gZGV2aWNlcyAodW5saWtlIFVTQiB2aWEgZHVtbXlfaGNkL3Jhd19nYWRnZXQpLCB0aGUgU0RJTyBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4gVGhlIG1pbm9yIGNoYW5nZXMgdG8gc2hhcmVkIFJYL1RYIHBhdGhzIGZvciBvdGhlciBjaGlwcyBhcmUgcHVyZWx5IG5vbi1mdW5jdGlvbmFsIGNvbmRpdGlvbiByZW9yZGVyaW5ncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUyOjI3LjcyMzc1MTc1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlfv2j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-20 09:11:48 +0000 UTC FinishedAt: 2026-08-20 09:52:28 +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+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbmluZGV4IGM2ZTk4MWJhNzk4NjguLjhmODZmN2MxMmRlNWEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcbkBAIC0xOTQsNiAmIzQzOzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XG4gXHRSVFdfQ0hJUF9UWVBFXzg3MjNELFxuIFx0UlRXX0NISVBfVFlQRV84ODIxQyxcbiBcdFJUV19DSElQX1RZUEVfODcwM0IsXG4mIzQzO1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgJiM0MzsyMTk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBydHdfY2hpcF9oYXNfdHhfc3RiYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXR4X3N0YmM7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG5pbmRleCAwMWZkMjk5YWJiN2ZlLi5mZGUyMWM4NDBhYzAyIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbkBAIC0yNTMsMTAgJiM0MzsyNTMsMTIgQEAgc3RhdGljIHZvaWQgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXG4gXHRydHdfcnhfYWRkcl9tYXRjaChydHdkZXYsIHBrdF9zdGF0LCBoZHIpO1xuIFxuLVx0LyogUnRsODcyM2NzIGRyaXZlciBjaGVja3MgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTIgYW5kXG4tXHQgKiBzaW1wbHkgZHJvcHMgdGhlIHBhY2tldC5cbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgXHUwMDNjIDE0IG9yIHNpemUgXHUwMDNlIDgxOTJcbiYjNDM7XHQgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC5cbiBcdCAqL1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgXHUwMDI2XHUwMDI2IHBrdF9zdGF0LVx1MDAzZXBrdF9sZW4gPT0gMCkge1xuJiM0MztcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkpIHtcbiBcdFx0cnhfc3RhdHVzLVx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xuIFx0XHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXCYjMzQ7emVybyBsZW5ndGggcGFja2V0XCYjMzQ7KTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiAmIzQzOzIwLDE3IEBAXG4gI2luY2x1ZGUgXCYjMzQ7dHguaFwmIzM0O1xuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fT1FUX1RJTUVPVVRfTVNcdFx0XHRcdDEwMDBcbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlXG4mIzQzOyAqIHRoZSBwZXItQUMgc29mdHdhcmUgRklGTyBmaWxscyBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgYW5kIHdha2UgaXQgZnJvbSB0aGVcbiYjNDM7ICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuJiM0MzsgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVJcdFx0XHQ4XG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fVFhfUkVUUllfREVMQVlcdFx0XHRtc2Vjc190b19qaWZmaWVzKDEpXG4gXG4gc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpXG4ge1xuQEAgLTU0OCwxMiAmIzQzOzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cbiYjNDM7ICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbiYjNDM7ICogZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGF0b21pY190OyB3aGVuZXZlciB0aGV5IGNsYWltIHRoZXJlIGlzXG4mIzQzOyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXG4mIzQzOyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XG4mIzQzO1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuJiM0MztcdFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19OT1JNQUwpKTtcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csXG4mIzQzO1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuJiM0MztcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YixcbiYjNDM7XHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcbiYjNDM7ICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZFxuJiM0MzsgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWZyZWVfdHhwZylcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xuJiM0MzsgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxuJiM0MzsgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kXG4mIzQzOyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuJiM0MztcdHUxNiBhY3FfcGdfbnVtID0gcnR3ZGV2LVx1MDAzZWZpZm8uYWNxX3BnX251bTtcbiYjNDM7XHR1MTYgcmVzZXJ2ZWRfbnVtO1xuJiM0MztcbiYjNDM7XHRyZXNlcnZlZF9udW0gPSBwZ190YmwtXHUwMDNlaHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VscV9udW0gJiM0MzsgcGdfdGJsLVx1MDAzZW5xX251bSAmIzQzO1xuJiM0MztcdFx0ICAgICAgIHBnX3RibC1cdTAwM2VleHFfbnVtICYjNDM7IHBnX3RibC1cdTAwM2VnYXBxX251bTtcbiYjNDM7XHRpZiAoYWNxX3BnX251bSBcdTAwM2M9IHJlc2VydmVkX251bSkge1xuJiM0MztcdFx0cnR3X2VycihydHdkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O25vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQqcHVicV9udW0gPSBhY3FfcGdfbnVtIC0gcmVzZXJ2ZWRfbnVtO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MTYgcHVicV9udW07XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LyogU2VlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIHdoZW4gdGhlIGNoaXAgaGFzIG5vdGhpbmcgdG8gcmVwb3J0IHlldC4gKi9cbiYjNDM7XHRpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcdTAwMjZwdWJxX251bSk7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRcdHBnX3RibCA9IFx1MDAyNnJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXHUwMDNlaHFfbnVtKTtcbiYjNDM7XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4mIzQzO1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19sb3csIHBnX3RibC1cdTAwM2VscV9udW0pO1xuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsXG4mIzQzO1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogU3VtIG9mIHRoZSBxdWV1ZSYjMzk7cyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XG4mIzQzOyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxuJiM0MzsgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuJiM0MzsgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBhdG9taWNfdCAqZGVkaWNhdGVkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdGludCBmcmVlO1xuJiM0MztcbiYjNDM7XHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSAmIzQzOyBhdG9taWNfcmVhZChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKHF1ZXVlKSB7XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVkk6XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9CSzpcbiYjNDM7XHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcbiYjNDM7XHRjYXNlIFJUV19UWF9RVUVVRV9IMkM6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuJiM0MztcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XG4mIzQzO1x0Y2FzZSBSVFdfVFhfUVVFVUVfVk86XG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcbiBcdFx0XHRcdCAgICBzaXplX3QgY291bnQpXG4ge1xuIFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcbiBcbi1cdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbiYjNDM7XHRcdGF0b21pY190ICpkZWRpY2F0ZWQ7XG4mIzQzO1xuJiM0MztcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbiYjNDM7XHRcdGlmICghZGVkaWNhdGVkKSB7XG4mIzQzO1x0XHRcdHJ0d193YXJuKHJ0d2RldiwgXCYjMzQ7VW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwmIzM0OywgcXVldWUpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xuJiM0MztcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdFx0aWYgKHBhZ2VzX25lZWRlZCBcdTAwM2M9IHBhZ2VzX2ZyZWUpXG4mIzQzO1x0XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xuJiM0MztcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDEwICYjNDM7Nzg4LDU2IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZGVhZGxpbmU7XG4mIzQzO1x0dTggZnJlZTtcbiYjNDM7XG4mIzQzO1x0aWYgKGF0b21pY19hZGRfdW5sZXNzKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ZnJlZSA9IHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKTtcbiYjNDM7XHRcdGlmIChmcmVlKSB7XG4mIzQzO1x0XHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSgxMDAwLCAyMDAwKTtcbiYjNDM7XHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVCVVNZO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxuJiM0MztcdFx0XHRcdFx0IHVuc2lnbmVkIGludCBwYWdlcylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHRhdG9taWNfdCAqZGVkaWNhdGVkO1xuJiM0MztcdHVuc2lnbmVkIGludCB0YWtlbjtcbiYjNDM7XHRpbnQgZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbiYjNDM7XHRpZiAoIWRlZGljYXRlZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XG4mIzQzO1x0dGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlIFx1MDAzZSAwID8gZnJlZSA6IDApO1xuJiM0MztcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4mIzQzO1xuJiM0MztcdHBhZ2VzIC09IHRha2VuO1xuJiM0MztcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuJiM0MztcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLCAwKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4mIzQzO1x0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XG4mIzQzO1x0dW5zaWduZWQgaW50IHBhZ2VzO1xuJiM0MztcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbkBAIC02NDUsMzEgJiM0Mzs4NDcsNzMgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4gXHRpZiAoIXR4YWRkcilcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuJiM0MztcdGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cdTAwM2VsZW4sIDQpO1xuJiM0MztcdFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcdTAwM2UgUlRXX1NESU9fQkxPQ0tfU0laRSA/XG4mIzQzO1x0XHRcdCAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogX19za2JfcGFkKCkgemVyb2VzIHRoZSBwYWRkaW5nIHdpdGhvdXQgbW92aW5nIHNrYi1cdTAwM2VsZW4gYW5kXG4mIzQzO1x0XHQgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLFxuJiM0MztcdFx0ICogc28gdGhlIHBhZGRpbmcgY2FuIG5ldmVyIGxhbmQgaW4gYSBidWZmZXIgYSBjbG9uZSBzdGlsbFxuJiM0MztcdFx0ICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzXG4mIzQzO1x0XHQgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAod3JpdGVfc2l6ZSBcdTAwM2Ugc2tiLVx1MDAzZWxlbikge1xuJiM0MztcdFx0XHRyZXQgPSBfX3NrYl9wYWQoc2tiLCB3cml0ZV9zaXplIC0gc2tiLVx1MDAzZWxlbiwgZmFsc2UpO1xuJiM0MztcdFx0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4mIzQzO1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZnJlZSBwYWdlIGNoZWNrLCB0aGUgb3V0cHV0IHF1ZXVlIHdhaXQgYW5kIHRoZSBhY2NvdW50aW5nXG4mIzQzO1x0ICogYWZ0ZXIgdGhlIHRyYW5zZmVyIG11c3Qgbm90IGludGVybGVhdmUgd2l0aCBhbm90aGVyIHdyaXRlcjogdGhlXG4mIzQzO1x0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcbiYjNDM7XHQgKiBib3RoIHBhc3MgdGhlIGNoZWNrcyBjYW4gY2xhaW0gdGhlIHNhbWUgcGFnZXMgYW5kIG91dHB1dCBxdWV1ZVxuJiM0MztcdCAqIGVudHJ5LCBhZnRlciB3aGljaCB0aGUgY2hpcCBzaWxlbnRseSBkaXNjYXJkcyB3aGljaGV2ZXIgdHJhbnNmZXJcbiYjNDM7XHQgKiBhcnJpdmVzIHNlY29uZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocnRsODcyM2JzKVxuJiM0MztcdFx0bXV0ZXhfbG9jayhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdGdvdG8gb3V0X3VubG9jaztcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0bDg3MjNicykge1xuJiM0MztcdFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7XG4mIzQzO1x0XHRpZiAocmV0KVxuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0fVxuIFxuIFx0aWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi1cdTAwM2VkYXRhLCBSVFdfU0RJT19EQVRBX1BUUl9BTElHTikpXG4gXHRcdHJ0d193YXJuKHJ0d2RldiwgXCYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXG5cJiMzNDssXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4mIzQzO1x0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgdHhhZGRyLCBza2ItXHUwMDNlZGF0YSxcbiYjNDM7XHRcdFx0ICAgICAgIHdyaXRlX3NpemUpO1xuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19yZWxlYXNlX2hvc3QocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMpO1xuIFxuLVx0aWYgKHJldClcbiYjNDM7XHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlICV6dSBieXRlKHMpIHRvIFNESU8gcG9ydCAweCUwOHhcJiMzNDssXG4tXHRcdFx0IHR4c2l6ZSwgdHhhZGRyKTtcbiYjNDM7XHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4mIzQzO1x0fSBlbHNlIGlmIChydGw4NzIzYnMpIHtcbiYjNDM7XHRcdHBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV9zaXplKTtcbiYjNDM7XHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuJiM0MztcdH1cbiBcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHRpZiAocnRsODcyM2JzKVxuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfY3JlZGl0X2xvY2spO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtNjc3LDcgJiM0Mzs5MjEsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcbi1cdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xuJiM0MztcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuJiM0MztcdFx0XHRcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbkBAIC02ODUsNiAmIzQzOzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0dTggc2l6ZSwgdGltZW91dDtcbiBcbiBcdHN3aXRjaCAocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQpIHtcbiYjNDM7XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgJiM0Mzs5NjEsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0ICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTtcbiBcbiBcdHJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICYjNDM7MTAwMCw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4mIzQzOyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXG4mIzQzOyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXG4mIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBydHdfY2hpcF9pbmZvICpjaGlwID0gcnR3ZGV2LVx1MDAzZWNoaXA7XG4mIzQzO1x0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcdTAwMjZydHdkZXYtXHUwMDNlZmlmbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbiYjNDM7XHR1MzIgZnJlZV90eHBnO1xuJiM0MztcdHUxNiBwdWJxX251bTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcbiYjNDM7XHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRwZ190YmwgPSBcdTAwMjZjaGlwLVx1MDAzZXBhZ2VfdGFibGVbMF07XG4mIzQzO1x0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTl9OUFEsXG4mIzQzO1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbiYjNDM7XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOLFxuJiM0MztcdFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXHUwMDNlaHFfbnVtLCBwZ190YmwtXHUwMDNlbHFfbnVtLCBwdWJxX251bSkpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuJiM0MztcdHUzMiBjbGVhcjtcbiYjNDM7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuJiM0MztcdFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4mIzQzO1x0XHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcdTAwMjYgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLO1xuJiM0MztcdFx0aWYgKGNsZWFyKVxuJiM0MztcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xuIFxuIFx0cmV0dXJuIDA7XG5AQCAtODE1LDcgJiM0MzsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHlcbiYjNDM7XHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNld29yaywgMCk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2xpbmtfcHMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgYm9vbCBlbnRlcilcbkBAIC04MzEsNiAmIzQzOzExMzgsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHZhbCB8PSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkU7XG4gXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7XG4gfVxuIFxuQEAgLTkyMiwxMiAmIzQzOzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBCYWNrLXByZXNzdXJlIG9uIHRoZSBkYXRhIEFDcyAoQksvQkUvVkkvVk8pOiBvbmNlIHRoZSBzb2Z0d2FyZSBGSUZPIGZpbGxzXG4mIzQzOyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4mIzQzOyAqIGhhbmRpbmcgZnJhbWVzIGRvd24sIHdoaWNoIGJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gVGhlIHF1ZXVlIGlzIHdva2VuXG4mIzQzOyAqIGFnYWluIGZyb20gdGhlIFRYIGRyYWluIHBhdGggb25jZSB0aGUgRklGTyBmYWxscyBiYWNrIHRvIHRoZSBsb3cgd2F0ZXJtYXJrLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChSRUFEX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2MgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIHRydWUpO1xuJiM0MztcdGllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSB3b3JrZXIgbWF5IGhhdmUgZHJhaW5lZCB0aGUgcXVldWUgYmV0d2VlbiB0aGUgbGVuZ3RoIGNoZWNrXG4mIzQzO1x0ICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZVxuJiM0MztcdCAqIGZsYWcgc3RpbGwgY2xlYXIgYW5kIHRoaXMgc3RvcCB3b3VsZCBuZXZlciBiZSB1bmRvbmUuIFJlLWNoZWNrXG4mIzQzO1x0ICogbm93IHRoYXQgdGhlIGZsYWcgaXMgc2V0IGFuZCB1bmRvIHRoZSBzdG9wIGlmIHNvLiBCb3RoIHNpZGVzIGNhblxuJiM0MztcdCAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW5cbiYjNDM7XHQgKiBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZSgpIHNvIGF0IGxlYXN0IG9uZSBzaWRlIGRvZXMuXG4mIzQzO1x0ICovXG4mIzQzO1x0c21wX21iKCk7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYz1cbiYjNDM7XHQgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7XG4mIzQzO1x0XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbiYjNDM7XHRcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbiYjNDM7XHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcdTAwM2U9IFJUV19UWF9RVUVVRV9CQ04pXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdC8qIHBhaXJzIHdpdGggdGhlIGJhcnJpZXIgaW4gcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoKSAqL1xuJiM0MztcdHNtcF9tYigpO1xuJiM0MztcbiYjNDM7XHRpZiAoIVJFQURfT05DRShydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFdSSVRFX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgZmFsc2UpO1xuJiM0MztcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdFx0XHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxuIFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlID0gcnR3X3R4X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiYjNDM7XHR1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHN0cnVjdCBydHdfc2Rpb190eF9kYXRhICp0eF9kYXRhO1xuIFxuIFx0cnR3X3NkaW9fdHhfc2tiX3ByZXBhcmUocnR3ZGV2LCBwa3RfaW5mbywgc2tiLCBxdWV1ZSk7XG5AQCAtOTM1LDggJiM0MzsxMzA3LDE1IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbiBcdHR4X2RhdGEgPSBydHdfc2Rpb19nZXRfdHhfZGF0YShza2IpO1xuIFx0dHhfZGF0YS1cdTAwM2VzbiA9IHBrdF9pbmZvLVx1MDAzZXNuO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogc2tiX3F1ZXVlX3RhaWwoKSBwdWJsaXNoZXMgdGhlIHNrYiB0byB0aGUgVFggd29ya2VyLCB3aGljaCBtYXlcbiYjNDM7XHQgKiBwcm9jZXNzIGFuZCBmcmVlIGl0IGltbWVkaWF0ZWx5LCBzbyBub3RoaW5nIG1heSB0b3VjaCB0aGUgc2tiXG4mIzQzO1x0ICogcGFzdCB0aGlzIHBvaW50LlxuJiM0MztcdCAqL1xuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4mIzQzO1x0cnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xMDk1LDYgJiM0MzsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJUTDg3MjNCUyBrZWVwcyByYWlzaW5nIHRoZSBpbnRlcnJ1cHQgYWZ0ZXIgcmVzdW1lIGlmIHVuZGVmaW5lZFxuJiM0MztcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuJiM0MztcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdGhpc3IgXHUwMDI2PSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4mIzQzO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBoaXNyKTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNlaXJxX3RocmVhZCA9IE5VTEw7XG5AQCAtMTIzMSwzMyAmIzQzOzE2MTgsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4mIzQzOy8qXG4mIzQzOyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXG4mIzQzOyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRzdHJ1Y3Qgc2tfYnVmZiAqc2tiO1xuJiM0MztcdHUxNiBxX21hcDtcbiBcdGludCByZXQ7XG4gXG4gXHRza2IgPSBza2JfZGVxdWV1ZShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XG4gXHRpZiAoIXNrYilcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0cmV0dXJuIDE7XG4gXG4mIzQzO1x0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHJldCA9IHJ0d19zZGlvX3dyaXRlX3BvcnQocnR3ZGV2LCBza2IsIHF1ZXVlKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0c2tiX3F1ZXVlX2hlYWQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4tXHRcdHJldHVybjtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4gXHR9XG4gXG4gXHRydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMocnR3ZGV2LCBza2IpO1xuJiM0MztcbiYjNDM7XHRydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXG4mIzQzOyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cbiYjNDM7ICpcbiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcbiYjNDM7ICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcbiYjNDM7ICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcbiYjNDM7ICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXG4mIzQzOyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4mIzQzOyAqXG4mIzQzOyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxuJiM0MzsgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4mIzQzO1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbiYjNDM7XHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwgaW50IHJldClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGRlbGF5O1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4mIzQzO1x0XHRkZWxheSA9IFJUV19TRElPX1RYX1JFVFJZX0RFTEFZO1xuJiM0MztcdGVsc2UgaWYgKHJldCA9PSAwIFx1MDAyNlx1MDAyNiBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVClcbiYjNDM7XHRcdGRlbGF5ID0gMDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHF1ZXVlX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNndvcmtfZGF0YS1cdTAwM2V3b3JrLCBkZWxheSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4mIzQzO1x0XHRjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLFxuJiM0MztcdFx0XHQgICAgIHdvcmspO1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xuIFx0c3RydWN0IHJ0d19kZXYgKnJ0d2Rldjtcbi1cdGludCBsaW1pdCwgcXVldWU7XG4mIzQzO1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICYjNDM7MTcwMiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiBcbiBcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFx1MDAzZT0gMDsgcXVldWUtLSkge1xuIFx0XHRmb3IgKGxpbWl0ID0gMDsgbGltaXQgXHUwMDNjIDEwMDA7IGxpbWl0JiM0MzsmIzQzOykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdHJldCA9IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNlIDApXG4mIzQzO1x0XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4gXG4gXHRcdFx0aWYgKHNrYl9xdWV1ZV9lbXB0eShcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXG4gXHRcdFx0XHRicmVhaztcbkBAIC0xMjk0LDE0ICYjNDM7MTczNSwxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHR9XG4gXG4tXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSYjNDM7JiM0MzspXG4mIzQzO1x0bXV0ZXhfaW5pdChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4mIzQzO1x0XHRydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbaV0gPSBmYWxzZTtcbiYjNDM7XHR9XG4gXHRydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXHRpZiAoIXJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKVxuIFx0XHRnb3RvIGVycl9kZXN0cm95X3dxO1xuIFxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEtXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xuLVx0SU5JVF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuJiM0MztcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICYjNDM7MTc2MCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0aW50IGk7XG4gXG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuIFx0ZGVzdHJveV93b3JrcXVldWUocnR3c2Rpby1cdTAwM2V0eHdxKTtcbiBcdGtmcmVlKHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhKTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5pbmRleCA0NTdlOGIwMjM4MGU1Li42ZTdlNjAwOTc0NGIwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG5AQCAtMjIsNiAmIzQzOzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAwKVxuJiM0MzsjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVx0QklUKDQpXG4gXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cbiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKVxuQEAgLTc3LDYgJiM0Mzs3OCwxNCBAQFxuIC8qIHRoZSBmb2xsb3dpbmcgdHdvIGFyZSBSVEw4MTg4IFNESU8gU3BlY2lmaWMgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUlx0XHRcdEJJVCgyOClcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVx0XHRCSVQoMjkpXG4mIzQzOyNkZWZpbmUgUlRXX1NESU9fSElTUl9DTEVBUl9NQVNLXHRcdFxcXG4mIzQzO1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbiYjNDM7XHQgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFxcXG4mIzQzO1x0IFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcXFxuJiM0MztcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDE5KVxuQEAgLTg2LDYgJiM0Mzs5NSwxMCBAQFxuICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEdcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjApXG4mIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdIXHRcdFx0R0VOTUFTSyg3LCAwKVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbiYjNDM7I2RlZmluZSBCSVRfRlJFRV9UWFBHX0xPV1x0XHRcdEdFTk1BU0soMjMsIDE2KVxuJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCXHRcdFx0R0VOTUFTSygzMSwgMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTTFcdFx0XHRcdChTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgJiM0MzsxNTYsNyBAQCBzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSB7XG4gfTtcbiBcbiBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhIHtcbi1cdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xuJiM0MztcdHN0cnVjdCBkZWxheWVkX3dvcmsgd29yaztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4gfTtcbiBcbkBAIC0xNTksNiAmIzQzOzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbiYjNDM7XHRib29sIHR4X3F1ZXVlX3N0b3BwZWRbUlRLX01BWF9UWF9RVUVVRV9OVU1dO1xuJiM0MztcbiYjNDM7XHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19sb3c7XG4mIzQzO1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4mIzQzO1x0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XG4mIzQzO1x0Lyogb25lIHdyaXRlciBhdCBhIHRpbWUgYmV0d2VlbiB0aGUgY3JlZGl0IGNoZWNrIGFuZCB0aGUgYWNjb3VudGluZyAqL1xuJiM0MztcdHN0cnVjdCBtdXRleCB0eF9jcmVkaXRfbG9jaztcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxuIFx0X19za2JfcXVldWVfdGFpbChcdTAwMjZ0eF9yZXBvcnQtXHUwMDNlcXVldWUsIHNrYik7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxX2xvY2ssIGZsYWdzKTtcbiBcbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxuJiM0MztcdGlmICgocnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuJiM0MztcdCAgICBydHdfaXNfODcyM2JzKHJ0d2RldikpXG4gXHRcdHRpbWVvdXQgPSBtc2Vjc190b19qaWZmaWVzKDI1MDApO1xuIFxuIFx0bW9kX3RpbWVyKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VwdXJnZV90aW1lciwgamlmZmllcyAmIzQzOyB0aW1lb3V0KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAppbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaApAQCAtMTk0LDYgJiM0MzsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUgewogCVJUV19DSElQX1RZUEVfODcyM0QsCiAJUlRXX0NISVBfVFlQRV84ODIxQywKIAlSVFdfQ0hJUF9UWVBFXzg3MDNCLAomIzQzOwlSVFdfQ0hJUF9UWVBFXzg3MjNCLAogCVJUV19DSElQX1RZUEVfODgyMUEsCiAJUlRXX0NISVBfVFlQRV84ODEyQSwKIAlSVFdfQ0hJUF9UWVBFXzg4MTRBLApAQCAtMjE5NCw2ICYjNDM7MjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAlyZXR1cm4gcnR3ZGV2LSZndDtjaGlwLSZndDt0eF9zdGJjOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKJiM0Mzt7CiYjNDM7CXJldHVybiBydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0IgJmFtcDsmYW1wOwomIzQzOwkgICAgICAgcnR3ZGV2LSZndDtoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiAJdW5zaWduZWQgbG9uZyBtYWNfaWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMKaW5kZXggMDFmZDI5OWFiYjdmZS4uZmRlMjFjODQwYWMwMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYwpAQCAtMjUzLDEwICYjNDM7MjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCiAJcnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTsKIAotCS8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplICZsdDsgMTQgb3Igc2l6ZSAmZ3Q7IDgxOTIgYW5kCi0JICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuCiYjNDM7CS8qCiYjNDM7CSAqIFJ0bDg3MjNjcyBhbmQgcnRsODcyM2JzIGRyaXZlcnMgY2hlY2sgZm9yIHNpemUgJmx0OyAxNCBvciBzaXplICZndDsgODE5MgomIzQzOwkgKiBhbmQgc2ltcGx5IGRyb3AgdGhlIHBhY2tldC4KIAkgKi8KLQlpZiAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCICZhbXA7JmFtcDsgcGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCkgewomIzQzOwlpZiAocGt0X3N0YXQtJmd0O3BrdF9sZW4gPT0gMCAmYW1wOyZhbXA7CiYjNDM7CSAgICAocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KSkpIHsKIAkJcnhfc3RhdHVzLSZndDtmbGFnIHw9IFJYX0ZMQUdfTk9fUFNEVTsKIAkJcnR3X2RiZyhydHdkZXYsIFJUV19EQkdfUlgsICYjMzQ7emVybyBsZW5ndGggcGFja2V0JiMzNDspOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKaW5kZXggNWI0MGQ3NGIxNmVlMC4uYTIxYzM2NzM3ZTc4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMKQEAgLTIwLDYgJiM0MzsyMCwxNyBAQAogI2luY2x1ZGUgJiMzNDt0eC5oJiMzNDsKIAogI2RlZmluZSBSVFdfU0RJT19JTkRJUkVDVF9SV19SRVRSSUVTCQkJNTAKJiM0MzsjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TCQkJCTEwMDAKJiM0MzsKJiM0MzsvKgomIzQzOyAqIDg3MjNCUyBTRElPIFRYIEZJRk8gYmFjay1wcmVzc3VyZSB3YXRlcm1hcmtzOiBzdG9wIHRoZSBtYWM4MDIxMSBxdWV1ZSBvbmNlCiYjNDM7ICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZQomIzQzOyAqIFRYIGRyYWluIHBhdGggb25jZSBpdCBmYWxscyBiYWNrIHRvIHRoZSBsb3cgb25lLiBCb3VuZHMgdGhlIHF1ZXVlaW5nIGxhdGVuY3kKJiM0MzsgKiB0aGF0IG90aGVyd2lzZSBjYXVzZXMgdXBsaW5rIGJ1ZmZlcmJsb2F0IC8gY29uZ2VzdGlvbiBjb2xsYXBzZS4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUgkJCTE2CiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0xPV0FURVIJCQk4CiYjNDM7I2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWQkJCW1zZWNzX3RvX2ppZmZpZXMoMSkKIAogc3RhdGljIGJvb2wgcnR3X3NkaW9faXNfYnVzX2FkZHIodTMyIGFkZHIpCiB7CkBAIC01NDgsMTIgJiM0Mzs1NTksMTU3IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fcmVhZF9wb3J0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4ICpidWYsIHNpemVfdCBjb3VudCkKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7LyoKJiM0MzsgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuCiYjNDM7ICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcywKJiM0MzsgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXMKJiM0MzsgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlcgomIzQzOyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsCiYjNDM7CQkJCQkgICAgdTMyIGZyZWVfdHhwZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX2hpZ2gsCiYjNDM7CQkgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0hJR0gpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19OT1JNQUwpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93LAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTsKJiM0MzsJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViLAomIzQzOwkJICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19QVUIpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWZyZXNoIHRoZSBjYWNoZWQgY291bnRlcnMgZnJvbSB0aGUgY2hpcC4gUmV0dXJucyBmYWxzZSB3aGVuIHRoZSBjaGlwCiYjNDM7ICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZAomIzQzOyAqIGFuZCB0aGUgY2FsbGVyIGhhcyB0byBkZWNpZGUgd2hhdCB0byBkbyBpbnN0ZWFkLgomIzQzOyAqLwomIzQzO3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJdTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpOwomIzQzOwomIzQzOwlpZiAoIWZyZWVfdHhwZykKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3N0b3JlX2ZyZWVfdHhwZyhydHdkZXYsIGZyZWVfdHhwZyk7CiYjNDM7CiYjNDM7CXJldHVybiB0cnVlOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFNpemUgb2YgdGhlIHB1YmxpYyBwYWdlIHBvb2w6IHdoYXRldmVyIHRoZSB0cmFuc21pdCBwYWdlIGFsbG9jYXRpb24gaGFzCiYjNDM7ICogbGVmdCBvbmNlIHRoZSBwZXIgcXVldWUgcG9vbHMgYXJlIHRha2VuIG91dC4gRmFpbHMgaWYgdGhlIGFsbG9jYXRpb24KJiM0MzsgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kCiYjNDM7ICogdGhlcmUgd291bGQgYmUgbm8gc2Vuc2libGUgcG9vbCB0byBoYW5kIG91dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSAmYW1wO3J0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV90YWJsZVswXTsKJiM0MzsJdTE2IGFjcV9wZ19udW0gPSBydHdkZXYtJmd0O2ZpZm8uYWNxX3BnX251bTsKJiM0MzsJdTE2IHJlc2VydmVkX251bTsKJiM0MzsKJiM0MzsJcmVzZXJ2ZWRfbnVtID0gcGdfdGJsLSZndDtocV9udW0gJiM0MzsgcGdfdGJsLSZndDtscV9udW0gJiM0MzsgcGdfdGJsLSZndDtucV9udW0gJiM0MzsKJiM0MzsJCSAgICAgICBwZ190YmwtJmd0O2V4cV9udW0gJiM0MzsgcGdfdGJsLSZndDtnYXBxX251bTsKJiM0MzsJaWYgKGFjcV9wZ19udW0gJmx0Oz0gcmVzZXJ2ZWRfbnVtKSB7CiYjNDM7CQlydHdfZXJyKHJ0d2RldiwKJiM0MzsJCQkmIzM0O25vIHRyYW5zbWl0IHBhZ2VzIGxlZnQgZm9yIHRoZSBwdWJsaWMgcXVldWU6ICV1IG9mICV1IHJlc2VydmVkXG4mIzM0OywKJiM0MzsJCQlyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnB1YnFfbnVtID0gYWNxX3BnX251bSAtIHJlc2VydmVkX251bTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDsKJiM0MzsJdTE2IHB1YnFfbnVtOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwkvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqLwomIzQzOwlpZiAoIXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpKSB7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCAmYW1wO3B1YnFfbnVtKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXBnX3RibCA9ICZhbXA7cnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3RhYmxlWzBdOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaCwgcGdfdGJsLSZndDtocV9udW0pOwomIzQzOwkJYXRvbWljX3NldCgmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbm9ybWFsLCBwZ190YmwtJmd0O25xX251bSk7CiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19sb3csIHBnX3RibC0mZ3Q7bHFfbnVtKTsKJiM0MzsJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1YiwgcHVicV9udW0pOwomIzQzOwl9CiYjNDM7CiYjNDM7CWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwKJiM0MzsJCSAgIHJ0d19yZWFkOChydHdkZXYsIFJFR19TRElPX09RVF9GUkVFX1BHKSk7CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFN1bSBvZiB0aGUgcXVldWUmIzM5O3MgZGVkaWNhdGVkIGNvdW50ZXIgYW5kIHRoZSBwdWJsaWMgcG9vbCwgY2xhbXBlZCBhdCB6ZXJvOgomIzQzOyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKQomIzQzOyAqIGNhbiBicmllZmx5IGRyaXZlIGEgY291bnRlciBuZWdhdGl2ZSwgYW5kIGxldHRpbmcgdGhhdCB3cmFwIHdvdWxkIGhpZGUgdGhlCiYjNDM7ICogc2hvcnRhZ2UgaW5zdGVhZCBvZiB0cmlnZ2VyaW5nIGEgcmVzeW5jIGZyb20gdGhlIGNoaXAuCiYjNDM7ICovCiYjNDM7c3RhdGljIHVuc2lnbmVkIGludCBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAomIzQzOwkJCQkJICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwlpbnQgZnJlZTsKJiM0MzsKJiM0MzsJZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCkgJiM0MzsgYXRvbWljX3JlYWQoJmFtcDtydHdzZGlvLSZndDtmcmVlX3BnX3B1Yik7CiYjNDM7CiYjNDM7CXJldHVybiBmcmVlICZndDsgMCA/IGZyZWUgOiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYXRvbWljX3QgKnJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwomIzQzOwomIzQzOwlzd2l0Y2ggKHF1ZXVlKSB7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX1ZJOgomIzQzOwkJcmV0dXJuICZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19ub3JtYWw7CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0JFOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CSzoKJiM0MzsJCXJldHVybiAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfbG93OwomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9CQ046CiYjNDM7CWNhc2UgUlRXX1RYX1FVRVVFX0gyQzoKJiM0MzsJY2FzZSBSVFdfVFhfUVVFVUVfSEkwOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9NR01UOgomIzQzOwljYXNlIFJUV19UWF9RVUVVRV9WTzoKJiM0MzsJCXJldHVybiAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfaGlnaDsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJCQkJICAgIHNpemVfdCBjb3VudCkKIHsKIAl1bnNpZ25lZCBpbnQgcGFnZXNfZnJlZSwgcGFnZXNfbmVlZGVkOwogCi0JaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHsKJiM0MzsJCWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CiYjNDM7CQlkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJaWYgKCFkZWRpY2F0ZWQpIHsKJiM0MzsJCQlydHdfd2FybihydHdkZXYsICYjMzQ7VW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxuJiMzNDssIHF1ZXVlKTsKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCXBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7CiYjNDM7CQlwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJCWlmIChwYWdlc19uZWVkZWQgJmx0Oz0gcGFnZXNfZnJlZSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCXJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpOwomIzQzOwkJcGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTsKJiM0MzsJfSBlbHNlIGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkgewogCQl1MzIgZnJlZV90eHBnOwogCiAJCWZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CkBAIC02MzIsMTAgJiM0Mzs3ODgsNTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsCiAJcmV0dXJuIDA7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWFkbGluZTsKJiM0MzsJdTggZnJlZTsKJiM0MzsKJiM0MzsJaWYgKGF0b21pY19hZGRfdW5sZXNzKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfb3F0X2ZyZWUsIC0xLCAwKSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwlkZWFkbGluZSA9IGppZmZpZXMgJiM0MzsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7CiYjNDM7CWRvIHsKJiM0MzsJCWZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7CiYjNDM7CQlpZiAoZnJlZSkgewomIzQzOwkJCWF0b21pY19zZXQoJmFtcDtydHdzZGlvLSZndDt0eF9vcXRfZnJlZSwgZnJlZSAtIDEpOwomIzQzOwkJCXJldHVybiAwOwomIzQzOwkJfQomIzQzOwkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCBkZWFkbGluZSkpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVCVVNZOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLAomIzQzOwkJCQkJIHVuc2lnbmVkIGludCBwYWdlcykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiYjNDM7CWF0b21pY190ICpkZWRpY2F0ZWQ7CiYjNDM7CXVuc2lnbmVkIGludCB0YWtlbjsKJiM0MzsJaW50IGZyZWU7CiYjNDM7CiYjNDM7CWRlZGljYXRlZCA9IHJ0d19zZGlvXzg3MjNic19mcmVlX3R4cGcocnR3ZGV2LCBxdWV1ZSk7CiYjNDM7CWlmICghZGVkaWNhdGVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTsKJiM0MzsJdGFrZW4gPSBtaW5fdCh1bnNpZ25lZCBpbnQsIHBhZ2VzLCBmcmVlICZndDsgMCA/IGZyZWUgOiAwKTsKJiM0MzsJYXRvbWljX3N1Yih0YWtlbiwgZGVkaWNhdGVkKTsKJiM0MzsKJiM0MzsJcGFnZXMgLT0gdGFrZW47CiYjNDM7CWlmIChwYWdlcyAmYW1wOyZhbXA7IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCAmYW1wO3J0d3NkaW8tJmd0O2ZyZWVfcGdfcHViKSAmbHQ7IDApCiYjNDM7CQlhdG9taWNfc2V0KCZhbXA7cnR3c2Rpby0mZ3Q7ZnJlZV9wZ19wdWIsIDApOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpCiB7CiAJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJYm9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7CiYjNDM7CXVuc2lnbmVkIGludCBwYWdlczsKJiM0MzsJc2l6ZV90IHdyaXRlX3NpemU7CiAJYm9vbCBidXNfY2xhaW07CiAJc2l6ZV90IHR4c2l6ZTsKIAl1MzIgdHhhZGRyOwpAQCAtNjQ1LDMxICYjNDM7ODQ3LDczIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fd3JpdGVfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCWlmICghdHhhZGRyKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJdHhzaXplID0gcm91bmRfdXAoc2tiLSZndDtsZW4sIDQpOwomIzQzOwkJd3JpdGVfc2l6ZSA9IHR4c2l6ZSAmZ3Q7IFJUV19TRElPX0JMT0NLX1NJWkUgPwomIzQzOwkJCSAgICAgcm91bmRfdXAodHhzaXplLCBSVFdfU0RJT19CTE9DS19TSVpFKSA6IHR4c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBfX3NrYl9wYWQoKSB6ZXJvZXMgdGhlIHBhZGRpbmcgd2l0aG91dCBtb3Zpbmcgc2tiLSZndDtsZW4gYW5kCiYjNDM7CQkgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLAomIzQzOwkJICogc28gdGhlIHBhZGRpbmcgY2FuIG5ldmVyIGxhbmQgaW4gYSBidWZmZXIgYSBjbG9uZSBzdGlsbAomIzQzOwkJICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzCiYjNDM7CQkgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LgomIzQzOwkJICovCiYjNDM7CQlpZiAod3JpdGVfc2l6ZSAmZ3Q7IHNrYi0mZ3Q7bGVuKSB7CiYjNDM7CQkJcmV0ID0gX19za2JfcGFkKHNrYiwgd3JpdGVfc2l6ZSAtIHNrYi0mZ3Q7bGVuLCBmYWxzZSk7CiYjNDM7CQkJaWYgKHJldCkKJiM0MzsJCQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfSBlbHNlIHsKJiM0MzsJCXR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHNrYi0mZ3Q7bGVuKTsKJiM0MzsJCXdyaXRlX3NpemUgPSB0eHNpemU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIGZyZWUgcGFnZSBjaGVjaywgdGhlIG91dHB1dCBxdWV1ZSB3YWl0IGFuZCB0aGUgYWNjb3VudGluZwomIzQzOwkgKiBhZnRlciB0aGUgdHJhbnNmZXIgbXVzdCBub3QgaW50ZXJsZWF2ZSB3aXRoIGFub3RoZXIgd3JpdGVyOiB0aGUKJiM0MzsJICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXQKJiM0MzsJICogYm90aCBwYXNzIHRoZSBjaGVja3MgY2FuIGNsYWltIHRoZSBzYW1lIHBhZ2VzIGFuZCBvdXRwdXQgcXVldWUKJiM0MzsJICogZW50cnksIGFmdGVyIHdoaWNoIHRoZSBjaGlwIHNpbGVudGx5IGRpc2NhcmRzIHdoaWNoZXZlciB0cmFuc2ZlcgomIzQzOwkgKiBhcnJpdmVzIHNlY29uZC4KJiM0MzsJICovCiYjNDM7CWlmIChydGw4NzIzYnMpCiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfY3JlZGl0X2xvY2spOwogCiAJcmV0ID0gcnR3X3NkaW9fY2hlY2tfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUsIHR4c2l6ZSk7CiAJaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsKJiM0MzsJaWYgKHJ0bDg3MjNicykgewomIzQzOwkJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHJ0d2Rldik7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJfQogCiAJaWYgKCFJU19BTElHTkVEKCh1bnNpZ25lZCBsb25nKXNrYi0mZ3Q7ZGF0YSwgUlRXX1NESU9fREFUQV9QVFJfQUxJR04pKQogCQlydHdfd2FybihydHdkZXYsICYjMzQ7R290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcbiYjMzQ7LAogCQkJIF9fZnVuY19fLCBxdWV1ZSk7CiAKIAlidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pOwotCiAJaWYgKGJ1c19jbGFpbSkKIAkJc2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tJmd0O3NkaW9fZnVuYyk7Ci0KLQlyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tJmd0O3NkaW9fZnVuYywgdHhhZGRyLCBza2ItJmd0O2RhdGEsIHR4c2l6ZSk7Ci0KJiM0MzsJcmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLSZndDtzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLSZndDtkYXRhLAomIzQzOwkJCSAgICAgICB3cml0ZV9zaXplKTsKIAlpZiAoYnVzX2NsYWltKQogCQlzZGlvX3JlbGVhc2VfaG9zdChydHdzZGlvLSZndDtzZGlvX2Z1bmMpOwogCi0JaWYgKHJldCkKJiM0MzsJaWYgKHJldCkgewogCQlydHdfd2FybihydHdkZXYsCiAJCQkgJiMzNDtGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eCYjMzQ7LAotCQkJIHR4c2l6ZSwgdHhhZGRyKTsKJiM0MzsJCQkgd3JpdGVfc2l6ZSwgdHhhZGRyKTsKJiM0MzsJfSBlbHNlIGlmIChydGw4NzIzYnMpIHsKJiM0MzsJCXBhZ2VzID0gRElWX1JPVU5EX1VQKHR4c2l6ZSwgcnR3ZGV2LSZndDtjaGlwLSZndDtwYWdlX3NpemUpOwomIzQzOwkJcnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7CiYjNDM7CX0KIAomIzQzO291dF91bmxvY2s6CiYjNDM7CWlmIChydGw4NzIzYnMpCiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtydHdzZGlvLSZndDt0eF9jcmVkaXRfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjc3LDcgJiM0Mzs5MjEsMTEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5pdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8IFJFR19TRElPX0hJTVJfQ1BXTTE7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdzZGlvLSZndDtpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDsKJiM0MzsJZWxzZQomIzQzOwkJcnR3c2Rpby0mZ3Q7aXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfAomIzQzOwkJCQkgICAgUkVHX1NESU9fSElNUl9DUFdNMTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCkBAIC02ODUsNiAmIzQzOzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXU4IHNpemUsIHRpbWVvdXQ7CiAKIAlzd2l0Y2ggKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQpIHsKJiM0MzsJY2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOgogCWNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjoKIAljYXNlIFJUV19DSElQX1RZUEVfODgyMUE6CiAJY2FzZSBSVFdfQ0hJUF9UWVBFXzg4MTJBOgpAQCAtNzEyLDYgJiM0Mzs5NjEsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJICAgIEZJRUxEX1BSRVAoQklUX0RNQV9BR0dfVE9fVjEsIHRpbWVvdXQpKTsKIAogCXJ0d193cml0ZThfc2V0KHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfTU9ERSk7CiYjNDM7CWlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlydHdfd3JpdGU4X21hc2socnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9CVVJTVF9DTlQsIDB4Myk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKQEAgLTc0OSw5ICYjNDM7MTAwMCw2MSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3NldHVwKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiAJcmV0dXJuIDA7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzCiYjNDM7ICogYSByZXBhaXIgcGF0aCwgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBzdGFydCBzZXF1ZW5jZTogYSBub24temVybyBmcmVlIHBhZ2UKJiM0MzsgKiBjb3VudCBtZWFucyB0aGUgYWxsb2NhdGlvbiBsYXRjaGVkIGR1cmluZyBwb3dlciBvbiBhbmQgbXVzdCBiZSBsZWZ0IGFsb25lLAomIzQzOyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi0mZ3Q7Y2hpcDsKJiM0MzsJc3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSAmYW1wO3J0d2Rldi0mZ3Q7ZmlmbzsKJiM0MzsJY29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190Ymw7CiYjNDM7CXUzMiBmcmVlX3R4cGc7CiYjNDM7CXUxNiBwdWJxX251bTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7CiYjNDM7CWlmIChmcmVlX3R4cGcgfHwgIWZpZm8tJmd0O2FjcV9wZ19udW0pCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgJmFtcDtwdWJxX251bSk7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlwZ190YmwgPSAmYW1wO2NoaXAtJmd0O3BhZ2VfdGFibGVbMF07CiYjNDM7CXJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLAomIzQzOwkJICAgIEJJVF9SUVBOX05FKHBnX3RibC0mZ3Q7bnFfbnVtLCBwZ190YmwtJmd0O2V4cV9udW0pKTsKJiM0MzsJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTiwKJiM0MzsJCSAgICBCSVRfUlFQTl9ITFAocGdfdGJsLSZndDtocV9udW0sIHBnX3RibC0mZ3Q7bHFfbnVtLCBwdWJxX251bSkpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpCiB7CiYjNDM7CXUzMiBjbGVhcjsKJiM0MzsKJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkgewomIzQzOwkJaW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7CiYjNDM7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CQlyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwogCXJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpOwomIzQzOwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7CiYjNDM7CQljbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSAmYW1wOyBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7CiYjNDM7CQlpZiAoY2xlYXIpCiYjNDM7CQkJcnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSLCBjbGVhcik7CiYjNDM7CX0KJiM0MzsKIAlydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHJ0d2Rldik7CiAKIAlyZXR1cm4gMDsKQEAgLTgxNSw3ICYjNDM7MTExOCwxMSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9raWNrX29mZihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAKLQlxdWV1ZV93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrKTsKJiM0MzsJLyoKJiM0MzsJICogQSByZXRyeSBtYXkgYWxyZWFkeSBiZSBwZW5kaW5nIHdpdGggYSBkZWxheTsgcmUtYXJtIGl0IHNvIGEgbmV3bHkKJiM0MzsJICogcXVldWVkIGZyYW1lIGlzIG5vdCBoZWxkIGJhY2sgYnkgaXQuCiYjNDM7CSAqLwomIzQzOwltb2RfZGVsYXllZF93b3JrKHJ0d3NkaW8tJmd0O3R4d3EsICZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKQpAQCAtODMxLDYgJiM0MzsxMTM4LDggQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW50ZXJmYWNlX2NmZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCiAJdmFsID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwpOwogCXZhbCAmYW1wOz0gMHhmZmY4OwomIzQzOwlpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKQomIzQzOwkJdmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX1RYX0NUUkwsIHZhbCk7CiB9CiAKQEAgLTkyMiwxMiAmIzQzOzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSkKIAlyZXR1cm4gcnR3X3NkaW9fd3JpdGVfZGF0YShydHdkZXYsICZhbXA7cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHMKJiM0MzsgKiBwYXN0IHRoZSBoaWdoIHdhdGVybWFyaywgc3RvcCB0aGUgY29ycmVzcG9uZGluZyBtYWM4MDIxMSBxdWV1ZSBzbyBpdCBzdG9wcwomIzQzOyAqIGhhbmRpbmcgZnJhbWVzIGRvd24sIHdoaWNoIGJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeS4gVGhlIHF1ZXVlIGlzIHdva2VuCiYjNDM7ICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKFJFQURfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmbHQ7IFJUV19TRElPX1RYX0ZJRk9fSElXQVRFUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgdHJ1ZSk7CiYjNDM7CWllZWU4MDIxMV9zdG9wX3F1ZXVlKHJ0d2Rldi0mZ3Q7aHcsIHFfbWFwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogVGhlIHdvcmtlciBtYXkgaGF2ZSBkcmFpbmVkIHRoZSBxdWV1ZSBiZXR3ZWVuIHRoZSBsZW5ndGggY2hlY2sKJiM0MzsJICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZQomIzQzOwkgKiBmbGFnIHN0aWxsIGNsZWFyIGFuZCB0aGlzIHN0b3Agd291bGQgbmV2ZXIgYmUgdW5kb25lLiBSZS1jaGVjawomIzQzOwkgKiBub3cgdGhhdCB0aGUgZmxhZyBpcyBzZXQgYW5kIHVuZG8gdGhlIHN0b3AgaWYgc28uIEJvdGggc2lkZXMgY2FuCiYjNDM7CSAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW4KJiM0MzsJICogcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoKSBzbyBhdCBsZWFzdCBvbmUgc2lkZSBkb2VzLgomIzQzOwkgKi8KJiM0MzsJc21wX21iKCk7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmbHQ7PQomIzQzOwkgICAgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKSB7CiYjNDM7CQlXUklURV9PTkNFKHJ0d3NkaW8tJmd0O3R4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7CiYjNDM7CQlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSwKJiM0MzsJCQkJCSAgdTE2IHFfbWFwKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgJmd0Oz0gUlRXX1RYX1FVRVVFX0JDTikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJLyogcGFpcnMgd2l0aCB0aGUgYmFycmllciBpbiBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZSgpICovCiYjNDM7CXNtcF9tYigpOwomIzQzOwomIzQzOwlpZiAoIVJFQURfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWlmIChza2JfcXVldWVfbGVuKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbcXVldWVdKSAmZ3Q7IFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJV1JJVEVfT05DRShydHdzZGlvLSZndDt0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgZmFsc2UpOwomIzQzOwlpZWVlODAyMTFfd2FrZV9xdWV1ZShydHdkZXYtJmd0O2h3LCBxX21hcCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LAogCQkJICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbywKIAkJCSAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LSZndDtwcml2OwogCWVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUgPSBydHdfdHhfcXVldWVfbWFwcGluZyhza2IpOwomIzQzOwl1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTsKIAlzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSAqdHhfZGF0YTsKIAogCXJ0d19zZGlvX3R4X3NrYl9wcmVwYXJlKHJ0d2RldiwgcGt0X2luZm8sIHNrYiwgcXVldWUpOwpAQCAtOTM1LDggJiM0MzsxMzA3LDE1IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fdHhfd3JpdGUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAl0eF9kYXRhID0gcnR3X3NkaW9fZ2V0X3R4X2RhdGEoc2tiKTsKIAl0eF9kYXRhLSZndDtzbiA9IHBrdF9pbmZvLSZndDtzbjsKIAomIzQzOwkvKgomIzQzOwkgKiBza2JfcXVldWVfdGFpbCgpIHB1Ymxpc2hlcyB0aGUgc2tiIHRvIHRoZSBUWCB3b3JrZXIsIHdoaWNoIG1heQomIzQzOwkgKiBwcm9jZXNzIGFuZCBmcmVlIGl0IGltbWVkaWF0ZWx5LCBzbyBub3RoaW5nIG1heSB0b3VjaCB0aGUgc2tiCiYjNDM7CSAqIHBhc3QgdGhpcyBwb2ludC4KJiM0MzsJICovCiAJc2tiX3F1ZXVlX3RhaWwoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7CiAKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3N0b3BfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApOwomIzQzOwogCXJldHVybiAwOwogfQogCkBAIC0xMDk1LDYgJiM0MzsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKQogCQlydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTsKIAl9CiAKJiM0MzsJLyoKJiM0MzsJICogUlRMODcyM0JTIGtlZXBzIHJhaXNpbmcgdGhlIGludGVycnVwdCBhZnRlciByZXN1bWUgaWYgdW5kZWZpbmVkCiYjNDM7CSAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpcwomIzQzOwkgKiBkcml2ZXIgZGVmaW5lcy4gT3RoZXIgY2hpcHMga2VlcCB0aGUgZXhpc3RpbmcgYmVoYXZpb3VyLgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkKJiM0MzsJCWhpc3IgJmFtcDs9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSzsKJiM0MzsKIAlydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGhpc3IpOwogCiAJcnR3c2Rpby0mZ3Q7aXJxX3RocmVhZCA9IE5VTEw7CkBAIC0xMjMxLDMzICYjNDM7MTYxOCw4MSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKIAlpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKLQkJCQkgICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQomIzQzOy8qCiYjNDM7ICogU2VuZCBvbmUgZnJhbWUgZnJvbSBAcXVldWUuIFJldHVybnMgMCB3aGVuIGEgZnJhbWUgd2FzIHdyaXR0ZW4sIDEgd2hlbiB0aGUKJiM0MzsgKiBxdWV1ZSB3YXMgZW1wdHkgYW5kIGEgbmVnYXRpdmUgZXJybm8gd2hlbiB0aGUgd3JpdGUgZmFpbGVkLCBpbiB3aGljaCBjYXNlCiYjNDM7ICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKQogewogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAJc3RydWN0IHNrX2J1ZmYgKnNrYjsKJiM0MzsJdTE2IHFfbWFwOwogCWludCByZXQ7CiAKIAlza2IgPSBza2JfZGVxdWV1ZSgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSk7CiAJaWYgKCFza2IpCi0JCXJldHVybjsKJiM0MzsJCXJldHVybiAxOwogCiYjNDM7CXFfbWFwID0gc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYik7CiAJcmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpOwogCWlmIChyZXQpIHsKIAkJc2tiX3F1ZXVlX2hlYWQoJmFtcDtydHdzZGlvLSZndDt0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7Ci0JCXJldHVybjsKJiM0MzsJCXJldHVybiByZXQ7CiAJfQogCiAJcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTsKJiM0MzsKJiM0MzsJcnR3X3NkaW9fODcyM2JzX3dha2VfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSwgcV9tYXApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvCiYjNDM7ICogYXJyYW5nZSBpdCBhbmQgdGVsbCB0aGUgY2FsbGVyIHRvIHN0b3AgZHJhaW5pbmcuIFR3byBjYXNlcyBuZWVkIGl0LgomIzQzOyAqCiYjNDM7ICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmUKJiM0MzsgKiB0cmFuc2llbnQgYW5kIGxlYXZlIHRoZSBmcmFtZSBxdWV1ZWQsIHNvIGNvbWUgYmFjayBmb3IgaXQgc2hvcnRseS4gVGhhdAomIzQzOyAqIG1hdHRlcnMgb25jZSB0aGUgbWFjODAyMTEgcXVldWUgY2FuIGJlIHN0b3BwZWQ6IGEgc3RvcHBlZCBxdWV1ZSBpcyBoYW5kZWQKJiM0MzsgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3MKJiM0MzsgKiBjYXRlZ29yeSB3b3VsZCBzdGF5IHN0b3BwZWQgZm9yIGdvb2QuIFRoZSByZW1haW5pbmcgZXJyb3JzIGFyZSBsb2dnZWQgd2hlcmUKJiM0MzsgKiB0aGV5IGhhcHBlbiBhbmQgYXJlIG5vdCByZXRyaWVkLgomIzQzOyAqCiYjNDM7ICogQWZ0ZXIgYSBtYW5hZ2VtZW50IGZyYW1lLCByZXN0YXJ0IGZyb20gdGhlIGhpZ2hlc3QgcHJpb3JpdHkgcXVldWUgc28gdGhlCiYjNDM7ICogam9pbiBzZXF1ZW5jZSBpcyBub3QgaGVsZCB1cCBiZWhpbmQgYSBkYXRhIGJhY2tsb2cuCiYjNDM7ICovCiYjNDM7c3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwKJiM0MzsJCQkJCSAgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhLAomIzQzOwkJCQkJICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLCBpbnQgcmV0KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKJiM0MzsJdW5zaWduZWQgbG9uZyBkZWxheTsKJiM0MzsKJiM0MzsJaWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChyZXQgPT0gLUVCVVNZIHx8IHJldCA9PSAtRU5PTUVNKQomIzQzOwkJZGVsYXkgPSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWTsKJiM0MzsJZWxzZSBpZiAocmV0ID09IDAgJmFtcDsmYW1wOyBxdWV1ZSA9PSBSVFdfVFhfUVVFVUVfTUdNVCkKJiM0MzsJCWRlbGF5ID0gMDsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby0mZ3Q7dHh3cSwgJmFtcDt3b3JrX2RhdGEtJmd0O3dvcmssIGRlbGF5KTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9Ci0JCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTsKJiM0MzsJCWNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsCiYjNDM7CQkJICAgICB3b3JrKTsKIAlzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW87CiAJc3RydWN0IHJ0d19kZXYgKnJ0d2RldjsKLQlpbnQgbGltaXQsIHF1ZXVlOwomIzQzOwlpbnQgbGltaXQsIHF1ZXVlLCByZXQ7CiAKIAlydHdkZXYgPSB3b3JrX2RhdGEtJmd0O3J0d2RldjsKIAlydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi0mZ3Q7cHJpdjsKQEAgLTEyNjcsNyAmIzQzOzE3MDIsMTMgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fdHhfaGFuZGxlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiAKIAlmb3IgKHF1ZXVlID0gUlRLX01BWF9UWF9RVUVVRV9OVU0gLSAxOyBxdWV1ZSAmZ3Q7PSAwOyBxdWV1ZS0tKSB7CiAJCWZvciAobGltaXQgPSAwOyBsaW1pdCAmbHQ7IDEwMDA7IGxpbWl0JiM0MzsmIzQzOykgewotCQkJcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTsKJiM0MzsJCQlyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpOwomIzQzOwkJCWlmIChyZXQgJmd0OyAwKQomIzQzOwkJCQlicmVhazsKJiM0MzsKJiM0MzsJCQlpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsCiYjNDM7CQkJCQkJCSAgcXVldWUsIHJldCkpCiYjNDM7CQkJCXJldHVybjsKIAogCQkJaWYgKHNrYl9xdWV1ZV9lbXB0eSgmYW1wO3J0d3NkaW8tJmd0O3R4X3F1ZXVlW3F1ZXVlXSkpCiAJCQkJYnJlYWs7CkBAIC0xMjk0LDE0ICYjNDM7MTczNSwxOCBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2luaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldikKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JZm9yIChpID0gMDsgaSAmbHQ7IFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOykKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO3J0d3NkaW8tJmd0O3R4X2NyZWRpdF9sb2NrKTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpJiM0MzsmIzQzOykgewogCQlza2JfcXVldWVfaGVhZF9pbml0KCZhbXA7cnR3c2Rpby0mZ3Q7dHhfcXVldWVbaV0pOwomIzQzOwkJcnR3c2Rpby0mZ3Q7dHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlOwomIzQzOwl9CiAJcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhID0ga21hbGxvY19vYmooKnJ0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YSk7CiAJaWYgKCFydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpCiAJCWdvdG8gZXJyX2Rlc3Ryb3lfd3E7CiAKIAlydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3J0d2RldiA9IHJ0d2RldjsKLQlJTklUX1dPUksoJmFtcDtydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEtJmd0O3dvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3J0d3NkaW8tJmd0O3R4X2hhbmRsZXJfZGF0YS0mZ3Q7d29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTMxNSw2ICYjNDM7MTc2MCw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2RlaW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KQogCXN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtJmd0O3ByaXY7CiAJaW50IGk7CiAKJiM0MzsJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZhbXA7cnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShydHdzZGlvLSZndDt0eHdxKTsKIAlrZnJlZShydHdzZGlvLSZndDt0eF9oYW5kbGVyX2RhdGEpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaCBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCmluZGV4IDQ1N2U4YjAyMzgwZTUuLjZlN2U2MDA5NzQ0YjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oCkBAIC0yMiw2ICYjNDM7MjIsNyBAQAogCiAvKiBTRElPIFR4IENvbnRyb2wgKi8KICNkZWZpbmUgUkVHX1NESU9fVFhfQ1RSTAkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMDApCiYjNDM7I2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkUJQklUKDQpCiAKIC8qU0RJTyBzdGF0dXMgdGltZW91dCovCiAjZGVmaW5lIFJFR19TRElPX1RJTUVPVVQJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDAyKQpAQCAtNzcsNiAmIzQzOzc4LDE0IEBACiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovCiAjZGVmaW5lIFJFR19TRElPX0hJU1JfTUNVX0VSUgkJCUJJVCgyOCkKICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFCQlCSVQoMjkpCiYjNDM7I2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0sJCVwKJiM0MzsJKFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXAomIzQzOwkgUkVHX1NESU9fSElTUl9UWEZPVlcgfCBSRUdfU0RJT19ISVNSX1JYRk9WVyB8IFwKJiM0MzsJIFJFR19TRElPX0hJU1JfVFhCQ05PSyB8IFJFR19TRElPX0hJU1JfVFhCQ05FUlIgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0NQV00yIHwgUkVHX1NESU9fSElTUl9IU0lTUl9JTkQgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX0dUSU5UM19JTkQgfCBSRUdfU0RJT19ISVNSX0dUSU5UNF9JTkQgfCBcCiYjNDM7CSBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKQogCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlICovCiAjZGVmaW5lIFJFR19TRElPX0hDUFdNCQkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMTkpCkBAIC04Niw2ICYjNDM7OTUsMTAgQEAKICNkZWZpbmUgUkVHX1NESU9fT1FUX0ZSRUVfUEcJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDFFKQogLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqLwogI2RlZmluZSBSRUdfU0RJT19GUkVFX1RYUEcJCQkoU0RJT19MT0NBTF9PRkZTRVQgJiM0MzsgMHgwMDIwKQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19ISUdICQkJR0VOTUFTSyg3LCAwKQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUwJCQlHRU5NQVNLKDE1LCA4KQomIzQzOyNkZWZpbmUgQklUX0ZSRUVfVFhQR19MT1cJCQlHRU5NQVNLKDIzLCAxNikKJiM0MzsjZGVmaW5lIEJJVF9GUkVFX1RYUEdfUFVCCQkJR0VOTUFTSygzMSwgMjQpCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDEgKi8KICNkZWZpbmUgUkVHX1NESU9fSENQV00xCQkJCShTRElPX0xPQ0FMX09GRlNFVCAmIzQzOyAweDAwMjQpCiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi8KQEAgLTE0Myw3ICYjNDM7MTU2LDcgQEAgc3RydWN0IHJ0d19zZGlvX3R4X2RhdGEgewogfTsKIAogc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSB7Ci0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcms7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAlzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2OwogfTsKIApAQCAtMTU5LDYgJiM0MzsxNzIsMTUgQEAgc3RydWN0IHJ0d19zZGlvIHsKIAlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTsKIAlzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7CiAJc3RydWN0IHNrX2J1ZmZfaGVhZCB0eF9xdWV1ZVtSVEtfTUFYX1RYX1FVRVVFX05VTV07CiYjNDM7CWJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07CiYjNDM7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfaGlnaDsKJiM0MzsJYXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7CiYjNDM7CWF0b21pY190IGZyZWVfcGdfbG93OwomIzQzOwlhdG9taWNfdCBmcmVlX3BnX3B1YjsKJiM0MzsJYXRvbWljX3QgdHhfb3F0X2ZyZWU7CiYjNDM7CS8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi8KJiM0MzsJc3RydWN0IG11dGV4IHR4X2NyZWRpdF9sb2NrOwogfTsKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvdHguYwppbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jCkBAIC0yMDgsOCAmIzQzOzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKQogCV9fc2tiX3F1ZXVlX3RhaWwoJmFtcDt0eF9yZXBvcnQtJmd0O3F1ZXVlLCBza2IpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0eF9yZXBvcnQtJmd0O3FfbG9jaywgZmxhZ3MpOwogCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKIAkJdGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7CiAKIAltb2RfdGltZXIoJmFtcDt0eF9yZXBvcnQtJmd0O3B1cmdlX3RpbWVyLCBqaWZmaWVzICYjNDM7IHRpbWVvdXQpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI5MQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDE0MTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRXZhbHVhdGlvbiBvZiB0aGUgcnR3ODggUGF0Y2ggU2VyaWVzIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIHNvIEkgbmVlZCB0byBhc3Nlc3MgdGhpcyBwYXRjaCBzZXJpZXMgdG8gZGV0ZXJtaW5lIGlmIHRoZSBjaGFuZ2VzIHdhcnJhbnQgZnV6emluZyBlZmZvcnRzLiBJdCBzZWVtcyB0byBiZSBtb2RpZnlpbmcgdGhlIGBydHc4OGAgd2lyZWxlc3MgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYWRkaW5nIHN1cHBvcnQgb3IgZml4aW5nIGxvZ2ljIGZvciB0aGUgYFJUV19DSElQX1RZUEVfODcyM0JgIGNoaXAgb3ZlciBTRElPLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgd2hhdCB0aGlzIG1lYW5zIGZvciByZWFjaGFiaWxpdHkgaW4gYSB2aXJ0dWFsaXplZCBmdXp6aW5nIGVudmlyb25tZW50LiBUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIGZpbGVzOiBgbWFpbi5oYCwgYHJ4LmNgLCBgc2Rpby5jYCwgYHNkaW8uaGAsIGFuZCBgdHguY2AsIGFsbCB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LgoKVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGlwIHR5cGUsIGhlbHBlciBmdW5jdGlvbnMsIG1vZGlmeWluZyBSWCBwYWNrZXQgc2l6ZSBjaGVja3MsIGFuZCBhZGRpbmcgU0RJTy1zcGVjaWZpYyBUWCBGSUZPIGJhY2stcHJlc3N1cmUsIHBhZ2UgdHJhY2tpbmcsIE9RVCB3YWl0IGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGBydHdfc2Rpb190eF9oYW5kbGVyYCBhbmQgYWRkaW5nIG5ldyBgX3N0b3BfdHhfcXVldWVgIGFuZCBgX3dha2VfdHhfcXVldWVgIGZ1bmN0aW9ucy4KCk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIHdoZXRoZXIgdGhpcyBpcyByZWFjaGFibGUuIEl0JiMzOTtzIGEgUmVhbHRlayB3aXJlbGVzcyBkcml2ZXIsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBkZXBlbmRlbmN5LiBUaGUgY29kZSB0b3VjaGVzIFNESU8gZmlsZXMgYW5kIG1lbnRpb25zIGFuIGA4NzIzQlNgIGNoaXAsIHNvIGl0JiMzOTtzIGEgc3BlY2lmaWMgU0RJTyBjYXJkLiBDYW4gd2UgZW11bGF0ZSBTRElPIGRldmljZXMgZWZmZWN0aXZlbHkgaW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/IFN5emthbGxlciBkb2VzbiYjMzk7dCBuYXRpdmVseSBlbXVsYXRlIFNESU8sIGFsdGhvdWdoIHRoZXJlIGFyZSBvcHRpb25zIGxpa2UgYG1hYzgwMjExX2h3c2ltYCBmb3IgbWFjODAyMTEvY2ZnODAyMTEtYmFzZWQgZHJpdmVycyBidXQgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIGRyaXZlciAoYHJ0dzg4YCkuCgpUaGUgcHJvbXB0IGhhcyBhIHNwZWNpZmljIGNsYXVzZSBhYm91dCBub3QgZnV6emluZyB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIERvZXMgdGhpcyBhcHBseSBoZXJlPyBIYXJkd2FyZS1zcGVjaWZpYyBXaS1GaSBkcml2ZXJzIG9mdGVuIGZhbGwgaW50byBhIHNpbWlsYXIgY2F0ZWdvcnksIHVubGVzcyB0aGV5IGhhdmUgYSBVU0IgaW50ZXJmYWNlLiBEb2VzIGBydHc4OGAgaGF2ZSBVU0Igc3VwcG9ydD8gTGV0IG1lIGNoZWNrLgoKVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCwgc28gaXQmIzM5O3MgU0RJTy1jZW50cmljLiBUaGUgbmV3IGhlbHBlciBmdW5jdGlvbiBgcnR3X2lzXzg3MjNicygpYCBjaGVja3MgZm9yIGBydHdkZXYtJmd0O2hjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPYCwgY29uZmlybWluZyB0aGUgU0RJTyBkZXBlbmRlbmN5LiBDYW4gU0RJTyBpdHNlbGYgYmUgZW11bGF0ZWQ/IEkmIzM5O2QgbmVlZCB0byBsb29rIGludG8gd2hldGhlciB0aGVyZSYjMzk7cyBhbnkgU0RJTyBlbXVsYXRpb24gaW4gc3l6a2FsbGVyIG9yIFFFTVUuIFVzdWFsbHksIFNESU8gaXNuJiMzOTt0IGVhc2lseSByZWFjaGFibGUgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZS4KCkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCB0aGUgY2hhbmdlcyBpbiBgdHguY2AgYW5kIGByeC5jYCBhZGQgdGhlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGNoZWNrLCB3aGljaCByZWluZm9yY2VzIHRoZSBTRElPLW9ubHkgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIEFsbCBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gc3BlY2lmaWMgdG8gYFJUV19DSElQX1RZUEVfODcyM0JgIHdpdGggYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNESU8gZHJpdmVyLCBpdCByZWFsbHkgZG9lcyByZXF1aXJlIHRoZSBwaHlzaWNhbCBSZWFsdGVrIFdpLUZpIGNoaXAgYW5kIFNESU8gY2FyZCB0byBmdW5jdGlvbi4KCkRvZXMgUUVNVSBoZWxwIGhlcmU/IFFFTVUgaGFzIGBzZGhjaS1wY2lgLCBidXQgcmVhY2hpbmcgdGhlIHByb2JlIGFuZCBsYXRlciBsb2dpYyByZXF1aXJlcyBhIHZlcnkgc3BlY2lmaWMgUmVhbHRlayBTRElPIGNhcmQgdG8gYmUgZW11bGF0ZWQsIHdoaWNoIGlzbiYjMzk7dCB0aGUgY2FzZSBmb3IgdGhlIFJUTDg3MjNCUy4gQXJlIHRoZXJlIGFueSBzb2Z0d2FyZSBmcmFtZXdvcmtzIGluIExpbnV4IHRvIGluamVjdCBTRElPIGRldmljZXM/IFVubGlrZSBVU0ImIzM5O3MgYGR1bW15X2hjZGAsIHRoZXJlJiMzOTtzIG5vIGB2aGNpYCBlcXVpdmFsZW50IGZvciBTRElPLCBzbyBpdCYjMzk7cyBnZW5lcmFsbHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCB3aXRob3V0IHNwZWNpZmljIGhhcmR3YXJlIGVtdWxhdGlvbiwgd2hpY2ggZG9lc24mIzM5O3QgZXhpc3QgZm9yIHRoaXMgZHJpdmVyLgoKSSBuZWVkIHRvIGNvbmZpcm0gYnkgc2VhcmNoaW5nIGZvciBhbnkgU0RJTyBmdXp6aW5nIHN1cHBvcnQsIGJ1dCBiYXNlZCBvbiBteSBleHBlcmllbmNlIGFuZCBpbml0aWFsIGZpbmRpbmdzLCB0aGlzIHBhdGNoIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBmdXp6aW5nIGluIG91ciBzdGFuZGFyZCBlbnZpcm9ubWVudCBiZWNhdXNlIG9mIHRoZSByZXF1aXJlZCBoYXJkd2FyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydHdfc2Rpb19wcm9iZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYy0yMy1cdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jLTI4LVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmMtMzAtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMWNzX2RyaXZlciA9IHtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYzoyNDpcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYy0yNS1cdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIyYnNfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYy0yMy1cdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jOjI0Olx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jLTIzLVx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmMtMjUtXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTE3NTg9c3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTc3MC1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE3NzE6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzItXHRcdCAgIGNvbnN0IHN0cnVjdCBzZGlvX2RldmljZV9pZCAqaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0NS19XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzoxODQ2OkVYUE9SVF9TWU1CT0wocnR3X3NkaW9fcHJvYmUpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0Ny1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaD0xODY9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oOjE4ODppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmgtMTg5LVx0XHQgICBjb25zdCBzdHJ1Y3Qgc2Rpb19kZXZpY2VfaWQgKmlkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjgwOQoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDExNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIHJ0d19zZGlvX3Byb2JlIEZ1bmN0aW9uKioKCk9rYXksIHNvIGBydHdfc2Rpb19wcm9iZWAgaXMgZXhwb3J0ZWQsIG1lYW5pbmcgaXQmIzM5O3MgZnVuZGFtZW50YWwgYW5kIHVzZWQgYWNyb3NzIG11bHRpcGxlIGRyaXZlcnMuIExldCYjMzk7cyBzZWUuLi4gYHJ0dzg3MjNjc2AsIGBydHc4NzIzZHNgLCBgcnR3ODgyMWNzYCwgYHJ0dzg4MjJic2AsIGFuZCBgcnR3ODgyMmNzYCBhbGwgbGV2ZXJhZ2UgaXQuIFRoYXQmIzM5O3MgYSBkZWNlbnQgcmFuZ2Ugb2YgQnJvYWRjb20vUmVhbHRlayBXaS1GaSBjaGlwcy4gSW50ZXJlc3RpbmcuIE5vdywgdGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBjb25zdGFudCBhbmQgYSBoZWxwZXIgZnVuY3Rpb24gYHJ0d19pc184NzIzYnMoKWAuIFRoZSBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgaWYgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIG5ldyBkcml2ZXIgZmlsZS4gSXMgdGhlcmUgYW4gYHJ0dzg3MjNicy5jYD8gR290dGEgdmVyaWZ5IHRoYXQuIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3J0dzg3MjNicyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcxNTkKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgUlRXX0NISVBfVFlQRV84NzIzQmAgaW50byB0aGUgYHJ0d19jaGlwX3R5cGVgIGVudW0uICBOb3RoaW5nIGluaGVyZW50bHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgdGhlbiBkZWZpbmVzIGBydHdfaXNfODcyM2JzKClgLCB3aGljaCB1c2VzIHRoZSBuZXcgZW51bSB2YWx1ZSBhbG9uZ3NpZGUgYSBjaGVjayBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQ7IGl0JiMzOTtzIHNwZWNpZmljIHRvIHRoZSA4NzIzQiBjaGlwIGFuZCBhIHBhcnRpY3VsYXIgSG9zdCBDb250cm9sbGVyIEludGVyZmFjZS4gSXQmIzM5O3MgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCB3aG8gdXNlcyB0aGlzIGNoZWNrPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBmaWxlcyBpbiB0aGUgY29kZWJhc2Ugbm93IHJlbHkgb24gYFJUV19DSElQX1RZUEVfODcyM0JgLiBGaW5kaW5nIHdoZXJlIGBydHdfaXNfODcyM2JzKClgIGlzIGludm9rZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgYWRkaXRpb24gcHJvYmFibHkgYWRkcmVzc2VzIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCBvciBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB0YXJnZXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRXX0NISVBfVFlQRV84NzIzQiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaD0xOTE9ZW51bSBydHdfY2hpcF90eXBlIHtcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg6MTk3Olx0UlRXX0NISVBfVFlQRV84NzIzQixcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTE5OC1cdFJUV19DSElQX1RZUEVfODgyMUEsXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MjE5OD1zdGF0aWMgaW5saW5lIGJvb2wgcnR3X2lzXzg3MjNicyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmgtMjE5OS17XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlx0cmV0dXJuIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXHUwMDI2XHUwMDI2XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVx0ICAgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJTztcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYz05MzE9c3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVx0c3dpdGNoIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6OTM2Olx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MjNCOlxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDEzCgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogNjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGlnZ2luZyBpbnRvIHRoZSBDb2RlOiBXaGVyZSYjMzk7cyBUaGF0IENoaXAgSUQ/KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgaGF2ZSBhIHF1aWNrIHF1ZXN0aW9uOiB3aGVyZSBleGFjdGx5IGlzIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBhY3R1YWxseSBiZWluZyBhc3NpZ25lZCB0byBgcnR3ZGV2LSZndDtjaGlwLSZndDtpZGA/IEl0JiMzOTtzIG5vdCBpbW1lZGlhdGVseSBvYnZpb3VzLCBhbmQgdGhhdCBtYWtlcyBtZSBhIGxpdHRsZSB1bmVhc3kuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhIGZsb3cgaGVyZS4gTGV0JiMzOTtzIGRvIGEgcXVpY2sgc2VhcmNoLiBQZXJoYXBzIHRoaXMgY29uc3RhbnQgaXNuJiMzOTt0IGRlZmluZWQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodCBhbmQgaXMgaGlkaW5nIHNvbWV3aGVyZSBlbHNlLCBtYXliZSB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LiBMZXQmIzM5O3MgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7UlRXX0NISVBfVFlQRV84NzIzQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTE5MT1lbnVtIHJ0d19jaGlwX3R5cGUge1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTE5Ni1cdFJUV19DSElQX1RZUEVfODcwM0IsXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XHRSVFdfQ0hJUF9UWVBFXzg3MjNCLFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmgtMTk4LVx0UlRXX0NISVBfVFlQRV84ODIxQSxcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaD0yMTk4PXN0YXRpYyBpbmxpbmUgYm9vbCBydHdfaXNfODcyM2JzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oOjIyMDA6XHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oLTIyMDEtXHQgICAgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jPTkzMT1zdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy05MzUtXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYzo5MzY6XHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYy05MzctXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzU2CgkJCQkJCQlvdXRwdXQ6IDE4CgkJCQkJCQl0aG91Z2h0czogMTU0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBvdGVudGlhbCBJbXBhY3Qgb2YgYSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYFJUV19DSElQX1RZUEVfODcyM0JgIGlzbiYjMzk7dCBhc3NpZ25lZCBhbnl3aGVyZSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgKnRoaXMqIHBhdGNoLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgZGVmaW5lZCBhbmQgYXNzaWduZWQgZWxzZXdoZXJlLCBwZXJoYXBzIGluIGFuIGVhcmxpZXIgcGF0Y2ggaW4gdGhlIHNlcmllcy4gSG93ZXZlciwgc2luY2UgSSBvbmx5IGhhdmUgKnRoaXMqIHBhdGNoIHRvIHdvcmsgd2l0aCwgaXQgbWFrZXMgbWUgdGhpbmsgdGhhdCBgcnR3X2lzXzg3MjNicygpYCB3b3VsZCBhbHdheXMgcmV0dXJuIGZhbHNlLiBJIGRpZCBhIHF1aWNrIGdyZXBwaW5nIHRvIHZlcmlmeSBpZiB0aGUgZGVmaW5pdGlvbiBpcyB1c2VkIGFueXdoZXJlIGVsc2UgYW5kIG5vdGhpbmcgY2FtZSB1cC4gTm93IEkgbmVlZCB0byBjb25zaWRlciB3aGV0aGVyIGl0JiMzOTtzIGFzc2lnbmVkIGluIGEgcm91bmRhYm91dCB3YXksIGxpa2UgYGlkID09IDBgLCBidXQgaXQmIzM5O3MgYW4gZW51bSwgc28gdGhhdCYjMzk7cyBub3QgdGhlIGNhc2UuCgpJIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhhdCAqZG9uJiMzOTt0KiBkZXBlbmQgb24gYHJ0d19pc184NzIzYnMoKWAuIEkgc2VlIGluIGB0eC5jYCBhbmQgYHJ4LmNgIHRoYXQgdGhlIGNoYW5nZXMgbWFkZSB0aGVyZSBhcmUgY29uZGl0aW9uYWwgb24gYHJ0d19pc184NzIzYnMoKWAsIHNvIEkgY2FuJiMzOTt0IGxvb2sgYXQgdGhlbSBub3cuCgpIb3dldmVyLCBpbiBgc2Rpby5jYCwgSSBzZWUgYSBzZWN0aW9uIG9mIGNvZGUgdGhhdCAqZG9lc24mIzM5O3QqIGRlcGVuZCBvbiBgcnR3X2lzXzg3MjNicygpYC4gVGhlcmUgYXJlIHN1YnN0YW50aWFsIGNoYW5nZXMgaGVyZTogdGhlIHdvcmsgaXRlbSBgcnR3c2Rpby0mZ3Q7dHhfaGFuZGxlcl9kYXRhLSZndDt3b3JrYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYSBgd29ya19zdHJ1Y3RgIHRvIGEgYGRlbGF5ZWRfd29ya2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgY29yZSBoYW5kbGluZyBvZiBTRElPIHRyYW5zYWN0aW9ucy4gSXQgYWxzbyBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGFjY291bnQgZm9yIHRoZSB3b3JrIHN0cnVjdCBjaGFuZ2UuIEkgbm90ZSB0aGF0IGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBub3cgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLgoKRGl2aW5nIGRlZXBlciwgd2l0aGluIGBydHdfc2Rpb190eF9oYW5kbGVyYCwgaXQgbG9va3MgbGlrZSB0aGUgbG9vcCBjb25kaXRpb24gaGFzIGNoYW5nZWQgYW5kIG5vdyBicmVha3Mgb3V0IG9mIGEgbG9vcCBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYC4gU28sIGluc3RlYWQgb2YgcmV0dXJuaW5nIHZvaWQgYW5kIHRoZW4gdGVzdGluZyBhIHF1ZXVlJiMzOTtzIGVtcHRpbmVzcywgaXQgY2hlY2tzIHRoZSByZXR1cm4gb2YgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLgoKTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgKmFsbCogU0RJTyBjaGlwcz8gVGhlIGNvZGUgaGl0cyBhbGwgU0RJTyBjaGlwcyBiZWNhdXNlIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgVFggcXVldWUgaXMgcHJvY2Vzc2VkLiBJZiBgcmV0ICZndDsgMGAsIGl0IGJyZWFrcyB0aGUgaW5uZXIgbG9vcC4gUHJldmlvdXNseSwgaXQgZGlkbiYjMzk7dCB1c2UgYW4gZXhwbGljaXQgcmV0dXJuIGNvZGUuCgpUaGlzIGlzIGEga2V5IHBvaW50LCBidXQgaGVyZSYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gdGhpbmsgY3JpdGljYWxseTogY2FuIEkgZXZlbiAqdHJpZ2dlciogdGhpcyBjb2RlIHBhdGg/IFNESU8gZGV2aWNlcyBhcmVuJiMzOTt0IHVzdWFsbHkgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4gVGhleSByZXF1aXJlIHNwZWNpZmljIGhhcmR3YXJlLCBzbyBpdCBpcyBwcm9iYWJseSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBDYW4gSSBpbmplY3QgU0RJTyBpbiBzb2Z0d2FyZT8gVGhlcmUmIzM5O3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0JiMzOTtzIGlycmVsZXZhbnQgaGVyZS4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgYHJ0dzg4YCBkcml2ZXIgcmVnaXN0ZXJzIGFuIFNESU8gZHJpdmVyLiBZZXMsIGl0IHJlZ2lzdGVycyBgcnR3X3NkaW9fcHJvYmVgLiBUbyBwcm9iZSwgdGhlIGtlcm5lbCBuZWVkcyB0byBkZXRlY3QgYW4gU0RJTyBkZXZpY2Ugd2l0aCB0aGUgcmlnaHQgdmVuZG9yL2RldmljZSBJRHMuIE1NQyBzdWJzeXN0ZW1zIGVudW1lcmF0ZSBTRElPIGRldmljZXMuIERvZXMgc3l6a2FsbGVyIGRvIHRoaXM/IE5vLCBpdCBoYXMgbm8gYHZoY2lgIGZvciBNTUMvU0RJTy4gVGhlcmUgaXNuJiMzOTt0IGFueSBgZHVtbXlfbW1jYCBvciBgcmF3X3NkaW9gIGRyaXZlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIGZvciBhcmJpdHJhcnkgU0RJTyBkZXZpY2UgaW5qZWN0aW9uIGZyb20gdXNlcnNwYWNlLiBJJiMzOTtsbCBuZWVkIHRvIHZlcmlmeSB0aGF0IHRoZXJlJiMzOTtzIG5vIE1NQy9TRElPIGVtdWxhdGlvbiBkcml2ZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHVtbXlfbW1jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExMTgKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHdlbnQ6CgoqKkV4YW1pbmluZyB0aGUgTU1DIEhvc3QgRHJpdmVycyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdHJhY2sgZG93biBzb21ldGhpbmcgcmVsYXRlZCB0byBgc2Rpb2AsIGxpa2VseSB3aXRoaW4gdGhlIE1NQyBob3N0IGRyaXZlcnMuIE15IGZpcnN0IGluc3RpbmN0LCBnaXZlbiBteSBleHBlcmllbmNlLCBpcyB0byB6ZXJvIGluIG9uIHRoZSBgZHJpdmVycy9tbWMvaG9zdC9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgY29yZSBTRElPIGNvbnRyb2xsZXIgY29kZSwgZHJpdmVyIGludGVyZmFjZSwgYW5kIHJlbGF0ZWQgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsLiBJdCYjMzk7cyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIE1NQyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW5kIHRoZXJlZm9yZSBhIHZlcnkgbGlrZWx5IHNwb3QgZm9yIGFueXRoaW5nIFNESU8tcmVsYXRlZCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNESU8gcHJvdG9jb2wmIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgTU1DIGhvc3QgaGFyZHdhcmUgd291bGQgcmVzaWRlLiBMZXQmIzM5O3Mgc3RhcnQgdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NkaW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL21tYy9ob3N0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgMTg0OSBsaW5lcy5cblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cblxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnPTY1OT1jb25maWcgTU1DX01WU0RJT1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxuZHJpdmVycy9tbWMvaG9zdC9LY29uZmlnOjY2OTpcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NzAtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXHQmIzQzOz0gdGlmbV9zZC5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjM1Om9iai0kKENPTkZJR19NTUNfTVZTRElPKVx0JiM0Mzs9IG12c2Rpby5vXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTM2LW9iai0kKENPTkZJR19NTUNfREFWSU5DSSkgICAgICAgJiM0Mzs9IGRhdmluY2lfbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcdCYjNDM7PSBtZXNvbi1teC1zZGhjLm9cbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGU6Njk6b2JqLSQoQ09ORklHX01NQ19NRVNPTl9NWF9TRElPKVx0JiM0Mzs9IG1lc29uLW14LXNkaW8ub1xuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZS03MC1vYmotJChDT05GSUdfTU1DX01PWEFSVClcdCYjNDM7PSBtb3hhcnQtbW1jLm9cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9ob3N0LmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MzA6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0zMS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4Ny0gKiBAc2RjX3JlZzogVmFsdWUgb2YgU0RDUiB0byBiZSB3cml0dGVuIGJlZm9yZSB1c2luZyB0aGlzIHNsb3QuXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg5LSAqIEBtcnE6IG1tY19yZXF1ZXN0IGN1cnJlbnRseSBiZWluZyBwcm9jZXNzZWQgb3Igd2FpdGluZyB0byBiZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy00MDUtXHR1MzJcdFx0XHRzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzo0MDY6XHR1MzJcdFx0XHRzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU0NT1zdGF0aWMgaW50IGF0bWNpX2dldF9jZChzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NTk6c3RhdGljIHZvaWQgYXRtY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjQtXHRpZiAoZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoxNTY1Olx0XHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2Ni1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NzpcdFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NjgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MTU3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdG1jaV9vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVx0LmdldF9jZFx0XHQ9IGF0bWNpX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU3NTpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdG1jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIwMTE9c3RhdGljIHZvaWQgYXRtY2lfd3JpdGVfZGF0YV9waW8oc3RydWN0IGF0bWVsX21jaSAqaG9zdClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwNzgtXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwNzk6c3RhdGljIHZvaWQgYXRtY2lfc2Rpb19pbnRlcnJ1cHQoc3RydWN0IGF0bWVsX21jaSAqaG9zdCwgdTMyIHN0YXR1cylcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg0LVx0XHRzdHJ1Y3QgYXRtZWxfbWNpX3Nsb3QgKnNsb3QgPSBob3N0LVx1MDAzZXNsb3RbaV07XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XHRcdGlmIChzbG90IFx1MDAyNlx1MDAyNiAoc3RhdHVzIFx1MDAyNiBzbG90LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMDg2Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoc2xvdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVx0XHR9XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0yMDkyPXN0YXRpYyBpcnFyZXR1cm5fdCBhdG1jaV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cdFx0aWYgKHBlbmRpbmcgXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjIxNDpcdFx0XHRhdG1jaV9zZGlvX2ludGVycnVwdChob3N0LCBzdGF0dXMpO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjE1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjIzNj1zdGF0aWMgaW50IGF0bWNpX2luaXRfc2xvdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM3LVx0XHRzdHJ1Y3QgbWNpX3Nsb3RfcGRhdGEgKnNsb3RfZGF0YSwgdW5zaWduZWQgaW50IGlkLFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjM4Olx0XHR1MzIgc2RjX3JlZywgdTMyIHNkaW9faXJxKVxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjM5LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNTQtXHRzbG90LVx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjU1Olx0c2xvdC1cdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU2LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cdG1tYy1cdTAwM2VvY3JfYXZhaWxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyNjg6XHRpZiAoc2Rpb19pcnEpXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXHRcdG1tYy1cdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM9Nzc4PXN0YXRpYyBpcnFyZXR1cm5fdCBhdTF4bW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtNzg4LVx0aWYgKHN0YXR1cyBcdTAwMjYgU0RfU1RBVFVTX1NJKVx0LyogU0RJTyAqL1xuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6Nzg5Olx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MDY9c3RhdGljIHZvaWQgYXUxeG1tY19kYmRtYV9zaHV0ZG93bihzdHJ1Y3QgYXUxeG1tY19ob3N0ICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkxNC1cbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkxNTpzdGF0aWMgdm9pZCBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuKVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz05MjU9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXUxeG1tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTI5LVx0LmdldF9jZFx0XHQ9IGF1MXhtbWNfY2FyZF9pbnNlcnRlZCxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jOjkzMDpcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkzMS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jOjk6ICogVGhlIHNkaGNpIGNvbnRyb2xsZXIgc3VwcG9ydHMgYm90aCBzZGNhcmQgYW5kIHNkaW8uICBUaGUgc2Rob3N0XG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYy0xMC0gKiBjb250cm9sbGVyIHN1cHBvcnRzIHRoZSBzZGNhcmQgb25seSwgYnV0IGhhcyBiZXR0ZXIgcGVyZm9ybWFuY2UuXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxuZHJpdmVycy9tbWMvaG9zdC9iY20yODM1LmMtMTItICogdGhlIHNkaG9zdCBjb250cm9sbGVyIGFsbG93cyB0byB1c2UgdGhlIHNkaGNpIGNvbnRyb2xsZXIgZm9yIHdpZmlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTczLVx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE3NDpcdGludCBtbWNfaXJxLCBzZGlvX2lycTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXHR1bnNpZ25lZCBjaGFyIGJ1c19tb2RlO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXHRib29sIGRvX2RtYTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxODg6XHRib29sIHNkaW9faW50O1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTE4OS1cdGJvb2wgYWN0aXZlX3JlcXVlc3Q7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTc1Nj1tbWNfZGF2aW5jaV94ZmVyX2RvbmUoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XHRcdGlmIChob3N0LVx1MDAzZXNkaW9faW50IFx1MDAyNlx1MDAyNiAhKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9TVDApIFx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2Ny1cdFx0XHRcdFx0U0RJT1NUMF9EQVQxX0hJKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc2OC1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6NzY5Olx0XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTc3MC1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz04MzM9ZGF2aW5jaV9hYm9ydF9kYXRhKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg0MC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NDE6c3RhdGljIGlycXJldHVybl90IG1tY19kYXZpbmNpX3NkaW9faXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NTAtXHRcdHdyaXRlbChzdGF0dXMgfCBTRElPSVNUX0lPSU5ULCBob3N0LVx1MDAzZWJhc2UgJiM0MzsgREFWSU5DSV9TRElPSVNUKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo4NTE6XHRcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cdTAwM2VtbWMpO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cdH1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNC1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cdFx0XHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lTVCk7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTAzMjpcdFx0XHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVx0XHR9IGVsc2Uge1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XHRcdFx0aG9zdC1cdTAwM2VzZGlvX2ludCA9IHRydWU7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzNS1cdFx0XHR3cml0ZWwocmVhZGwoaG9zdC1cdTAwM2ViYXNlICYjNDM7IERBVklOQ0lfU0RJT0lFTikgfFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM4LVx0fSBlbHNlIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5Olx0XHRob3N0LVx1MDAzZXNkaW9faW50ID0gZmFsc2U7XG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0MC1cdFx0d3JpdGVsKHJlYWRsKGhvc3QtXHUwMDNlYmFzZSAmIzQzOyBEQVZJTkNJX1NESU9JRU4pIFx1MDAyNiB+U0RJT0lFTl9JT0lOVEVOLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA0OS1cdC5nZXRfcm9cdFx0PSBtbWNfZGF2aW5jaV9nZXRfcm8sXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcdC5lbmFibGVfc2Rpb19pcnEgPSBtbWNfZGF2aW5jaV9lbmFibGVfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTA1MS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMTg0PXN0YXRpYyBpbnQgZGF2aW5jaV9tbWNzZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVx0aG9zdC1cdTAwM2VtbWNfaXJxID0gaXJxO1xuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XHRob3N0LVx1MDAzZXNkaW9faXJxID0gcGxhdGZvcm1fZ2V0X2lycV9vcHRpb25hbChwZGV2LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMzAxLVxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XHRpZiAoaG9zdC1cdTAwM2VzZGlvX2lycSBcdTAwM2U9IDApIHtcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzAzOlx0XHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBob3N0LVx1MDAzZXNkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDQ6XHRcdFx0XHQgICAgICAgbW1jX2RhdmluY2lfc2Rpb19pcnEsIDAsXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cdFx0XHRcdCAgICAgICBtbWNfaG9zdG5hbWUobW1jKSwgaG9zdCk7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTAzLVx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy1yb2NrY2hpcC5jOjUwNDpcdGhvc3QtXHUwMDNlc2Rpb19pcnEgPSA4O1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDUtXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2QuaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTQ4MD1zdGF0aWMgdm9pZCBkd19tY2lfaHdfcmVzZXQoc3RydWN0IG1tY19ob3N0ICptbWMpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTEzOnN0YXRpYyB2b2lkIGR3X21jaV9wcmVwYXJlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGJvb2wgcHJlcGFyZSlcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTUxNC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQwLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTQxOnN0YXRpYyB2b2lkIF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBpbnQgZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTAtXHRpZiAoZW5iKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTUxOlx0XHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1Mi1cdGVsc2VcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MzpcdFx0aW50X21hc2sgXHUwMDI2PSB+U0RNTUNfSU5UX1NESU8oaG9zdC1cdTAwM2VzZGlvX2lycSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXHRtY2lfd3JpdGVsKGhvc3QsIElOVE1BU0ssIGludF9tYXNrKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTk6c3RhdGljIHZvaWQgZHdfbWNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYilcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2MC17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYyLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTYzOlx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU2NDpcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCBlbmIpO1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3Mi1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTc0LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1Nzc6XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMSk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9MTY3MD1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBkd19tY2lfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTY3Ny1cdC5jYXJkX2h3X3Jlc2V0ICAgICAgICAgID0gZHdfbWNpX2h3X3Jlc2V0LFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4Olx0LmVuYWJsZV9zZGlvX2lycVx0PSBkd19tY2lfZW5hYmxlX3NkaW9faXJxLFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5Olx0LmFja19zZGlvX2lycVx0XHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2ODAtXHQuZXhlY3V0ZV90dW5pbmdcdFx0PSBkd19tY2lfZXhlY3V0ZV90dW5pbmcsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTctXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XHRcdGlmIChwZW5kaW5nIFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVx1MDAzZXNkaW9faXJxKSkge1xuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNzU5LVx0XHRcdG1jaV93cml0ZWwoaG9zdCwgUklOVFNUUyxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcdFx0XHRcdCAgIFNETU1DX0lOVF9TRElPKGhvc3QtXHUwMDNlc2Rpb19pcnEpKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcdFx0XHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NjI6XHRcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cdFx0fVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM9Mjc5ND1zdGF0aWMgaW50IGR3X21jaV9pbml0X2hvc3RfY2FwcyhzdHJ1Y3QgZHdfbWNpICpob3N0KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MjgyNjpcdC8qIFByb2Nlc3MgU0RJTyBJUlFzIHRocm91Z2ggdGhlIHNkaW9faXJxX3dvcmsuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXHRpZiAobW1jLVx1MDAzZWNhcHMgXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0zNDQzPWludCBkd19tY2lfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5NC1cdC8qIFJlLWVuYWJsZSBTRElPIGludGVycnVwdHMuICovXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XHRpZiAoc2Rpb19pcnFfY2xhaW1lZChob3N0LVx1MDAzZW1tYykpXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XHRcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTUyPXN0cnVjdCBkd19tY2lfZG1hX3NsYXZlIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMS0gKiBAaXJxOiBUaGUgaXJxIHZhbHVlIHRvIGJlIHBhc3NlZCB0byByZXF1ZXN0X2lycS5cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MTIyOiAqIEBzZGlvX2lycTogU0RJTyBpbnRlcnJ1cHQgYml0IGluIGludGVycnVwdCByZWdpc3RlcnMuXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oPTE2MT1zdHJ1Y3QgZHdfbWNpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzMy1cbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg6MjM0Olx0aW50XHRcdFx0c2Rpb19pcnE7XG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTIzNS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtODU5LVx0XHRqejQ3NDBfbW1jX3dyaXRlX2lycV9yZWcoaG9zdCwgSlpfTU1DX0lSUV9TRElPKTtcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jOjg2MDpcdFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVx1MDAzZW1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXHRcdGlycV9yZWcgXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTk0MD1zdGF0aWMgdm9pZCBqejQ3NDBfbW1jX3NldF9pb3Moc3RydWN0IG1tY19ob3N0ICptbWMsIHN0cnVjdCBtbWNfaW9zICppb3MpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk0LVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6OTk1OnN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW5hYmxlKVxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz0xMDE4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGp6NDc0MF9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjQtXHQuZ2V0X2NkXHRcdD0gbW1jX2dwaW9fZ2V0X2NkLFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6MTAyNTpcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTEwMjYtXHQuc3RhcnRfc2lnbmFsX3ZvbHRhZ2Vfc3dpdGNoID0gano0NzQwX3ZvbHRhZ2Vfc3dpdGNoLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTIwLSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZC5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzoyMTojaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2Rpby5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMi0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcdTAwM2Vcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz00MTM9c3RhdGljIGlycXJldHVybl90IGxvb25nc29uMl9tbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldmlkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQyOC1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjQyOTpcdFx0c2Rpb19zaWduYWxfaXJxKG1tYyk7XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MzAtXHRcdHJldHVybiBJUlFfSEFORExFRDtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01ODgtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTAte1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjU5NjpzdGF0aWMgdm9pZCBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5Ny17XG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XHRsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIDEpO1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk5LX1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MDE9c3RhdGljIHN0cnVjdCBtbWNfaG9zdF9vcHMgbG9vbmdzb24yX21tY19vcHMgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVx0LmdldF9jZFx0XHQ9IG1tY19ncGlvX2dldF9jZCxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNjpcdC5lbmFibGVfc2Rpb19pcnEgPSBsb29uZ3NvbjJfbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcdC5hY2tfc2Rpb19pcnFcdD0gbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEsXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz02MTc9c3RhdGljIGludCBsb29uZ3NvbjJfcmVvcmRlcl9jbWRfbGlzdFtdID0geyBTRF9BUFBfU0VORF9TQ1IsIFNEX0FQUF9TRU5EX05VTV9XUl9CTEtTLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTYyMi0gKiByZXNwb25zZSBkYXRhcyBoYXMgZGlmZmVyZW50IGJ5dGUgb3JkZXIgd2l0aCB1c3VhbCBkYXRhIHBhY2tldHMuXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MjM6ICogSG93ZXZlciBzZGlvIGNvbnRyb2xsZXIgd2lsbCBzZW5kIHRoZXNlIGRhdGFzIGluIHVzdWFsIGRhdGEgZm9ybWF0LFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTk0MD1zdGF0aWMgaW50IGxvb25nc29uMl9tbWNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy05NzMtXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo5NzQ6XHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTc1LVx0aWYgKG1tYy1cdTAwM2VjYXBzIFx1MDAyNiBNTUNfQ0FQX1NESU9fSVJRKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3Nsb3QtZ3Bpby5oXHUwMDNlXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01My0jZGVmaW5lICAgQ0xLX0FMV0FZU19PTihoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWFsd2F5c19vbilcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVx0XHQoaC1cdTAwM2VkYXRhLVx1MDAzZWlycV9zZGlvX3NsZWVwKVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy01NS1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzNj1zdHJ1Y3QgbWVzb25fbW1jX2RhdGEge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVx0dW5zaWduZWQgaW50IGFkanVzdDtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTQxOlx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xNDItfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMC1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIyLXtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy05NTYtXHRcdHNwaW5fbG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzo5NTc6XHRcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVx1MDAzZW1tYywgMCk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjk1ODpcdFx0c2Rpb19zaWduYWxfaXJxKGhvc3QtXHUwMDNlbW1jKTtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVx0XHRzcGluX3VubG9jayhcdTAwMjZob3N0LVx1MDAzZWxvY2spO1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMDktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExMS17XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2aG9zdC1cdTAwM2Vsb2NrLCBmbGFncyk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTY6XHRfX21lc29uX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCBlbmFibGUpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZob3N0LVx1MDAzZWxvY2ssIGZsYWdzKTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTktXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEyMS17XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjI6XHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjMtfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzMy1cdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMzQ6XHQuZW5hYmxlX3NkaW9faXJxID0gbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcdC5hY2tfc2Rpb19pcnFcdD0gbWVzb25fbW1jX2Fja19zZGlvX2lycSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMwOT1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2d4X2RhdGEgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzEzLVx0LmFkanVzdFx0XHQ9IFNEX0VNTUNfQURKVVNULFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMzE0Olx0LmlycV9zZGlvX3NsZWVwXHQ9IENMS19WMl9JUlFfU0RJT19TTEVFUCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxNS19O1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTMxNz1zdGF0aWMgY29uc3Qgc3RydWN0IG1lc29uX21tY19kYXRhIG1lc29uX2F4Z19kYXRhID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cdC5hZGp1c3RcdFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTMyMjpcdC5pcnFfc2Rpb19zbGVlcFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTEzMjMtfTtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL21tYy5oXHUwMDNlXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXHUwMDNjbGludXgvbW1jL3NkaW8uaFx1MDAzZVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYz0xMzI9c3RhdGljIHZvaWQgbWVzb25fbXhfc2RoY19zdGFydF9jbWQoc3RydWN0IG1tY19ob3N0ICptbWMsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cdFx0ICogZG93bmxvYWQgaW4gdGhlIGJyY21mbWFjIGRyaXZlciBmb3IgYSBCQ000MzM2Mi8xIGNhcmQuXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlx0XHQgKiBXaXRob3V0IHRoaXMgc2Rpb19tZW1jcHlfdG9pbygpICh3aXRoIGEgc2l6ZSBvZiAyMTk1NTdcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXHRcdCAqIGJ5dGVzKSB0aW1lcyBvdXQgaWYgTUVTT05fU0RIQ19NSVNDX01BTlVBTF9TVE9QIGlzIG5vdCBzZXQuXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMi0vKlxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6MzogKiBtZXNvbi1teC1zZGlvLmMgLSBNZXNvbjYsIE1lc29uOCBhbmQgTWVzb244YiBTRElPL01NQyBIb3N0IENvbnRyb2xsZXJcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy0yNy0jaW5jbHVkZSBcdTAwM2NsaW51eC9tbWMvbW1jLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjI4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcdTAwM2VcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFx1MDAzZVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjMwLXtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjYzMTpcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMi1cdFx0LnJlZ19iaXRzID0gOCxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NjgtXHRob3N0LVx1MDAzZXJlZ21hcCA9IGRldm1fcmVnbWFwX2luaXRfbW1pbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgYmFzZSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjY2OTpcdFx0XHRcdFx0ICAgICBcdTAwMjZtZXNvbl9teF9zZGlvX3JlZ21hcF9jb25maWcpO1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNjcwLVx0aWYgKElTX0VSUihob3N0LVx1MDAzZXJlZ21hcCkpIHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo3NDk6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YW1sb2dpYyxtZXNvbjgtc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthbWxvZ2ljLG1lc29uOGItc2Rpb1wmIzM0OywgfSxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cdHsgLyogc2VudGluZWwgKi8gfVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1OC1cdC5kcml2ZXIgID0ge1xuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzU5Olx0XHQubmFtZSA9IFwmIzM0O21lc29uLW14LXNkaW9cJiMzNDssXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXHRcdC5wcm9iZV90eXBlID0gUFJPQkVfUFJFRkVSX0FTWU5DSFJPTk9VUyxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zMy0gKlxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmM6MzQ6ICogLSBGb3Igbm93LCB3ZSB3b24mIzM5O3QgdHJ5IHRvIGludGVyb3BlcmF0ZSB3aXRoIGEgcmVhbCBtbWMvc2Qvc2Rpb1xuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzUtICogICBjb250cm9sbGVyLCBhbHRob3VnaCBzb21lIG9mIHRoZW0gZG8gaGF2ZSBoYXJkd2FyZSBzdXBwb3J0IGZvclxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTExMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3UzMDAgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVx0LmRhdGFjdHJsX2Jsb2Nrc3pcdD0gMTEsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcdC5zdF9zZGlvXHRcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI0LVx0LnB3cnJlZ19wb3dlcnVwXHRcdD0gTUNJX1BXUl9PTixcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMzY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9ub21hZGlrID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNDktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzYtXHQuZG1hX3Bvd2VyX29mXzJcdFx0PSB0cnVlLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzktXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxMS1cdC5kbWFfcG93ZXJfb2ZfMlx0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcdC5zdF9zZGlvXHRcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTIxNC1cdC5zdF9jbGtkaXZcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI0NC1cdC5kYXRhY3RybF9ibG9ja3N6XHQ9IDExLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MjQ1Olx0LmRhdGFjdHJsX21hc2tfc2Rpb1x0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDY6XHQuc3Rfc2Rpb1x0XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXHQuc3RfY2xrZGl2XHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0yNTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF9zdG0zMl9zZG1tYyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzItXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI3MzpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc0LVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTIsIDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjc1LVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNSksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzY6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3Ny1cdC5idXN5X3RpbWVvdXRcdFx0PSB0cnVlLFxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAwLVx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDE6XHQuZGF0YWN0cmxfbWFza19zZGlvXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMi1cdC5zdG0zMl9pZG1hYnNpemVfbWFza1x0PSBHRU5NQVNLKDE2LCA1KSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwMy1cdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cdD0gQklUKDUpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MzA0Olx0LnN1cHBvcnRzX3NkaW9faXJxXHQ9IHRydWUsXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDUtXHQuZG1hX2xsaVx0XHQ9IHRydWUsXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MzEzPXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfc3RtMzJfc2RtbWN2MyA9IHtcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXHQuZGF0YWN0cmxfYW55X2Jsb2Nrc3pcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcdC5kYXRhY3RybF9tYXNrX3NkaW9cdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVx0LnN0bTMyX2lkbWFic2l6ZV9tYXNrXHQ9IEdFTk1BU0soMTYsIDYpLFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVx0LnN0bTMyX2lkbWFic2l6ZV9hbGlnblx0PSBCSVQoNiksXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XHQuc3VwcG9ydHNfc2Rpb19pcnFcdD0gdHJ1ZSxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cdC5kbWFfbGxpXHRcdD0gdHJ1ZSxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz00MjU9c3RhdGljIHZvaWQgbW1jaV93cml0ZV9kYXRhY3RybHJlZyhzdHJ1Y3QgbW1jaV9ob3N0ICpob3N0LCB1MzIgZGF0YWN0cmwpXG4tLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDI4LVx0ZGF0YWN0cmwgfD0gaG9zdC1cdTAwM2VkYXRhY3RybF9yZWcgXHUwMDI2IChob3N0LVx1MDAzZXZhcmlhbnQtXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6NDI5Olx0XHRcdFx0XHQgIGhvc3QtXHUwMDNldmFyaWFudC1cdTAwM2VkYXRhY3RybF9tYXNrX3NkaW8pO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTEyMzY9c3RhdGljIHZvaWQgbW1jaV9zdGFydF9kYXRhKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYxLVxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2MjpcdGlmIChob3N0LVx1MDAzZW1tYy1cdTAwM2VjYXJkIFx1MDAyNlx1MDAyNiBtbWNfY2FyZF9zZGlvKGhvc3QtXHUwMDNlbW1jLVx1MDAzZWNhcmQpKSB7XG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjYzLVx0XHR1MzIgY2xrO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2NC1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNjU6XHRcdGRhdGFjdHJsIHw9IHZhcmlhbnQtXHUwMDNlZGF0YWN0cmxfbWFza19zZGlvO1xuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjcyLVx0XHQgKi9cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyNzM6XHRcdGlmICh2YXJpYW50LVx1MDAzZXN0X3NkaW8gXHUwMDI2XHUwMDI2IGRhdGEtXHUwMDNlZmxhZ3MgXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFx1MDAyNlx1MDAyNlxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cdFx0ICAgIChob3N0LVx1MDAzZXNpemUgXHUwMDNjIDggfHxcbi0tXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxuLS1cbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3NjgtXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xNzcwLXtcbi0tXG5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzM3ODQKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiA2OTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqVW5yZWFjaGFibGUgQ29kZSBpbiBhIFZpcnR1YWxpemVkIEVudmlyb25tZW50KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCB0cnlpbmcgdG8gZmlndXJlIG91dCBpZiBpdCYjMzk7cyB3b3J0aCBmdXp6aW5nLiBUaGUgY3J1eCBvZiB0aGUgaXNzdWUgaXMgdGhpcyBTRElPIGRyaXZlciBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGVyZSYjMzk7cyBubyB3YXkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gVGhlcmUmIzM5O3Mgbm8gYnVpbHQtaW4gYGR1bW15X21tY2Agb3IgYHZoY2lgIGVxdWl2YWxlbnQgZm9yIFNESU8sIHdoaWNoIHdvdWxkIGFsbG93IG1lIHRvIGluamVjdCBhIHZpcnR1YWwgU0RJTyBkZXZpY2UuCgpJIGJyaWVmbHkgY29uc2lkZXJlZCBgZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmNgLCBidXQgaXQgZXhwbGljaXRseSBzYXlzIGl0ICpkb2VzbiYjMzk7dCogaW50ZXJhY3Qgd2l0aCByZWFsIE1NQy9TRC9TRElPIGNvbnRyb2xsZXJzLiBRRU1VIGRvZXMgaGF2ZSBgc2RoY2ktcGNpYCB0byBlbXVsYXRlIGFuIFNEIGhvc3QgY29udHJvbGxlciwgYnV0IHRoYXQmIzM5O3MgZm9yIFNEIGNhcmRzLCBub3QgU0RJTy4gRGFtbi4gSSBldmVuIHdvbmRlcmVkIGlmIGEgdXNlci1zcGFjZSBwcm9ncmFtIGNvdWxkIGFjdCBhcyBhbiBTRElPIGRldmljZSBzb21laG93LCBidXQgbm8sIHRoZSBMaW51eCBrZXJuZWwgZG9lc24mIzM5O3Qgb2ZmZXIgYW55IGludGVyZmFjZSBmb3IgdGhhdC4KClNvLCB0aGUgYHJ0dzg4YCBTRElPIGRyaXZlciBjYW4mIzM5O3QgYmUgcHJvYmVkIGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIG1ha2VzIGl0IHVucmVhY2hhYmxlIGNvZGUuCgpUaGUgcXVlc3Rpb24gdGhlbiBiZWNvbWVzLCBpZiB0aGUgZHJpdmVyIGlzIGNvbXBpbGVkLCBidXQgbmV2ZXIgcHJvYmVkLCBkb2VzIHRoYXQgY29kZSBtYXR0ZXIgZm9yIGZ1enppbmcgcHVycG9zZXM/IFRoZSBwcm9tcHQgaXMgdGVsbGluZyBtZSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgdGhlIHBhdGNoIGhhcyB1bnJlYWNoYWJsZSBjb2RlIGxpa2UgdGhpcy4KCkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBgbWFjODAyMTFfaHdzaW1gICptaWdodCogcHJvdmlkZSBhIHBhdGggdG8gdGhpcyBjb2RlLCBidXQgdGhhdCYjMzk7cyBhIGRlYWQgZW5kLiBJdCYjMzk7cyBhIGNvbXBsZXRlbHkgc2VwYXJhdGUgc29mdHdhcmUtZW11bGF0ZWQgV2ktRmkgZHJpdmVyIGFuZCBkb2VzbiYjMzk7dCB1c2UgdGhlIGBydHc4OGAgZHJpdmVyIG9yIGFueSBvZiB0aGUgUmVhbHRlayBkcml2ZXIgY29kZS4KClRoZSBwYXRjaCBtb2RpZmllcyBgdHguY2AsIGJ1dCB0aGUgYWRkZWQgY29kZSBpcyBndWFyZGVkIGJ5IGEgY29uZGl0aW9uIHRoYXQgcmVxdWlyZXMgdGhlIHNwZWNpZmljIFJlYWx0ZWsgY2hpcCBhbmQgYW4gU0RJTyBpbnRlcmZhY2UuIEkgbG9va2VkIGF0IHRoZSBjb25kaXRpb246CmBgYGMKCWlmICgocnR3ZGV2LSZndDtjaGlwLSZndDtpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEICZhbXA7JmFtcDsKCSAgICAgcnR3ZGV2LSZndDtoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fAoJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKYGBgClRoZSBVU0IgcGF0aCB3YXMgYWxyZWFkeSB0aGVyZTsgdGhlIHBhdGNoIGp1c3QgYWRkcyBgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpYC4gVGhlIG5ldyBjb25kaXRpb24gaXMgb25seSB0YWtlbiBmb3IgdGhlIFJUTDg3MjNCUyBjaGlwICh0aGF0IHRyaWdnZXJzIGBydHdfaXNfODcyM2JzKHJ0d2RldilgKSB3aGljaCAqcmVxdWlyZXMqIHRoZSBTRElPIGludGVyZmFjZS4gQW55IGNoYW5nZXMgaW4gYHNkaW8uY2AgYW5kIGBzZGlvLmhgIGFyZSAqb25seSogY29tcGlsZWQgYW5kIHVzZWQgaWYgdGhlIFNESU8gaW50ZXJmYWNlIGlzIGFjdGl2ZS4KClNvLCBldmVuIGlmIGBDT05GSUdfUlRXODhfU0RJT2AgaXMgc2V0LCBgc2Rpby5jYCB3aWxsIHN0aWxsIGJlIGNvbXBpbGVkLCBidXQgdGhlIGNvZGUgd2lsbCAqb25seSogYmUgZXhlY3V0ZWQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLgoKVGhlIGJvdHRvbSBsaW5lOiBnaXZlbiB0aGF0IHdlIGNhbiYjMzk7dCBlbXVsYXRlIFNESU8gZGV2aWNlcyBpbiBhIHN0YW5kYXJkIGVudmlyb25tZW50LCB0aGlzIGNvZGUgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZS4KCkkmIzM5O20gZ29pbmcgdG8gZG91YmxlIGNoZWNrIHRoZSBrZXJuZWwgc291cmNlIGp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIHRoZXJlIGlzbiYjMzk7dCBzb21lIGNsZXZlciBzb2Z0d2FyZSBpbmplY3Rpb24gbWVjaGFuaXNtIGZvciBTRElPIGhpZGluZyBpbiBgZHJpdmVycy9tbWMvY29yZS9gLCBidXQgSSYjMzk7bSBwcmV0dHkgY29uZmlkZW50IGluIG15IGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMCAwOTo1MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZGlvX3JlZ2lzdGVyX2RyaXZlciYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jPTE3NDU9c3RhdGljIGludCBfX2luaXQgYnRtcnZsX3NkaW9faW5pdF9tb2R1bGUodm9pZClcbmRyaXZlcnMvYmx1ZXRvb3RoL2J0bXJ2bF9zZGlvLmMtMTc0Ni17XG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jOjE3NDc6XHRpZiAoc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YnRfbXJ2bF9zZGlvKSAhPSAwKSB7XG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jLTE3NDgtXHRcdEJUX0VSUihcJiMzNDtTRElPIERyaXZlciBSZWdpc3RyYXRpb24gRmFpbGVkXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9Mjc0PXN0YXRpYyB2b2lkIHNkaW9fbGVnYWN5X3NodXRkb3duKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXG4tLVxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4Mi0vKipcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzoyODM6ICpcdF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIgLSByZWdpc3RlciBhIGZ1bmN0aW9uIGRyaXZlclxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4NC0gKlx0QGRydjogU0RJTyBmdW5jdGlvbiBkcml2ZXJcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg2LSAqL1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjI4NzppbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg4LXtcbi0tXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAxLX1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzozMDI6RVhQT1JUX1NZTUJPTF9HUEwoX19zZGlvX3JlZ2lzdGVyX2RyaXZlcik7XG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAzLVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM9MTExNT1zdGF0aWMgaW50IF9faW5pdCBzZGlvX3VhcnRfaW5pdCh2b2lkKVxuLS1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0MC1cbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmM6MTE0MTpcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNnNkaW9fdWFydF9kcml2ZXIpO1xuZHJpdmVycy9tbWMvY29yZS9zZGlvX3VhcnQuYy0xMTQyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvc2Rpby5jPTE5NT1pbnQgYjQzX3NkaW9faW5pdCh2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYy0xOTYte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYzoxOTc6XHRyZXR1cm4gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YjQzX3NkaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9zZGlvLmMtMTk4LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmM9MTI3MT1pbnQgYnJjbWZfc2Rpb19yZWdpc3Rlcih2b2lkKVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEyNzIte1xuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jOjEyNzM6XHRyZXR1cm4gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2YnJjbWZfc2RtbWNfZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYy0xMjc0LX1cbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYz0xMzkwPXN0YXRpYyBpbnQgX19pbml0IGlmX3NkaW9faW5pdF9tb2R1bGUodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYy0xMzk2LVxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6MTM5NzpcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFx1MDAyNmlmX3NkaW9fZHJpdmVyKTtcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTgtXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM9NDkzPXN0YXRpYyBpbnQgX19pbml0IHdmeF9jb3JlX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYy01MDItXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTU1DKSkge1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6NTAzOlx0XHRyZXQgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZ3Znhfc2Rpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtNTA0LVx0XHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9jdzEyMDBfc2Rpby5jPTM4OD1zdGF0aWMgaW50IF9faW5pdCBjdzEyMDBfc2Rpb19pbml0KHZvaWQpXG4tLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmMtNDAwLVxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmM6NDAxOlx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXHUwMDI2c2Rpb19kcml2ZXIpO1xuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmMtNDAyLVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL29zX2RlcC9zZGlvX2ludGYuYz00NTE9c3RhdGljIGludCBfX2luaXQgcnR3X2Rydl9lbnRyeSh2b2lkKVxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDUyLXtcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jOjQ1MzpcdHJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcdTAwMjZydGw4NzIzYnNfc2Rpb19kcml2ZXIpO1xuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDU0LX1cbi0tXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaD03NT1zdHJ1Y3Qgc2Rpb19kcml2ZXIge1xuLS1cbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExMC0vKiB1c2UgYSBtYWNybyB0byBhdm9pZCBpbmNsdWRlIGNoYWluaW5nIHRvIGdldCBUSElTX01PRFVMRSAqL1xuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTExOiNkZWZpbmUgc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2KSBcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEyOlx0X19zZGlvX3JlZ2lzdGVyX2RyaXZlcihkcnYsIFRISVNfTU9EVUxFKVxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEzOmV4dGVybiBpbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKiwgc3RydWN0IG1vZHVsZSAqKTtcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExNC1leHRlcm4gdm9pZCBzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjQtI2RlZmluZSBtb2R1bGVfc2Rpb19kcml2ZXIoX19zZGlvX2RyaXZlcikgXFxcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oOjEyNTpcdG1vZHVsZV9kcml2ZXIoX19zZGlvX2RyaXZlciwgc2Rpb19yZWdpc3Rlcl9kcml2ZXIsIFxcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjYtXHRcdCAgICAgIHNkaW9fdW5yZWdpc3Rlcl9kcml2ZXIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIwIDA5OjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM2OTE4CgkJCQkJCQlvdXRwdXQ6IDE5MgoJCQkJCQkJdGhvdWdodHM6IDE1ODAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCB0aGVyZSYjMzk7cyBubyBgZHVtbXlfc2Rpb2Agb3IgYW55dGhpbmcgY29tcGFyYWJsZSBpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgdG8gYWxsb3cgZm9yIFNESU8gZW11bGF0aW9uLiBUaGUgYHJ0dzg4YCBkcml2ZXIgdXNlcyBgbW9kdWxlX3NkaW9fZHJpdmVyYCBvciBgc2Rpb19yZWdpc3Rlcl9kcml2ZXJgIHRvIHJlZ2lzdGVyIGl0cyBTRElPIGRyaXZlcnMuIFRoaXMgbWVhbnMgdGhlIGBwcm9iZWAgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgdGhlIFNESU8tc3BlY2lmaWMgY29kZSwgaXMgbmV2ZXIgZ29pbmcgdG8gYmUgaGl0IHVubGVzcyB0aGVyZSYjMzk7cyBhbiBhY3R1YWwgU0RJTyBjb250cm9sbGVyIGFuZCBjYXJkIHByZXNlbnQuIFNvLCBhbnkgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSB0aWVkIHRvIFNESU8gYXJlIHVucmVhY2hhYmxlLgoKTm93LCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgb3RoZXIgY2hhbmdlcy4gVGhlcmUmIzM5O3MgYSBtb2RpZmljYXRpb24gaW4gYHNkaW8uY2A6ICB0aGUgY2hhbmdlIHRvIHVzZSBgbW9kX2RlbGF5ZWRfd29ya2AgaW5zdGVhZCBvZiBgcXVldWVfd29ya2Agd2hpY2ggYWZmZWN0cyB0aGUgcmV0cnkgbWVjaGFuaXNtIGZvciBTRElPIGNoaXBzLiBJdCBtb2RpZmllcyB0aGUgYmVoYXZpb3IgZm9yICphbGwqIFNESU8gY2hpcHMgc3VwcG9ydGVkIGJ5IGBydHc4OGAuIEJ1dCBhZ2FpbiwgdGhhdCYjMzk7cyBTRElPLXNwZWNpZmljLiBUaGlzIGNoYW5nZSBpcyBzdGlsbCB1bi1mdXp6YWJsZS4KClRoZW4gdGhlcmUgYXJlIGNoYW5nZXMgaW4gYHJ4LmNgOgpgYGBjCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiAmYW1wOyZhbXA7IHBrdF9zdGF0LSZndDtwa3RfbGVuID09IDApIHsKJiM0MzsJaWYgKHBrdF9zdGF0LSZndDtwa3RfbGVuID09IDAgJmFtcDsmYW1wOwomIzQzOwkgICAgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzAzQiB8fCBydHdfaXNfODcyM2JzKHJ0d2RldikpKSB7CmBgYAphbmQgYHR4LmNgOgpgYGBjCi0JaWYgKHJ0d2Rldi0mZ3Q7Y2hpcC0mZ3Q7aWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCAmYW1wOyZhbXA7Ci0JICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikKJiM0MzsJaWYgKChydHdkZXYtJmd0O2NoaXAtJmd0O2lkID09IFJUV19DSElQX1RZUEVfODcyM0QgJmFtcDsmYW1wOwomIzQzOwkgICAgIHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHwKJiM0MzsJICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSkKYGBgClRoZXNlIGFmZmVjdCBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2hpY2ggYXJlIGNhbGxlZCBmb3IgYWxsIGludGVyZmFjZXMgKFBDSWUsIFVTQiwgYW5kIFNESU8pLiBCdXQsIEkgKmNhbiogcmVhY2ggYHJ0dzg4YCB2aWEgUENJZSBvciBVU0IuIEZvciBpbnN0YW5jZSwgYHJ0dzg4MjJiZWAgaXMgYSBQQ0llIGRyaXZlcjsgYHJ0dzg4MjJidWAgaXMgVVNCLiBVc2luZyBgZHVtbXlfaGNkYCBvciBgcmF3X2dhZGdldGAsIEkgKmNhbiogZW11bGF0ZSBhIFVTQiBkZXZpY2UgbWF0Y2hpbmcgdGhlIGBydHc4OGAgVVNCIElEcyBhbmQgdGhlcmVmb3JlIHRyaWdnZXIgYHJ0d19yeF9maWxsX3J4X3N0YXR1c2AuCgpIb3dldmVyLCB0aGUga2V5IGhlcmUgaXMgdGhlIGBydHdfaXNfODcyM2JzKClgIGNoZWNrLiBMZXQmIzM5O3Mgc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIFRoZSBjaGFuZ2UgaW4gYHJ4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBub24tODcyM2JzIGNoaXBzLCBpcyBlc3NlbnRpYWxseSByZW9yZGVyaW5nIG9mIGFuIGFscmVhZHkgcHJlc2VudCBjb25kaXRpb24sIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzaW1wbHkgYWRkcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggd2lsbCAqYWx3YXlzKiBiZSBmYWxzZSBmb3IgVVNCL1BDSWUgZGV2aWNlcy4gSW4gYHR4LmNgIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMuIEFnYWluLCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyBhZGRlZCwgYW5kIGl0IGlzIHN0aWxsIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gVGhlIGNoYW5nZSBpcyBub24tZnVuY3Rpb25hbC4KClRoZXJlZm9yZSwgdGhlIG9ubHkgKmZ1bmN0aW9uYWwqIGNoYW5nZXMgYXJlIGZvciBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBhbmQgdGhlIFNESU8tc3BlY2lmaWMgbW9kaWZpY2F0aW9ucyBpbiBgc2Rpby5jYC4gVGhlIFNESU8gY2hhbmdlcyBhcmUgaW5hY2Nlc3NpYmxlLCBhbmQgdGhlIGBydHdfaXNfODcyM2JzKClgIGlzIGd1YXJkZWQgYnkgdGhlIGBSVFdfSENJX1RZUEVfU0RJT2Agd2hpY2ggY2FuIG5ldmVyIGJlIHNldCBieSBVU0IvUENJZSBpbiB0aGlzIGRyaXZlci4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQgbWUgZG91YmxlLWNoZWNrOiBldmVuIGlmIEkgZW11bGF0ZSBhIFVTQiBkZXZpY2UgYW5kIHNvbWVob3cgc2V0IGl0cyBjaGlwIElEIHRvIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCwgYHJ0d19pc184NzIzYnMoKWAgd2lsbCBzdGlsbCByZXR1cm4gZmFsc2UgYmVjYXVzZSBpdCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgYHJ0d2Rldi0mZ3Q7aGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU9gLiBPa2F5LCB0aGF0IGNvbmZpcm1zIGl0LgoKVGhlIG5ldyBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIG15IHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGlzIHBhdGNoIHBlcmZlY3RseSBmaXRzIHRoZSBjcml0ZXJpYTogaXQgaW50cm9kdWNlcyBjb2RlIHBhdGhzIHRoYXQgY2Fubm90IGJlIGFjY2Vzc2VkIGR1ZSB0byB0aGUgbGFjayBvZiBTRElPIGVtdWxhdGlvbiwgYW5kIHRoZSBzaGFyZWQgY29kZSBoYXMgY2hlY2tzIGluIHBsYWNlIHRoYXQgcHJldmVudCB0aGVtIGZyb20gYWZmZWN0aW5nIG5vbi1TRElPIHBhdGhzLgoKSSYjMzk7bSBjb25maWRlbnQuICoqV29ydGhGdXp6aW5nPWZhbHNlKiouCgpNeSByZWFzb25pbmcgaXMgdGhpczogdGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgV2ktRmkgY2hpcCwgd2hpY2ggb3BlcmF0ZXMgb3ZlciB0aGUgU0RJTyBidXMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBTRElPLXNwZWNpZmljIGRyaXZlciBmaWxlIChzZGlvLmMpIG9yIGd1YXJkZWQgYnkgdGhlIHJ0d19pc184NzIzYnMoKSBoZWxwZXIsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBSVFdfSENJX1RZUEVfU0RJTy4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3Qgc3VwcG9ydCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYXJiaXRyYXJ5IFNESU8gZGV2aWNlcyAodW5saWtlIFVTQiB2aWEgZHVtbXlfaGNkL3Jhd19nYWRnZXQpLCB0aGUgU0RJTyBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4gVGhlIG1pbm9yIGNoYW5nZXMgdG8gc2hhcmVkIFJYL1RYIHBhdGhzIGZvciBvdGhlciBjaGlwcyBhcmUgcHVyZWx5IG5vbi1mdW5jdGlvbmFsIGNvbmRpdGlvbiByZW9yZGVyaW5ncy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwLCB3aGljaCBvcGVyYXRlcyBvdmVyIHRoZSBTRElPIGJ1cy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNESU8tc3BlY2lmaWMgZHJpdmVyIGZpbGUgKHNkaW8uYykgb3IgZ3VhcmRlZCBieSB0aGUgcnR3X2lzXzg3MjNicygpIGhlbHBlciwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgZm9yIFJUV19IQ0lfVFlQRV9TRElPLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBzdXBwb3J0IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhcmJpdHJhcnkgU0RJTyBkZXZpY2VzICh1bmxpa2UgVVNCIHZpYSBkdW1teV9oY2QvcmF3X2dhZGdldCksIHRoZSBTRElPIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiBUaGUgbWlub3IgY2hhbmdlcyB0byBzaGFyZWQgUlgvVFggcGF0aHMgZm9yIG90aGVyIGNoaXBzIGFyZSBwdXJlbHkgbm9uLWZ1bmN0aW9uYWwgY29uZGl0aW9uIHJlb3JkZXJpbmdzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjAgMDk6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjAwLjg2OTAwNzQzMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2ODU0NzUzNjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MTowMC44NjkwMTI5MzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzODk3NjE3NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2Y2VlNTg2YjU0NTVlNWJiMzU3MWMzZmFhMTI4MGI4Y2Y5ZjYzYmEyXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5pbmRleCBjNmU5ODFiYTc5ODY4Li44Zjg2ZjdjMTJkZTVhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmhcXG5AQCAtMTk0LDYgKzE5NCw3IEBAIGVudW0gcnR3X2NoaXBfdHlwZSB7XFxuIFxcdFJUV19DSElQX1RZUEVfODcyM0QsXFxuIFxcdFJUV19DSElQX1RZUEVfODgyMUMsXFxuIFxcdFJUV19DSElQX1RZUEVfODcwM0IsXFxuK1xcdFJUV19DSElQX1RZUEVfODcyM0IsXFxuIFxcdFJUV19DSElQX1RZUEVfODgyMUEsXFxuIFxcdFJUV19DSElQX1RZUEVfODgxMkEsXFxuIFxcdFJUV19DSElQX1RZUEVfODgxNEEsXFxuQEAgLTIxOTQsNiArMjE5NSwxMiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcnR3X2NoaXBfaGFzX3R4X3N0YmMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNldHhfc3RiYztcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRyZXR1cm4gcnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNCIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHU4IHJ0d19hY3F1aXJlX21hY2lkKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBtYWNfaWQ7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmZkZTIxYzg0MGFjMDIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9yeC5jXFxuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXG4gXFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcXG4gXFxuLVxcdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTIgYW5kXFxuLVxcdCAqIHNpbXBseSBkcm9wcyB0aGUgcGFja2V0LlxcbitcXHQvKlxcbitcXHQgKiBSdGw4NzIzY3MgYW5kIHJ0bDg3MjNicyBkcml2ZXJzIGNoZWNrIGZvciBzaXplIFxcdTAwM2MgMTQgb3Igc2l6ZSBcXHUwMDNlIDgxOTJcXG4rXFx0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXFxuIFxcdCAqL1xcbi1cXHRpZiAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFxcdTAwMjZcXHUwMDI2IHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDApIHtcXG4rXFx0aWYgKHBrdF9zdGF0LVxcdTAwM2Vwa3RfbGVuID09IDAgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xcbiBcXHRcXHRyeF9zdGF0dXMtXFx1MDAzZWZsYWcgfD0gUlhfRkxBR19OT19QU0RVO1xcbiBcXHRcXHRydHdfZGJnKHJ0d2RldiwgUlRXX0RCR19SWCwgXFxcInplcm8gbGVuZ3RoIHBhY2tldFxcXCIpO1xcbiBcXHR9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXFxuKysrIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcXG5AQCAtMjAsNiArMjAsMTcgQEBcXG4gI2luY2x1ZGUgXFxcInR4LmhcXFwiXFxuIFxcbiAjZGVmaW5lIFJUV19TRElPX0lORElSRUNUX1JXX1JFVFJJRVNcXHRcXHRcXHQ1MFxcbisjZGVmaW5lIFJUV19TRElPX09RVF9USU1FT1VUX01TXFx0XFx0XFx0XFx0MTAwMFxcbitcXG4rLypcXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcXG4rICogdGhlIHBlci1BQyBzb2Z0d2FyZSBGSUZPIGZpbGxzIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBhbmQgd2FrZSBpdCBmcm9tIHRoZVxcbisgKiBUWCBkcmFpbiBwYXRoIG9uY2UgaXQgZmFsbHMgYmFjayB0byB0aGUgbG93IG9uZS4gQm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5XFxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxcbisgKi9cXG4rI2RlZmluZSBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVJcXHRcXHRcXHQxNlxcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlxcdFxcdFxcdDhcXG4rI2RlZmluZSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWVxcdFxcdFxcdG1zZWNzX3RvX2ppZmZpZXMoMSlcXG4gXFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxcbiB7XFxuQEAgLTU0OCwxMiArNTU5LDE1NyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3JlYWRfcG9ydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCBzaXplX3QgY291bnQpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFRoZSBjYWNoZWQgZnJlZSBwYWdlIGNvdW50ZXJzIGFyZSBhIGZhc3QgcGF0aCBoaW50IG9ubHkuIFRoZXkgYXJlIHdyaXR0ZW5cXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcXG4rICogZnJvbSBwcm9jZXNzIGNvbnRleHQsIHNvIHRoZXkgYXJlIGF0b21pY190OyB3aGVuZXZlciB0aGV5IGNsYWltIHRoZXJlIGlzXFxuKyAqIG5vdCBlbm91Z2ggcm9vbSB0aGV5IGFyZSByZXN5bmNocm9uaXNlZCBmcm9tIHRoZSBjaGlwIGJlZm9yZSB0aGUgY2FsbGVyXFxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIHUzMiBmcmVlX3R4cGcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaCxcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19ISUdIKSk7XFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLFxcbitcXHRcXHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xcbitcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX2xvdyxcXG4rXFx0XFx0ICAgdTMyX2dldF9iaXRzKGZyZWVfdHhwZywgQklUX0ZSRUVfVFhQR19MT1cpKTtcXG4rXFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsXFxuK1xcdFxcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfUFVCKSk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcXG4rICogcmVwb3J0cyBubyBmcmVlIHBhZ2VzIGF0IGFsbCwgd2hpY2ggbWVhbnMgdGhlIGNvdW50cyBjYW5ub3QgYmUgdHJ1c3RlZFxcbisgKiBhbmQgdGhlIGNhbGxlciBoYXMgdG8gZGVjaWRlIHdoYXQgdG8gZG8gaW5zdGVhZC5cXG4rICovXFxuK3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbit7XFxuK1xcdHUzMiBmcmVlX3R4cGcgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fRlJFRV9UWFBHKTtcXG4rXFxuK1xcdGlmICghZnJlZV90eHBnKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHJ0d2RldiwgZnJlZV90eHBnKTtcXG4rXFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbisvKlxcbisgKiBTaXplIG9mIHRoZSBwdWJsaWMgcGFnZSBwb29sOiB3aGF0ZXZlciB0aGUgdHJhbnNtaXQgcGFnZSBhbGxvY2F0aW9uIGhhc1xcbisgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxcbisgKiBjYW5ub3QgY292ZXIgdGhlIHJlc2VydmVkIHF1ZXVlcywgc2luY2UgdGhlIHJlbWFpbmRlciB3b3VsZCB1bmRlcmZsb3cgYW5kXFxuKyAqIHRoZXJlIHdvdWxkIGJlIG5vIHNlbnNpYmxlIHBvb2wgdG8gaGFuZCBvdXQuXFxuKyAqL1xcbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19wdWJxX251bShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1MTYgKnB1YnFfbnVtKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBydHdfcGFnZV90YWJsZSAqcGdfdGJsID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV90YWJsZVswXTtcXG4rXFx0dTE2IGFjcV9wZ19udW0gPSBydHdkZXYtXFx1MDAzZWZpZm8uYWNxX3BnX251bTtcXG4rXFx0dTE2IHJlc2VydmVkX251bTtcXG4rXFxuK1xcdHJlc2VydmVkX251bSA9IHBnX3RibC1cXHUwMDNlaHFfbnVtICsgcGdfdGJsLVxcdTAwM2VscV9udW0gKyBwZ190YmwtXFx1MDAzZW5xX251bSArXFxuK1xcdFxcdCAgICAgICBwZ190YmwtXFx1MDAzZWV4cV9udW0gKyBwZ190YmwtXFx1MDAzZWdhcHFfbnVtO1xcbitcXHRpZiAoYWNxX3BnX251bSBcXHUwMDNjPSByZXNlcnZlZF9udW0pIHtcXG4rXFx0XFx0cnR3X2VycihydHdkZXYsXFxuK1xcdFxcdFxcdFxcXCJubyB0cmFuc21pdCBwYWdlcyBsZWZ0IGZvciB0aGUgcHVibGljIHF1ZXVlOiAldSBvZiAldSByZXNlcnZlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cmVzZXJ2ZWRfbnVtLCBhY3FfcGdfbnVtKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdCpwdWJxX251bSA9IGFjcV9wZ19udW0gLSByZXNlcnZlZF9udW07XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0LyogU2VlZCBmcm9tIHRoZSBwYWdlIHRhYmxlIHdoZW4gdGhlIGNoaXAgaGFzIG5vdGhpbmcgdG8gcmVwb3J0IHlldC4gKi9cXG4rXFx0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xcbitcXHRcXHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcXHUwMDI2cHVicV9udW0pO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cGdfdGJsID0gXFx1MDAyNnJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV90YWJsZVswXTtcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19oaWdoLCBwZ190YmwtXFx1MDAzZWhxX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsLCBwZ190YmwtXFx1MDAzZW5xX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbG93LCBwZ190YmwtXFx1MDAzZWxxX251bSk7XFxuK1xcdFxcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfcHViLCBwdWJxX251bSk7XFxuK1xcdH1cXG4rXFxuK1xcdGF0b21pY19zZXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X29xdF9mcmVlLFxcbitcXHRcXHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFN1bSBvZiB0aGUgcXVldWUncyBkZWRpY2F0ZWQgY291bnRlciBhbmQgdGhlIHB1YmxpYyBwb29sLCBjbGFtcGVkIGF0IHplcm86XFxuKyAqIGEgbG9zdCB1cGRhdGUgYmV0d2VlbiB0aGUgY2hlY2sgYmVsb3cgYW5kIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoKVxcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxcbisgKiBzaG9ydGFnZSBpbnN0ZWFkIG9mIHRyaWdnZXJpbmcgYSByZXN5bmMgZnJvbSB0aGUgY2hpcC5cXG4rICovXFxuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2VmcmVlX3BnX3B1Yik7XFxuK1xcbitcXHRyZXR1cm4gZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMDtcXG4rfVxcbitcXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRzd2l0Y2ggKHF1ZXVlKSB7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfbm9ybWFsO1xcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9CRTpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XFxuK1xcdFxcdHJldHVybiBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19sb3c7XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX0JDTjpcXG4rXFx0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxcbitcXHRjYXNlIFJUV19UWF9RVUVVRV9ISTA6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX01HTVQ6XFxuK1xcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxcbitcXHRcXHRyZXR1cm4gXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZWZyZWVfcGdfaGlnaDtcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXFxuIFxcdFxcdFxcdFxcdCAgICBzaXplX3QgY291bnQpXFxuIHtcXG4gXFx0dW5zaWduZWQgaW50IHBhZ2VzX2ZyZWUsIHBhZ2VzX25lZWRlZDtcXG4gXFxuLVxcdGlmIChydHdfY2hpcF93Y3B1XzgwNTEocnR3ZGV2KSkge1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XFxuK1xcdFxcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcbitcXHRcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRpZiAoIWRlZGljYXRlZCkge1xcbitcXHRcXHRcXHRydHdfd2FybihydHdkZXYsIFxcXCJVbmtub3duIG1hcHBpbmcgZm9yIHF1ZXVlICV1XFxcXG5cXFwiLCBxdWV1ZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHRcXHRwYWdlc19uZWVkZWQgPSBESVZfUk9VTkRfVVAoY291bnQsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0aWYgKHBhZ2VzX25lZWRlZCBcXHUwMDNjPSBwYWdlc19mcmVlKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHJ0d19zZGlvXzg3MjNic19zeW5jX2ZyZWVfdHhwZyhydHdkZXYpO1xcbitcXHRcXHRwYWdlc19mcmVlID0gcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUocnR3ZGV2LCBkZWRpY2F0ZWQpO1xcbitcXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XFxuIFxcdFxcdHUzMiBmcmVlX3R4cGc7XFxuIFxcbiBcXHRcXHRmcmVlX3R4cGcgPSBydHdfc2Rpb19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xcbkBAIC02MzIsMTAgKzc4OCw1NiBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCBxdWV1ZSxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3dhaXRfdHhfb3F0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWFkbGluZTtcXG4rXFx0dTggZnJlZTtcXG4rXFxuK1xcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfb3F0X2ZyZWUsIC0xLCAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRkZWFkbGluZSA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKFJUV19TRElPX09RVF9USU1FT1VUX01TKTtcXG4rXFx0ZG8ge1xcbitcXHRcXHRmcmVlID0gcnR3X3JlYWQ4KHJ0d2RldiwgUkVHX1NESU9fT1FUX0ZSRUVfUEcpO1xcbitcXHRcXHRpZiAoZnJlZSkge1xcbitcXHRcXHRcXHRhdG9taWNfc2V0KFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9vcXRfZnJlZSwgZnJlZSAtIDEpO1xcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0fVxcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMCwgMjAwMCk7XFxuK1xcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGRlYWRsaW5lKSk7XFxuK1xcbitcXHRyZXR1cm4gLUVCVVNZO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlLFxcbitcXHRcXHRcXHRcXHRcXHQgdW5zaWduZWQgaW50IHBhZ2VzKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcdGF0b21pY190ICpkZWRpY2F0ZWQ7XFxuK1xcdHVuc2lnbmVkIGludCB0YWtlbjtcXG4rXFx0aW50IGZyZWU7XFxuK1xcbitcXHRkZWRpY2F0ZWQgPSBydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHJ0d2RldiwgcXVldWUpO1xcbitcXHRpZiAoIWRlZGljYXRlZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0ZnJlZSA9IGF0b21pY19yZWFkKGRlZGljYXRlZCk7XFxuK1xcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcXHUwMDNlIDAgPyBmcmVlIDogMCk7XFxuK1xcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XFxuK1xcbitcXHRwYWdlcyAtPSB0YWtlbjtcXG4rXFx0aWYgKHBhZ2VzIFxcdTAwMjZcXHUwMDI2IGF0b21pY19zdWJfcmV0dXJuKHBhZ2VzLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIpIFxcdTAwM2MgMClcXG4rXFx0XFx0YXRvbWljX3NldChcXHUwMDI2cnR3c2Rpby1cXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0XFx0XFx0ICAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0Ym9vbCBydGw4NzIzYnMgPSBydHdfaXNfODcyM2JzKHJ0d2Rldik7XFxuK1xcdHVuc2lnbmVkIGludCBwYWdlcztcXG4rXFx0c2l6ZV90IHdyaXRlX3NpemU7XFxuIFxcdGJvb2wgYnVzX2NsYWltO1xcbiBcXHRzaXplX3QgdHhzaXplO1xcbiBcXHR1MzIgdHhhZGRyO1xcbkBAIC02NDUsMzEgKzg0Nyw3MyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gXFx0aWYgKCF0eGFkZHIpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0dHhzaXplID0gc2Rpb19hbGlnbl9zaXplKHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYywgc2tiLVxcdTAwM2VsZW4pO1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cXHUwMDNlbGVuLCA0KTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZSBcXHUwMDNlIFJUV19TRElPX0JMT0NLX1NJWkUgP1xcbitcXHRcXHRcXHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBfX3NrYl9wYWQoKSB6ZXJvZXMgdGhlIHBhZGRpbmcgd2l0aG91dCBtb3Zpbmcgc2tiLVxcdTAwM2VsZW4gYW5kXFxuK1xcdFxcdCAqIHJlYWxsb2NhdGVzIHdoZW4gdGhlIHNrYiBpcyBjbG9uZWQgb3Igc2hvcnQgb24gdGFpbHJvb20sXFxuK1xcdFxcdCAqIHNvIHRoZSBwYWRkaW5nIGNhbiBuZXZlciBsYW5kIGluIGEgYnVmZmVyIGEgY2xvbmUgc3RpbGxcXG4rXFx0XFx0ICogc2hhcmVzLiBJdCBtdXN0IG5vdCBmcmVlIHRoZSBza2Igb24gZmFpbHVyZTogYm90aCBjYWxsZXJzXFxuK1xcdFxcdCAqIHN0aWxsIG93biBpdCwgb25lIHJlcXVldWVzIGl0IGFuZCB0aGUgb3RoZXIgZnJlZXMgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAod3JpdGVfc2l6ZSBcXHUwMDNlIHNrYi1cXHUwMDNlbGVuKSB7XFxuK1xcdFxcdFxcdHJldCA9IF9fc2tiX3BhZChza2IsIHdyaXRlX3NpemUgLSBza2ItXFx1MDAzZWxlbiwgZmFsc2UpO1xcbitcXHRcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHNrYi1cXHUwMDNlbGVuKTtcXG4rXFx0XFx0d3JpdGVfc2l6ZSA9IHR4c2l6ZTtcXG4rXFx0fVxcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGZyZWUgcGFnZSBjaGVjaywgdGhlIG91dHB1dCBxdWV1ZSB3YWl0IGFuZCB0aGUgYWNjb3VudGluZ1xcbitcXHQgKiBhZnRlciB0aGUgdHJhbnNmZXIgbXVzdCBub3QgaW50ZXJsZWF2ZSB3aXRoIGFub3RoZXIgd3JpdGVyOiB0aGVcXG4rXFx0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcXG4rXFx0ICogYm90aCBwYXNzIHRoZSBjaGVja3MgY2FuIGNsYWltIHRoZSBzYW1lIHBhZ2VzIGFuZCBvdXRwdXQgcXVldWVcXG4rXFx0ICogZW50cnksIGFmdGVyIHdoaWNoIHRoZSBjaGlwIHNpbGVudGx5IGRpc2NhcmRzIHdoaWNoZXZlciB0cmFuc2ZlclxcbitcXHQgKiBhcnJpdmVzIHNlY29uZC5cXG4rXFx0ICovXFxuK1xcdGlmIChydGw4NzIzYnMpXFxuK1xcdFxcdG11dGV4X2xvY2soXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcXG4gXFxuIFxcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xcbiBcXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcbitcXHRpZiAocnRsODcyM2JzKSB7XFxuK1xcdFxcdHJldCA9IHJ0d19zZGlvXzg3MjNic193YWl0X3R4X29xdChydHdkZXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICghSVNfQUxJR05FRCgodW5zaWduZWQgbG9uZylza2ItXFx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcXG4gXFx0XFx0cnR3X3dhcm4ocnR3ZGV2LCBcXFwiR290IHVuYWxpZ25lZCBTS0IgaW4gJXMoKSBmb3IgcXVldWUgJXVcXFxcblxcXCIsXFxuIFxcdFxcdFxcdCBfX2Z1bmNfXywgcXVldWUpO1xcbiBcXG4gXFx0YnVzX2NsYWltID0gcnR3X3NkaW9fYnVzX2NsYWltX25lZWRlZChydHdzZGlvKTtcXG4tXFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fY2xhaW1faG9zdChydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMpO1xcbi1cXG4tXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLCB0eHNpemUpO1xcbi1cXG4rXFx0cmV0ID0gc2Rpb19tZW1jcHlfdG9pbyhydHdzZGlvLVxcdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVxcdTAwM2VkYXRhLFxcbitcXHRcXHRcXHQgICAgICAgd3JpdGVfc2l6ZSk7XFxuIFxcdGlmIChidXNfY2xhaW0pXFxuIFxcdFxcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXFx1MDAzZXNkaW9fZnVuYyk7XFxuIFxcbi1cXHRpZiAocmV0KVxcbitcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHJ0d193YXJuKHJ0d2RldixcXG4gXFx0XFx0XFx0IFxcXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFxcXCIsXFxuLVxcdFxcdFxcdCB0eHNpemUsIHR4YWRkcik7XFxuK1xcdFxcdFxcdCB3cml0ZV9zaXplLCB0eGFkZHIpO1xcbitcXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xcbitcXHRcXHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0XFx0cnR3X3NkaW9fODcyM2JzX2NvbnN1bWVfdHhwZyhydHdkZXYsIHF1ZXVlLCBwYWdlcyk7XFxuK1xcdH1cXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdGlmIChydGw4NzIzYnMpXFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfY3JlZGl0X2xvY2spO1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcbkBAIC02NzcsNyArOTIxLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4ge1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVxcdTAwM2Vwcml2O1xcbiBcXG4tXFx0cnR3c2Rpby1cXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfCBSRUdfU0RJT19ISU1SX0NQV00xO1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRydHdzZGlvLVxcdTAwM2VpcnFfbWFzayA9IFJFR19TRElPX0hJTVJfUlhfUkVRVUVTVCB8XFxuK1xcdFxcdFxcdFxcdCAgICBSRUdfU0RJT19ISU1SX0NQV00xO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5AQCAtNjg1LDYgKzkzMyw3IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHR1OCBzaXplLCB0aW1lb3V0O1xcbiBcXG4gXFx0c3dpdGNoIChydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkKSB7XFxuK1xcdGNhc2UgUlRXX0NISVBfVFlQRV84NzIzQjpcXG4gXFx0Y2FzZSBSVFdfQ0hJUF9UWVBFXzg3MDNCOlxcbiBcXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XFxuIFxcdGNhc2UgUlRXX0NISVBfVFlQRV84ODEyQTpcXG5AQCAtNzEyLDYgKzk2MSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRcXHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xcbiBcXG4gXFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0cnR3X3dyaXRlOF9tYXNrKHJ0d2RldiwgUkVHX1JYRE1BX01PREUsIEJJVF9ETUFfQlVSU1RfQ05ULCAweDMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfaW50ZXJydXB0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuQEAgLTc0OSw5ICsxMDAwLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXFxuKyAqIGEgcmVwYWlyIHBhdGgsIG5vdCBwYXJ0IG9mIHRoZSBub3JtYWwgc3RhcnQgc2VxdWVuY2U6IGEgbm9uLXplcm8gZnJlZSBwYWdlXFxuKyAqIGNvdW50IG1lYW5zIHRoZSBhbGxvY2F0aW9uIGxhdGNoZWQgZHVyaW5nIHBvd2VyIG9uIGFuZCBtdXN0IGJlIGxlZnQgYWxvbmUsXFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X2NoaXBfaW5mbyAqY2hpcCA9IHJ0d2Rldi1cXHUwMDNlY2hpcDtcXG4rXFx0c3RydWN0IHJ0d19maWZvX2NvbmYgKmZpZm8gPSBcXHUwMDI2cnR3ZGV2LVxcdTAwM2VmaWZvO1xcbitcXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcXG4rXFx0dTMyIGZyZWVfdHhwZztcXG4rXFx0dTE2IHB1YnFfbnVtO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XFxuK1xcdGlmIChmcmVlX3R4cGcgfHwgIWZpZm8tXFx1MDAzZWFjcV9wZ19udW0pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXFx1MDAyNnB1YnFfbnVtKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHBnX3RibCA9IFxcdTAwMjZjaGlwLVxcdTAwM2VwYWdlX3RhYmxlWzBdO1xcbitcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19SUVBOX05QUSxcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX05FKHBnX3RibC1cXHUwMDNlbnFfbnVtLCBwZ190YmwtXFx1MDAzZWV4cV9udW0pKTtcXG4rXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfUlFQTixcXG4rXFx0XFx0ICAgIEJJVF9SUVBOX0hMUChwZ190YmwtXFx1MDAzZWhxX251bSwgcGdfdGJsLVxcdTAwM2VscV9udW0sIHB1YnFfbnVtKSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb19zdGFydChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiB7XFxuK1xcdHUzMiBjbGVhcjtcXG4rXFxuK1xcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcXG4rXFx0XFx0aW50IHJldCA9IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHJ0d2Rldik7XFxuK1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0XFx0cmV0ID0gcnR3X3NkaW9fODcyM2JzX2luaXRfZnJlZV90eHBnKHJ0d2Rldik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuIFxcdHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihydHdkZXYpO1xcbitcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xcbitcXHRcXHRjbGVhciA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19ISVNSKSBcXHUwMDI2IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFx0XFx0aWYgKGNsZWFyKVxcbitcXHRcXHRcXHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcXG4rXFx0fVxcbitcXG4gXFx0cnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChydHdkZXYpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTgxNSw3ICsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFxuLVxcdHF1ZXVlX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuK1xcdC8qXFxuK1xcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XFxuK1xcdCAqIHF1ZXVlZCBmcmFtZSBpcyBub3QgaGVsZCBiYWNrIGJ5IGl0LlxcbitcXHQgKi9cXG4rXFx0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVxcdTAwM2V0eHdxLCBcXHUwMDI2cnR3c2Rpby1cXHUwMDNldHhfaGFuZGxlcl9kYXRhLVxcdTAwM2V3b3JrLCAwKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fbGlua19wcyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCBib29sIGVudGVyKVxcbkBAIC04MzEsNiArMTEzOCw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2ludGVyZmFjZV9jZmcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFxuIFxcdHZhbCA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMKTtcXG4gXFx0dmFsIFxcdTAwMjY9IDB4ZmZmODtcXG4rXFx0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4rXFx0XFx0dmFsIHw9IEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRTtcXG4gXFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xcbiB9XFxuIFxcbkBAIC05MjIsMTIgKzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcXG4gXFx0cmV0dXJuIHJ0d19zZGlvX3dyaXRlX2RhdGEocnR3ZGV2LCBcXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XFxuIH1cXG4gXFxuKy8qXFxuKyAqIEJhY2stcHJlc3N1cmUgb24gdGhlIGRhdGEgQUNzIChCSy9CRS9WSS9WTyk6IG9uY2UgdGhlIHNvZnR3YXJlIEZJRk8gZmlsbHNcXG4rICogcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIHN0b3AgdGhlIGNvcnJlc3BvbmRpbmcgbWFjODAyMTEgcXVldWUgc28gaXQgc3RvcHNcXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cXG4rICogYWdhaW4gZnJvbSB0aGUgVFggZHJhaW4gcGF0aCBvbmNlIHRoZSBGSUZPIGZhbGxzIGJhY2sgdG8gdGhlIGxvdyB3YXRlcm1hcmsuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoUkVBRF9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdFdSSVRFX09OQ0UocnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIHRydWUpO1xcbitcXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXFx1MDAzZWh3LCBxX21hcCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBUaGUgd29ya2VyIG1heSBoYXZlIGRyYWluZWQgdGhlIHF1ZXVlIGJldHdlZW4gdGhlIGxlbmd0aCBjaGVja1xcbitcXHQgKiBhYm92ZSBhbmQgdGhlIGZsYWcgYmVjb21pbmcgdmlzaWJsZTsgaXRzIHdha2UgY2hlY2sgdGhlbiBzYXcgdGhlXFxuK1xcdCAqIGZsYWcgc3RpbGwgY2xlYXIgYW5kIHRoaXMgc3RvcCB3b3VsZCBuZXZlciBiZSB1bmRvbmUuIFJlLWNoZWNrXFxuK1xcdCAqIG5vdyB0aGF0IHRoZSBmbGFnIGlzIHNldCBhbmQgdW5kbyB0aGUgc3RvcCBpZiBzby4gQm90aCBzaWRlcyBjYW5cXG4rXFx0ICogd2FrZSwgd2hpY2ggaXMgaGFybWxlc3M7IHRoZSBiYXJyaWVyIHBhaXJzIHdpdGggdGhlIG9uZSBpblxcbitcXHQgKiBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZSgpIHNvIGF0IGxlYXN0IG9uZSBzaWRlIGRvZXMuXFxuK1xcdCAqL1xcbitcXHRzbXBfbWIoKTtcXG4rXFx0aWYgKHNrYl9xdWV1ZV9sZW4oXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXFx1MDAzYz1cXG4rXFx0ICAgIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikge1xcbitcXHRcXHRXUklURV9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7XFxuK1xcdFxcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cXHUwMDNlaHcsIHFfbWFwKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfd2FrZV90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTE2IHFfbWFwKVxcbit7XFxuK1xcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuK1xcbitcXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSB8fCBxdWV1ZSBcXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHQvKiBwYWlycyB3aXRoIHRoZSBiYXJyaWVyIGluIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKCkgKi9cXG4rXFx0c21wX21iKCk7XFxuK1xcbitcXHRpZiAoIVJFQURfT05DRShydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdGlmIChza2JfcXVldWVfbGVuKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFxcdTAwM2UgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRXUklURV9PTkNFKHJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdLCBmYWxzZSk7XFxuK1xcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cXHUwMDNlaHcsIHFfbWFwKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBydHdfdHhfcGt0X2luZm8gKnBrdF9pbmZvLFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0ZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSA9IHJ0d190eF9xdWV1ZV9tYXBwaW5nKHNrYik7XFxuK1xcdHUxNiBxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xcbiBcXHRzdHJ1Y3QgcnR3X3NkaW9fdHhfZGF0YSAqdHhfZGF0YTtcXG4gXFxuIFxcdHJ0d19zZGlvX3R4X3NrYl9wcmVwYXJlKHJ0d2RldiwgcGt0X2luZm8sIHNrYiwgcXVldWUpO1xcbkBAIC05MzUsOCArMTMwNywxNSBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuIFxcdHR4X2RhdGEgPSBydHdfc2Rpb19nZXRfdHhfZGF0YShza2IpO1xcbiBcXHR0eF9kYXRhLVxcdTAwM2VzbiA9IHBrdF9pbmZvLVxcdTAwM2VzbjtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIHNrYl9xdWV1ZV90YWlsKCkgcHVibGlzaGVzIHRoZSBza2IgdG8gdGhlIFRYIHdvcmtlciwgd2hpY2ggbWF5XFxuK1xcdCAqIHByb2Nlc3MgYW5kIGZyZWUgaXQgaW1tZWRpYXRlbHksIHNvIG5vdGhpbmcgbWF5IHRvdWNoIHRoZSBza2JcXG4rXFx0ICogcGFzdCB0aGlzIHBvaW50LlxcbitcXHQgKi9cXG4gXFx0c2tiX3F1ZXVlX3RhaWwoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcXG4gXFxuK1xcdHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0xMDk1LDYgKzE0NzQsMTQgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faGFuZGxlX2ludGVycnVwdChzdHJ1Y3Qgc2Rpb19mdW5jICpzZGlvX2Z1bmMpXFxuIFxcdFxcdHJ0d19zZGlvX3J4X2lzcihydHdkZXYpO1xcbiBcXHR9XFxuIFxcbitcXHQvKlxcbitcXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcXG4rXFx0ICogc3RhdHVzIGJpdHMgYXJlIHdyaXR0ZW4gYmFjaywgc28gYWNrbm93bGVkZ2Ugb25seSB0aGUgYml0cyB0aGlzXFxuK1xcdCAqIGRyaXZlciBkZWZpbmVzLiBPdGhlciBjaGlwcyBrZWVwIHRoZSBleGlzdGluZyBiZWhhdmlvdXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRoaXNyIFxcdTAwMjY9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcXG4rXFxuIFxcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XFxuIFxcbiBcXHRydHdzZGlvLVxcdTAwM2VpcnFfdGhyZWFkID0gTlVMTDtcXG5AQCAtMTIzMSwzMyArMTYxOCw4MSBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbmRpY2F0ZV90eF9zdGF0dXMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcXG4gXFx0aWVlZTgwMjExX3R4X3N0YXR1c19pcnFzYWZlKGh3LCBza2IpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuKy8qXFxuKyAqIFNlbmQgb25lIGZyYW1lIGZyb20gQHF1ZXVlLiBSZXR1cm5zIDAgd2hlbiBhIGZyYW1lIHdhcyB3cml0dGVuLCAxIHdoZW4gdGhlXFxuKyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcXG4rICogdGhlIGZyYW1lIGlzIHB1dCBiYWNrIGF0IHRoZSBoZWFkIG9mIHRoZSBxdWV1ZS5cXG4rICovXFxuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0c3RydWN0IHNrX2J1ZmYgKnNrYjtcXG4rXFx0dTE2IHFfbWFwO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c2tiID0gc2tiX2RlcXVldWUoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSk7XFxuIFxcdGlmICghc2tiKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdFxcdHJldHVybiAxO1xcbiBcXG4rXFx0cV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcXG4gXFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XFxuLVxcdFxcdHJldHVybjtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4gXFx0fVxcbiBcXG4gXFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcXG4rXFxuK1xcdHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBEZWNpZGUgd2hldGhlciB0aGUgUlRMODcyM0JTIHdhbnRzIHRoZSBUWCB3b3JrIHRvIHJ1biBhZ2FpbiwgYW5kIGlmIHNvXFxuKyAqIGFycmFuZ2UgaXQgYW5kIHRlbGwgdGhlIGNhbGxlciB0byBzdG9wIGRyYWluaW5nLiBUd28gY2FzZXMgbmVlZCBpdC5cXG4rICpcXG4rICogQSB0cmFuc21pdCBwYWdlIG9yIG91dHB1dCBxdWV1ZSBzaG9ydGFnZSBhbmQgYSBmYWlsZWQgc2tiIGV4cGFuc2lvbiBhcmVcXG4rICogdHJhbnNpZW50IGFuZCBsZWF2ZSB0aGUgZnJhbWUgcXVldWVkLCBzbyBjb21lIGJhY2sgZm9yIGl0IHNob3J0bHkuIFRoYXRcXG4rICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxcbisgKiBubyBmdXJ0aGVyIGZyYW1lcywgc28gbm90aGluZyBlbHNlIHdvdWxkIGtpY2sgdGhpcyB3b3JrIGl0ZW0gYW5kIHRoZSBhY2Nlc3NcXG4rICogY2F0ZWdvcnkgd291bGQgc3RheSBzdG9wcGVkIGZvciBnb29kLiBUaGUgcmVtYWluaW5nIGVycm9ycyBhcmUgbG9nZ2VkIHdoZXJlXFxuKyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXFxuKyAqXFxuKyAqIEFmdGVyIGEgbWFuYWdlbWVudCBmcmFtZSwgcmVzdGFydCBmcm9tIHRoZSBoaWdoZXN0IHByaW9yaXR5IHF1ZXVlIHNvIHRoZVxcbisgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cXG4rICovXFxuK3N0YXRpYyBib29sIHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqd29ya19kYXRhLFxcbitcXHRcXHRcXHRcXHRcXHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsIGludCByZXQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4rXFx0dW5zaWduZWQgbG9uZyBkZWxheTtcXG4rXFxuK1xcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRpZiAocmV0ID09IC1FQlVTWSB8fCByZXQgPT0gLUVOT01FTSlcXG4rXFx0XFx0ZGVsYXkgPSBSVFdfU0RJT19UWF9SRVRSWV9ERUxBWTtcXG4rXFx0ZWxzZSBpZiAocmV0ID09IDAgXFx1MDAyNlxcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpXFxuK1xcdFxcdGRlbGF5ID0gMDtcXG4rXFx0ZWxzZVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRxdWV1ZV9kZWxheWVkX3dvcmsocnR3c2Rpby1cXHUwMDNldHh3cSwgXFx1MDAyNndvcmtfZGF0YS1cXHUwMDNld29yaywgZGVsYXkpO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbiB7XFxuIFxcdHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSA9XFxuLVxcdFxcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhLCB3b3JrKTtcXG4rXFx0XFx0Y29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSwgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSxcXG4rXFx0XFx0XFx0ICAgICB3b3JrKTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbi1cXHRpbnQgbGltaXQsIHF1ZXVlO1xcbitcXHRpbnQgbGltaXQsIHF1ZXVlLCByZXQ7XFxuIFxcbiBcXHRydHdkZXYgPSB3b3JrX2RhdGEtXFx1MDAzZXJ0d2RldjtcXG4gXFx0cnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXFx1MDAzZXByaXY7XFxuQEAgLTEyNjcsNyArMTcwMiwxMyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4gXFxuIFxcdGZvciAocXVldWUgPSBSVEtfTUFYX1RYX1FVRVVFX05VTSAtIDE7IHF1ZXVlIFxcdTAwM2U9IDA7IHF1ZXVlLS0pIHtcXG4gXFx0XFx0Zm9yIChsaW1pdCA9IDA7IGxpbWl0IFxcdTAwM2MgMTAwMDsgbGltaXQrKykge1xcbi1cXHRcXHRcXHRydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRyZXQgPSBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2UgMClcXG4rXFx0XFx0XFx0XFx0YnJlYWs7XFxuK1xcbitcXHRcXHRcXHRpZiAocnR3X3NkaW9fODcyM2JzX3Jlc2NoZWR1bGVfdHgocnR3ZGV2LCB3b3JrX2RhdGEsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcXVldWUsIHJldCkpXFxuK1xcdFxcdFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdFxcdFxcdGlmIChza2JfcXVldWVfZW1wdHkoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkpXFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xMjk0LDE0ICsxNzM1LDE4IEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9faW5pdF90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbiBcXG4tXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIFJUS19NQVhfVFhfUVVFVUVfTlVNOyBpKyspXFxuK1xcdG11dGV4X2luaXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XFxuIFxcdFxcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X3F1ZXVlW2ldKTtcXG4rXFx0XFx0cnR3c2Rpby1cXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xcbitcXHR9XFxuIFxcdHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSA9IGttYWxsb2Nfb2JqKCpydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xcbiBcXHRpZiAoIXJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcXG4gXFx0XFx0Z290byBlcnJfZGVzdHJveV93cTtcXG4gXFxuIFxcdHJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNlcnR3ZGV2ID0gcnR3ZGV2O1xcbi1cXHRJTklUX1dPUksoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yaywgcnR3X3NkaW9fdHhfaGFuZGxlcik7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEtXFx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbkBAIC0xMzE1LDYgKzE3NjAsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4gXFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXFx1MDAyNnJ0d3NkaW8tXFx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cXHUwMDNld29yayk7XFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXFx1MDAzZXR4d3EpO1xcbiBcXHRrZnJlZShydHdzZGlvLVxcdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xcbiBcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbmluZGV4IDQ1N2U4YjAyMzgwZTUuLjZlN2U2MDA5NzQ0YjAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmhcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxcbkBAIC0yMiw2ICsyMiw3IEBAXFxuIFxcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19UWF9DVFJMXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAwKVxcbisjZGVmaW5lIEJJVF9TRElPX1RYX0NUUkxfQUxXQVlTX1JFQ09HTklaRVxcdEJJVCg0KVxcbiBcXG4gLypTRElPIHN0YXR1cyB0aW1lb3V0Ki9cXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxcbkBAIC03Nyw2ICs3OCwxNCBAQFxcbiAvKiB0aGUgZm9sbG93aW5nIHR3byBhcmUgUlRMODE4OCBTRElPIFNwZWNpZmljICovXFxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXFx0XFx0XFx0QklUKDI4KVxcbiAjZGVmaW5lIFJFR19TRElPX0hJU1JfVFNGX0JJVDMyX1RPR0dMRVxcdFxcdEJJVCgyOSlcXG4rI2RlZmluZSBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0tcXHRcXHRcXFxcXFxuK1xcdChSRUdfU0RJT19ISVNSX1RYRVJSIHwgUkVHX1NESU9fSElTUl9SWEVSUiB8IFxcXFxcXG4rXFx0IFJFR19TRElPX0hJU1JfVFhGT1ZXIHwgUkVHX1NESU9fSElTUl9SWEZPVlcgfCBcXFxcXFxuK1xcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DMkhDTUQgfCBSRUdfU0RJT19ISVNSX0NQV00xIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9DUFdNMiB8IFJFR19TRElPX0hJU1JfSFNJU1JfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcXFxcbitcXHQgUkVHX1NESU9fSElTUl9QU1RJTUVPVVQgfCBSRUdfU0RJT19ISVNSX09DUElOVClcXG4gXFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cXG4gI2RlZmluZSBSRUdfU0RJT19IQ1BXTVxcdFxcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxOSlcXG5AQCAtODYsNiArOTUsMTAgQEBcXG4gI2RlZmluZSBSRUdfU0RJT19PUVRfRlJFRV9QR1xcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAxRSlcXG4gLyogRnJlZSBUeCBCdWZmZXIgUGFnZSAqL1xcbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1xcdFxcdFxcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX0hJR0hcXHRcXHRcXHRHRU5NQVNLKDcsIDApXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19OT1JNQUxcXHRcXHRcXHRHRU5NQVNLKDE1LCA4KVxcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXFx0XFx0XFx0R0VOTUFTSygyMywgMTYpXFxuKyNkZWZpbmUgQklUX0ZSRUVfVFhQR19QVUJcXHRcXHRcXHRHRU5NQVNLKDMxLCAyNClcXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAxICovXFxuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXFx0XFx0XFx0XFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDI0KVxcbiAvKiBIQ0kgQ3VycmVudCBQb3dlciBNb2RlIDIgKi9cXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcXG4gfTtcXG4gXFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xcbi1cXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayB3b3JrO1xcbiBcXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xcbiB9O1xcbiBcXG5AQCAtMTU5LDYgKzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xcbiBcXHRzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdHh3cTtcXG4gXFx0c3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSAqdHhfaGFuZGxlcl9kYXRhO1xcbiBcXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFx0Ym9vbCB0eF9xdWV1ZV9zdG9wcGVkW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcXG4rXFxuK1xcdGF0b21pY190IGZyZWVfcGdfaGlnaDtcXG4rXFx0YXRvbWljX3QgZnJlZV9wZ19ub3JtYWw7XFxuK1xcdGF0b21pY190IGZyZWVfcGdfbG93O1xcbitcXHRhdG9taWNfdCBmcmVlX3BnX3B1YjtcXG4rXFx0YXRvbWljX3QgdHhfb3F0X2ZyZWU7XFxuK1xcdC8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi9cXG4rXFx0c3RydWN0IG11dGV4IHR4X2NyZWRpdF9sb2NrO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHJ0d19zZGlvX3BtX29wcztcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXFxuaW5kZXggODc4NmJiYjQyMWMyYi4uNGUxMTBhNDU3ZTcxZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcXG5AQCAtMjA4LDggKzIwOCw5IEBAIHZvaWQgcnR3X3R4X3JlcG9ydF9lbnF1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHN0cnVjdCBza19idWZmICpza2IsIHU4IHNuKVxcbiBcXHRfX3NrYl9xdWV1ZV90YWlsKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXF1ZXVlLCBza2IpO1xcbiBcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0eF9yZXBvcnQtXFx1MDAzZXFfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgcnR3ZGV2LVxcdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKVxcbitcXHRpZiAoKHJ0d2Rldi1cXHUwMDNlY2hpcC1cXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzRCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIHJ0d2Rldi1cXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1VTQikgfHxcXG4rXFx0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcXG4gXFx0XFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XFxuIFxcbiBcXHRtb2RfdGltZXIoXFx1MDAyNnR4X3JlcG9ydC1cXHUwMDNlcHVyZ2VfdGltZXIsIGppZmZpZXMgKyB0aW1lb3V0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MDIuMjU5NDI1OTY2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODU0NjQzMjM5MDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgc3VwcG9ydCBhbmQgZml4ZXMgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBXaS1GaSBjaGlwLCB3aGljaCBvcGVyYXRlcyBvdmVyIHRoZSBTRElPIGJ1cy4gVGhlIGZ1bmN0aW9uYWwgY2hhbmdlcyBhcmUgZWl0aGVyIGVudGlyZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNESU8tc3BlY2lmaWMgZHJpdmVyIGZpbGUgKHNkaW8uYykgb3IgZ3VhcmRlZCBieSB0aGUgcnR3X2lzXzg3MjNicygpIGhlbHBlciwgd2hpY2ggZXhwbGljaXRseSBjaGVja3MgZm9yIFJUV19IQ0lfVFlQRV9TRElPLiBTaW5jZSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgKGxpa2UgUUVNVSBvciBHQ0UpIGRvIG5vdCBzdXBwb3J0IHNvZnR3YXJlIGVtdWxhdGlvbiBvZiBhcmJpdHJhcnkgU0RJTyBkZXZpY2VzICh1bmxpa2UgVVNCIHZpYSBkdW1teV9oY2QvcmF3X2dhZGdldCksIHRoZSBTRElPIGRyaXZlciBjYW5ub3QgYmUgcHJvYmVkIGFuZCB0aGVzZSBjb2RlIHBhdGhzIGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGR1cmluZyBmdXp6aW5nLiBUaGUgbWlub3IgY2hhbmdlcyB0byBzaGFyZWQgUlgvVFggcGF0aHMgZm9yIG90aGVyIGNoaXBzIGFyZSBwdXJlbHkgbm9uLWZ1bmN0aW9uYWwgY29uZGl0aW9uIHJlb3JkZXJpbmdzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNmNlZTU4NmI1NDU1ZTViYjM1NzFjM2ZhYTEyODBiOGNmOWY2M2JhMlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgQXVnIDIwIDA5OjUwOjU5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuaW5kZXggYzZlOTgxYmE3OTg2OC4uOGY4NmY3YzEyZGU1YSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaFxuQEAgLTE5NCw2ICsxOTQsNyBAQCBlbnVtIHJ0d19jaGlwX3R5cGUge1xuIFx0UlRXX0NISVBfVFlQRV84NzIzRCxcbiBcdFJUV19DSElQX1RZUEVfODgyMUMsXG4gXHRSVFdfQ0hJUF9UWVBFXzg3MDNCLFxuK1x0UlRXX0NISVBfVFlQRV84NzIzQixcbiBcdFJUV19DSElQX1RZUEVfODgyMUEsXG4gXHRSVFdfQ0hJUF9UWVBFXzg4MTJBLFxuIFx0UlRXX0NISVBfVFlQRV84ODE0QSxcbkBAIC0yMTk0LDYgKzIxOTUsMTIgQEAgc3RhdGljIGlubGluZSBib29sIHJ0d19jaGlwX2hhc190eF9zdGJjKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNldHhfc3RiYztcbiB9XG4gXG4rc3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRyZXR1cm4gcnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlaWQgPT0gUlRXX0NISVBfVFlQRV84NzIzQiBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU87XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdTggcnR3X2FjcXVpcmVfbWFjaWQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG1hY19pZDtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmMgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbmluZGV4IDAxZmQyOTlhYmI3ZmUuLmZkZTIxYzg0MGFjMDIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J4LmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnguY1xuQEAgLTI1MywxMCArMjUzLDEyIEBAIHN0YXRpYyB2b2lkIHJ0d19yeF9maWxsX3J4X3N0YXR1cyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFxuIFx0cnR3X3J4X2FkZHJfbWF0Y2gocnR3ZGV2LCBwa3Rfc3RhdCwgaGRyKTtcbiBcbi1cdC8qIFJ0bDg3MjNjcyBkcml2ZXIgY2hlY2tzIGZvciBzaXplIFx1MDAzYyAxNCBvciBzaXplIFx1MDAzZSA4MTkyIGFuZFxuLVx0ICogc2ltcGx5IGRyb3BzIHRoZSBwYWNrZXQuXG4rXHQvKlxuK1x0ICogUnRsODcyM2NzIGFuZCBydGw4NzIzYnMgZHJpdmVycyBjaGVjayBmb3Igc2l6ZSBcdTAwM2MgMTQgb3Igc2l6ZSBcdTAwM2UgODE5MlxuK1x0ICogYW5kIHNpbXBseSBkcm9wIHRoZSBwYWNrZXQuXG4gXHQgKi9cbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xuIFx0XHRyeF9zdGF0dXMtXHUwMDNlZmxhZyB8PSBSWF9GTEFHX05PX1BTRFU7XG4gXHRcdHJ0d19kYmcocnR3ZGV2LCBSVFdfREJHX1JYLCBcInplcm8gbGVuZ3RoIHBhY2tldFwiKTtcbiBcdH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uYyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5pbmRleCA1YjQwZDc0YjE2ZWUwLi5hMjFjMzY3MzdlNzg3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jXG5AQCAtMjAsNiArMjAsMTcgQEBcbiAjaW5jbHVkZSBcInR4LmhcIlxuIFxuICNkZWZpbmUgUlRXX1NESU9fSU5ESVJFQ1RfUldfUkVUUklFU1x0XHRcdDUwXG4rI2RlZmluZSBSVFdfU0RJT19PUVRfVElNRU9VVF9NU1x0XHRcdFx0MTAwMFxuK1xuKy8qXG4rICogODcyM0JTIFNESU8gVFggRklGTyBiYWNrLXByZXNzdXJlIHdhdGVybWFya3M6IHN0b3AgdGhlIG1hYzgwMjExIHF1ZXVlIG9uY2VcbisgKiB0aGUgcGVyLUFDIHNvZnR3YXJlIEZJRk8gZmlsbHMgcGFzdCB0aGUgaGlnaCB3YXRlcm1hcmssIGFuZCB3YWtlIGl0IGZyb20gdGhlXG4rICogVFggZHJhaW4gcGF0aCBvbmNlIGl0IGZhbGxzIGJhY2sgdG8gdGhlIGxvdyBvbmUuIEJvdW5kcyB0aGUgcXVldWVpbmcgbGF0ZW5jeVxuKyAqIHRoYXQgb3RoZXJ3aXNlIGNhdXNlcyB1cGxpbmsgYnVmZmVyYmxvYXQgLyBjb25nZXN0aW9uIGNvbGxhcHNlLlxuKyAqL1xuKyNkZWZpbmUgUlRXX1NESU9fVFhfRklGT19ISVdBVEVSXHRcdFx0MTZcbisjZGVmaW5lIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUlx0XHRcdDhcbisjZGVmaW5lIFJUV19TRElPX1RYX1JFVFJZX0RFTEFZXHRcdFx0bXNlY3NfdG9famlmZmllcygxKVxuIFxuIHN0YXRpYyBib29sIHJ0d19zZGlvX2lzX2J1c19hZGRyKHUzMiBhZGRyKVxuIHtcbkBAIC01NDgsMTIgKzU1OSwxNTcgQEAgc3RhdGljIGludCBydHdfc2Rpb19yZWFkX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggKmJ1Ziwgc2l6ZV90IGNvdW50KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rLypcbisgKiBUaGUgY2FjaGVkIGZyZWUgcGFnZSBjb3VudGVycyBhcmUgYSBmYXN0IHBhdGggaGludCBvbmx5LiBUaGV5IGFyZSB3cml0dGVuXG4rICogZnJvbSB0aGUgc2luZ2xlIHRocmVhZGVkIFRYIHdvcmsgYW5kLCBmb3IgSDJDIGFuZCByZXNlcnZlZCBwYWdlIHdyaXRlcyxcbisgKiBmcm9tIHByb2Nlc3MgY29udGV4dCwgc28gdGhleSBhcmUgYXRvbWljX3Q7IHdoZW5ldmVyIHRoZXkgY2xhaW0gdGhlcmUgaXNcbisgKiBub3QgZW5vdWdoIHJvb20gdGhleSBhcmUgcmVzeW5jaHJvbmlzZWQgZnJvbSB0aGUgY2hpcCBiZWZvcmUgdGhlIGNhbGxlclxuKyAqIGdpdmVzIHVwLCB3aGljaCBhbHNvIGFic29yYnMgYSBsb3N0IHVwZGF0ZS5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcmVfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgICB1MzIgZnJlZV90eHBnKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2gsXG4rXHRcdCAgIHUzMl9nZXRfYml0cyhmcmVlX3R4cGcsIEJJVF9GUkVFX1RYUEdfSElHSCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbm9ybWFsLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX05PUk1BTCkpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93LFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX0xPVykpO1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfcHViLFxuK1x0XHQgICB1MzJfZ2V0X2JpdHMoZnJlZV90eHBnLCBCSVRfRlJFRV9UWFBHX1BVQikpO1xuK31cbitcbisvKlxuKyAqIFJlZnJlc2ggdGhlIGNhY2hlZCBjb3VudGVycyBmcm9tIHRoZSBjaGlwLiBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlIGNoaXBcbisgKiByZXBvcnRzIG5vIGZyZWUgcGFnZXMgYXQgYWxsLCB3aGljaCBtZWFucyB0aGUgY291bnRzIGNhbm5vdCBiZSB0cnVzdGVkXG4rICogYW5kIHRoZSBjYWxsZXIgaGFzIHRvIGRlY2lkZSB3aGF0IHRvIGRvIGluc3RlYWQuXG4rICovXG4rc3RhdGljIGJvb2wgcnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0dTMyIGZyZWVfdHhwZyA9IHJ0d19yZWFkMzIocnR3ZGV2LCBSRUdfU0RJT19GUkVFX1RYUEcpO1xuK1xuK1x0aWYgKCFmcmVlX3R4cGcpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJ0d19zZGlvXzg3MjNic19zdG9yZV9mcmVlX3R4cGcocnR3ZGV2LCBmcmVlX3R4cGcpO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuKy8qXG4rICogU2l6ZSBvZiB0aGUgcHVibGljIHBhZ2UgcG9vbDogd2hhdGV2ZXIgdGhlIHRyYW5zbWl0IHBhZ2UgYWxsb2NhdGlvbiBoYXNcbisgKiBsZWZ0IG9uY2UgdGhlIHBlciBxdWV1ZSBwb29scyBhcmUgdGFrZW4gb3V0LiBGYWlscyBpZiB0aGUgYWxsb2NhdGlvblxuKyAqIGNhbm5vdCBjb3ZlciB0aGUgcmVzZXJ2ZWQgcXVldWVzLCBzaW5jZSB0aGUgcmVtYWluZGVyIHdvdWxkIHVuZGVyZmxvdyBhbmRcbisgKiB0aGVyZSB3b3VsZCBiZSBubyBzZW5zaWJsZSBwb29sIHRvIGhhbmQgb3V0LlxuKyAqL1xuK3N0YXRpYyBpbnQgcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHUxNiAqcHVicV9udW0pXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19wYWdlX3RhYmxlICpwZ190YmwgPSBcdTAwMjZydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3RhYmxlWzBdO1xuK1x0dTE2IGFjcV9wZ19udW0gPSBydHdkZXYtXHUwMDNlZmlmby5hY3FfcGdfbnVtO1xuK1x0dTE2IHJlc2VydmVkX251bTtcbitcbitcdHJlc2VydmVkX251bSA9IHBnX3RibC1cdTAwM2VocV9udW0gKyBwZ190YmwtXHUwMDNlbHFfbnVtICsgcGdfdGJsLVx1MDAzZW5xX251bSArXG4rXHRcdCAgICAgICBwZ190YmwtXHUwMDNlZXhxX251bSArIHBnX3RibC1cdTAwM2VnYXBxX251bTtcbitcdGlmIChhY3FfcGdfbnVtIFx1MDAzYz0gcmVzZXJ2ZWRfbnVtKSB7XG4rXHRcdHJ0d19lcnIocnR3ZGV2LFxuK1x0XHRcdFwibm8gdHJhbnNtaXQgcGFnZXMgbGVmdCBmb3IgdGhlIHB1YmxpYyBxdWV1ZTogJXUgb2YgJXUgcmVzZXJ2ZWRcXG5cIixcbitcdFx0XHRyZXNlcnZlZF9udW0sIGFjcV9wZ19udW0pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdCpwdWJxX251bSA9IGFjcV9wZ19udW0gLSByZXNlcnZlZF9udW07XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUxNiBwdWJxX251bTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBTZWVkIGZyb20gdGhlIHBhZ2UgdGFibGUgd2hlbiB0aGUgY2hpcCBoYXMgbm90aGluZyB0byByZXBvcnQgeWV0LiAqL1xuK1x0aWYgKCFydHdfc2Rpb184NzIzYnNfc3luY19mcmVlX3R4cGcocnR3ZGV2KSkge1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfcHVicV9udW0ocnR3ZGV2LCBcdTAwMjZwdWJxX251bSk7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cGdfdGJsID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfaGlnaCwgcGdfdGJsLVx1MDAzZWhxX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbCwgcGdfdGJsLVx1MDAzZW5xX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2xvdywgcGdfdGJsLVx1MDAzZWxxX251bSk7XG4rXHRcdGF0b21pY19zZXQoXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX3B1YiwgcHVicV9udW0pO1xuK1x0fVxuK1xuK1x0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLFxuK1x0XHQgICBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRykpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogU3VtIG9mIHRoZSBxdWV1ZSdzIGRlZGljYXRlZCBjb3VudGVyIGFuZCB0aGUgcHVibGljIHBvb2wsIGNsYW1wZWQgYXQgemVybzpcbisgKiBhIGxvc3QgdXBkYXRlIGJldHdlZW4gdGhlIGNoZWNrIGJlbG93IGFuZCBydHdfc2Rpb184NzIzYnNfY29uc3VtZV90eHBnKClcbisgKiBjYW4gYnJpZWZseSBkcml2ZSBhIGNvdW50ZXIgbmVnYXRpdmUsIGFuZCBsZXR0aW5nIHRoYXQgd3JhcCB3b3VsZCBoaWRlIHRoZVxuKyAqIHNob3J0YWdlIGluc3RlYWQgb2YgdHJpZ2dlcmluZyBhIHJlc3luYyBmcm9tIHRoZSBjaGlwLlxuKyAqL1xuK3N0YXRpYyB1bnNpZ25lZCBpbnQgcnR3X3NkaW9fODcyM2JzX3BhZ2VzX2ZyZWUoc3RydWN0IHJ0d19kZXYgKnJ0d2RldixcbitcdFx0XHRcdFx0ICAgICAgIGF0b21pY190ICpkZWRpY2F0ZWQpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0aW50IGZyZWU7XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKSArIGF0b21pY19yZWFkKFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpO1xuK1xuK1x0cmV0dXJuIGZyZWUgXHUwMDNlIDAgPyBmcmVlIDogMDtcbit9XG4rXG4rc3RhdGljIGF0b21pY190ICpydHdfc2Rpb184NzIzYnNfZnJlZV90eHBnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIHU4IHF1ZXVlKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdHN3aXRjaCAocXVldWUpIHtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZJOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX25vcm1hbDtcbitcdGNhc2UgUlRXX1RYX1FVRVVFX0JFOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQks6XG4rXHRcdHJldHVybiBcdTAwMjZydHdzZGlvLVx1MDAzZWZyZWVfcGdfbG93O1xuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfQkNOOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSDJDOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfSEkwOlxuK1x0Y2FzZSBSVFdfVFhfUVVFVUVfTUdNVDpcbitcdGNhc2UgUlRXX1RYX1FVRVVFX1ZPOlxuK1x0XHRyZXR1cm4gXHUwMDI2cnR3c2Rpby1cdTAwM2VmcmVlX3BnX2hpZ2g7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gTlVMTDtcbitcdH1cbit9XG4rXG4gc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRcdFx0XHQgICAgc2l6ZV90IGNvdW50KVxuIHtcbiBcdHVuc2lnbmVkIGludCBwYWdlc19mcmVlLCBwYWdlc19uZWVkZWQ7XG4gXG4tXHRpZiAocnR3X2NoaXBfd2NwdV84MDUxKHJ0d2RldikpIHtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpIHtcbitcdFx0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcbitcdFx0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdFx0aWYgKCFkZWRpY2F0ZWQpIHtcbitcdFx0XHRydHdfd2FybihydHdkZXYsIFwiVW5rbm93biBtYXBwaW5nIGZvciBxdWV1ZSAldVxcblwiLCBxdWV1ZSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcbitcdFx0cGFnZXNfZnJlZSA9IHJ0d19zZGlvXzg3MjNic19wYWdlc19mcmVlKHJ0d2RldiwgZGVkaWNhdGVkKTtcbitcdFx0cGFnZXNfbmVlZGVkID0gRElWX1JPVU5EX1VQKGNvdW50LCBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VwYWdlX3NpemUpO1xuK1x0XHRpZiAocGFnZXNfbmVlZGVkIFx1MDAzYz0gcGFnZXNfZnJlZSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0cnR3X3NkaW9fODcyM2JzX3N5bmNfZnJlZV90eHBnKHJ0d2Rldik7XG4rXHRcdHBhZ2VzX2ZyZWUgPSBydHdfc2Rpb184NzIzYnNfcGFnZXNfZnJlZShydHdkZXYsIGRlZGljYXRlZCk7XG4rXHR9IGVsc2UgaWYgKHJ0d19jaGlwX3djcHVfODA1MShydHdkZXYpKSB7XG4gXHRcdHUzMiBmcmVlX3R4cGc7XG4gXG4gXHRcdGZyZWVfdHhwZyA9IHJ0d19zZGlvX3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG5AQCAtNjMyLDEwICs3ODgsNTYgQEAgc3RhdGljIGludCBydHdfc2Rpb19jaGVja19mcmVlX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldilcbit7XG4rXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHR1bnNpZ25lZCBsb25nIGRlYWRsaW5lO1xuK1x0dTggZnJlZTtcbitcbitcdGlmIChhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCAtMSwgMCkpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0ZGVhZGxpbmUgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhSVFdfU0RJT19PUVRfVElNRU9VVF9NUyk7XG4rXHRkbyB7XG4rXHRcdGZyZWUgPSBydHdfcmVhZDgocnR3ZGV2LCBSRUdfU0RJT19PUVRfRlJFRV9QRyk7XG4rXHRcdGlmIChmcmVlKSB7XG4rXHRcdFx0YXRvbWljX3NldChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X29xdF9mcmVlLCBmcmVlIC0gMSk7XG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdH1cbitcdFx0dXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgZGVhZGxpbmUpKTtcbitcbitcdHJldHVybiAtRUJVU1k7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcoc3RydWN0IHJ0d19kZXYgKnJ0d2RldiwgdTggcXVldWUsXG4rXHRcdFx0XHRcdCB1bnNpZ25lZCBpbnQgcGFnZXMpXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1x0YXRvbWljX3QgKmRlZGljYXRlZDtcbitcdHVuc2lnbmVkIGludCB0YWtlbjtcbitcdGludCBmcmVlO1xuK1xuK1x0ZGVkaWNhdGVkID0gcnR3X3NkaW9fODcyM2JzX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlKTtcbitcdGlmICghZGVkaWNhdGVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRmcmVlID0gYXRvbWljX3JlYWQoZGVkaWNhdGVkKTtcbitcdHRha2VuID0gbWluX3QodW5zaWduZWQgaW50LCBwYWdlcywgZnJlZSBcdTAwM2UgMCA/IGZyZWUgOiAwKTtcbitcdGF0b21pY19zdWIodGFrZW4sIGRlZGljYXRlZCk7XG4rXG4rXHRwYWdlcyAtPSB0YWtlbjtcbitcdGlmIChwYWdlcyBcdTAwMjZcdTAwMjYgYXRvbWljX3N1Yl9yZXR1cm4ocGFnZXMsIFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIpIFx1MDAzYyAwKVxuK1x0XHRhdG9taWNfc2V0KFx1MDAyNnJ0d3NkaW8tXHUwMDNlZnJlZV9wZ19wdWIsIDApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgICAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4rXHRib29sIHJ0bDg3MjNicyA9IHJ0d19pc184NzIzYnMocnR3ZGV2KTtcbitcdHVuc2lnbmVkIGludCBwYWdlcztcbitcdHNpemVfdCB3cml0ZV9zaXplO1xuIFx0Ym9vbCBidXNfY2xhaW07XG4gXHRzaXplX3QgdHhzaXplO1xuIFx0dTMyIHR4YWRkcjtcbkBAIC02NDUsMzEgKzg0Nyw3MyBAQCBzdGF0aWMgaW50IHJ0d19zZGlvX3dyaXRlX3BvcnQoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdGlmICghdHhhZGRyKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdHR4c2l6ZSA9IHNkaW9fYWxpZ25fc2l6ZShydHdzZGlvLVx1MDAzZXNkaW9fZnVuYywgc2tiLVx1MDAzZWxlbik7XG4rXHRpZiAocnRsODcyM2JzKSB7XG4rXHRcdHR4c2l6ZSA9IHJvdW5kX3VwKHNrYi1cdTAwM2VsZW4sIDQpO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplIFx1MDAzZSBSVFdfU0RJT19CTE9DS19TSVpFID9cbitcdFx0XHQgICAgIHJvdW5kX3VwKHR4c2l6ZSwgUlRXX1NESU9fQkxPQ0tfU0laRSkgOiB0eHNpemU7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIF9fc2tiX3BhZCgpIHplcm9lcyB0aGUgcGFkZGluZyB3aXRob3V0IG1vdmluZyBza2ItXHUwMDNlbGVuIGFuZFxuK1x0XHQgKiByZWFsbG9jYXRlcyB3aGVuIHRoZSBza2IgaXMgY2xvbmVkIG9yIHNob3J0IG9uIHRhaWxyb29tLFxuK1x0XHQgKiBzbyB0aGUgcGFkZGluZyBjYW4gbmV2ZXIgbGFuZCBpbiBhIGJ1ZmZlciBhIGNsb25lIHN0aWxsXG4rXHRcdCAqIHNoYXJlcy4gSXQgbXVzdCBub3QgZnJlZSB0aGUgc2tiIG9uIGZhaWx1cmU6IGJvdGggY2FsbGVyc1xuK1x0XHQgKiBzdGlsbCBvd24gaXQsIG9uZSByZXF1ZXVlcyBpdCBhbmQgdGhlIG90aGVyIGZyZWVzIGl0LlxuK1x0XHQgKi9cbitcdFx0aWYgKHdyaXRlX3NpemUgXHUwMDNlIHNrYi1cdTAwM2VsZW4pIHtcbitcdFx0XHRyZXQgPSBfX3NrYl9wYWQoc2tiLCB3cml0ZV9zaXplIC0gc2tiLVx1MDAzZWxlbiwgZmFsc2UpO1xuK1x0XHRcdGlmIChyZXQpXG4rXHRcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHR0eHNpemUgPSBzZGlvX2FsaWduX3NpemUocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHNrYi1cdTAwM2VsZW4pO1xuK1x0XHR3cml0ZV9zaXplID0gdHhzaXplO1xuK1x0fVxuK1xuK1x0LypcbitcdCAqIFRoZSBmcmVlIHBhZ2UgY2hlY2ssIHRoZSBvdXRwdXQgcXVldWUgd2FpdCBhbmQgdGhlIGFjY291bnRpbmdcbitcdCAqIGFmdGVyIHRoZSB0cmFuc2ZlciBtdXN0IG5vdCBpbnRlcmxlYXZlIHdpdGggYW5vdGhlciB3cml0ZXI6IHRoZVxuK1x0ICogVFggd29ya2VyIGFuZCB0aGUgSDJDIHBhdGggcnVuIGNvbmN1cnJlbnRseSwgYW5kIHR3byB3cml0ZXJzIHRoYXRcbitcdCAqIGJvdGggcGFzcyB0aGUgY2hlY2tzIGNhbiBjbGFpbSB0aGUgc2FtZSBwYWdlcyBhbmQgb3V0cHV0IHF1ZXVlXG4rXHQgKiBlbnRyeSwgYWZ0ZXIgd2hpY2ggdGhlIGNoaXAgc2lsZW50bHkgZGlzY2FyZHMgd2hpY2hldmVyIHRyYW5zZmVyXG4rXHQgKiBhcnJpdmVzIHNlY29uZC5cbitcdCAqL1xuK1x0aWYgKHJ0bDg3MjNicylcbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2NyZWRpdF9sb2NrKTtcbiBcbiBcdHJldCA9IHJ0d19zZGlvX2NoZWNrX2ZyZWVfdHhwZyhydHdkZXYsIHF1ZXVlLCB0eHNpemUpO1xuIFx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBvdXRfdW5sb2NrO1xuK1xuK1x0aWYgKHJ0bDg3MjNicykge1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfd2FpdF90eF9vcXQocnR3ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHR9XG4gXG4gXHRpZiAoIUlTX0FMSUdORUQoKHVuc2lnbmVkIGxvbmcpc2tiLVx1MDAzZWRhdGEsIFJUV19TRElPX0RBVEFfUFRSX0FMSUdOKSlcbiBcdFx0cnR3X3dhcm4ocnR3ZGV2LCBcIkdvdCB1bmFsaWduZWQgU0tCIGluICVzKCkgZm9yIHF1ZXVlICV1XFxuXCIsXG4gXHRcdFx0IF9fZnVuY19fLCBxdWV1ZSk7XG4gXG4gXHRidXNfY2xhaW0gPSBydHdfc2Rpb19idXNfY2xhaW1fbmVlZGVkKHJ0d3NkaW8pO1xuLVxuIFx0aWYgKGJ1c19jbGFpbSlcbiBcdFx0c2Rpb19jbGFpbV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbi1cbi1cdHJldCA9IHNkaW9fbWVtY3B5X3RvaW8ocnR3c2Rpby1cdTAwM2VzZGlvX2Z1bmMsIHR4YWRkciwgc2tiLVx1MDAzZWRhdGEsIHR4c2l6ZSk7XG4tXG4rXHRyZXQgPSBzZGlvX21lbWNweV90b2lvKHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jLCB0eGFkZHIsIHNrYi1cdTAwM2VkYXRhLFxuK1x0XHRcdCAgICAgICB3cml0ZV9zaXplKTtcbiBcdGlmIChidXNfY2xhaW0pXG4gXHRcdHNkaW9fcmVsZWFzZV9ob3N0KHJ0d3NkaW8tXHUwMDNlc2Rpb19mdW5jKTtcbiBcbi1cdGlmIChyZXQpXG4rXHRpZiAocmV0KSB7XG4gXHRcdHJ0d193YXJuKHJ0d2RldixcbiBcdFx0XHQgXCJGYWlsZWQgdG8gd3JpdGUgJXp1IGJ5dGUocykgdG8gU0RJTyBwb3J0IDB4JTA4eFwiLFxuLVx0XHRcdCB0eHNpemUsIHR4YWRkcik7XG4rXHRcdFx0IHdyaXRlX3NpemUsIHR4YWRkcik7XG4rXHR9IGVsc2UgaWYgKHJ0bDg3MjNicykge1xuK1x0XHRwYWdlcyA9IERJVl9ST1VORF9VUCh0eHNpemUsIHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4rXHRcdHJ0d19zZGlvXzg3MjNic19jb25zdW1lX3R4cGcocnR3ZGV2LCBxdWV1ZSwgcGFnZXMpO1xuK1x0fVxuIFxuK291dF91bmxvY2s6XG4rXHRpZiAocnRsODcyM2JzKVxuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9jcmVkaXRfbG9jayk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC02NzcsNyArOTIxLDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2luaXQoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXG4tXHRydHdzZGlvLVx1MDAzZWlycV9tYXNrID0gUkVHX1NESU9fSElNUl9SWF9SRVFVRVNUIHwgUkVHX1NESU9fSElNUl9DUFdNMTtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1Q7XG4rXHRlbHNlXG4rXHRcdHJ0d3NkaW8tXHUwMDNlaXJxX21hc2sgPSBSRUdfU0RJT19ISU1SX1JYX1JFUVVFU1QgfFxuK1x0XHRcdFx0ICAgIFJFR19TRElPX0hJTVJfQ1BXTTE7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTY4NSw2ICs5MzMsNyBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19lbmFibGVfcnhfYWdncmVnYXRpb24oc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHU4IHNpemUsIHRpbWVvdXQ7XG4gXG4gXHRzd2l0Y2ggKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkKSB7XG4rXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODcwM0I6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgyMUE6XG4gXHRjYXNlIFJUV19DSElQX1RZUEVfODgxMkE6XG5AQCAtNzEyLDYgKzk2MSw4IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuIFx0XHQgICAgRklFTERfUFJFUChCSVRfRE1BX0FHR19UT19WMSwgdGltZW91dCkpO1xuIFxuIFx0cnR3X3dyaXRlOF9zZXQocnR3ZGV2LCBSRUdfUlhETUFfTU9ERSwgQklUX0RNQV9NT0RFKTtcbitcdGlmIChydHdfaXNfODcyM2JzKHJ0d2RldikpXG4rXHRcdHJ0d193cml0ZThfbWFzayhydHdkZXYsIFJFR19SWERNQV9NT0RFLCBCSVRfRE1BX0JVUlNUX0NOVCwgMHgzKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnR3X3NkaW9fZW5hYmxlX2ludGVycnVwdChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxuQEAgLTc0OSw5ICsxMDAwLDYxIEBAIHN0YXRpYyBpbnQgcnR3X3NkaW9fc2V0dXAoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbisvKlxuKyAqIFJlcHJvZ3JhbSB0aGUgcXVldWUgcGFnZSBhbGxvY2F0aW9uIGlmIHRoZSBjaGlwIGNhbWUgdXAgd2l0aCBub25lLiBUaGlzIGlzXG4rICogYSByZXBhaXIgcGF0aCwgbm90IHBhcnQgb2YgdGhlIG5vcm1hbCBzdGFydCBzZXF1ZW5jZTogYSBub24temVybyBmcmVlIHBhZ2VcbisgKiBjb3VudCBtZWFucyB0aGUgYWxsb2NhdGlvbiBsYXRjaGVkIGR1cmluZyBwb3dlciBvbiBhbmQgbXVzdCBiZSBsZWZ0IGFsb25lLFxuKyAqIGFuZCB3aXRob3V0IGEgdHJhbnNtaXQgcGFnZSBwb29sIHRoZXJlIGlzIG5vdGhpbmcgdG8gZGl2aWRlIHVwIGVpdGhlci5cbisgKi9cbitzdGF0aWMgaW50IHJ0d19zZGlvXzg3MjNic19jaGVja19ycXBuKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4re1xuK1x0Y29uc3Qgc3RydWN0IHJ0d19jaGlwX2luZm8gKmNoaXAgPSBydHdkZXYtXHUwMDNlY2hpcDtcbitcdHN0cnVjdCBydHdfZmlmb19jb25mICpmaWZvID0gXHUwMDI2cnR3ZGV2LVx1MDAzZWZpZm87XG4rXHRjb25zdCBzdHJ1Y3QgcnR3X3BhZ2VfdGFibGUgKnBnX3RibDtcbitcdHUzMiBmcmVlX3R4cGc7XG4rXHR1MTYgcHVicV9udW07XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZnJlZV90eHBnID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0ZSRUVfVFhQRyk7XG4rXHRpZiAoZnJlZV90eHBnIHx8ICFmaWZvLVx1MDAzZWFjcV9wZ19udW0pXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0cmV0ID0gcnR3X3NkaW9fODcyM2JzX3B1YnFfbnVtKHJ0d2RldiwgXHUwMDI2cHVicV9udW0pO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHBnX3RibCA9IFx1MDAyNmNoaXAtXHUwMDNlcGFnZV90YWJsZVswXTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE5fTlBRLFxuK1x0XHQgICAgQklUX1JRUE5fTkUocGdfdGJsLVx1MDAzZW5xX251bSwgcGdfdGJsLVx1MDAzZWV4cV9udW0pKTtcbitcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1JRUE4sXG4rXHRcdCAgICBCSVRfUlFQTl9ITFAocGdfdGJsLVx1MDAzZWhxX251bSwgcGdfdGJsLVx1MDAzZWxxX251bSwgcHVicV9udW0pKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3N0YXJ0KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuK1x0dTMyIGNsZWFyO1xuK1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSkge1xuK1x0XHRpbnQgcmV0ID0gcnR3X3NkaW9fODcyM2JzX2NoZWNrX3JxcG4ocnR3ZGV2KTtcbitcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1xuK1x0XHRyZXQgPSBydHdfc2Rpb184NzIzYnNfaW5pdF9mcmVlX3R4cGcocnR3ZGV2KTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuIFx0cnR3X3NkaW9fZW5hYmxlX3J4X2FnZ3JlZ2F0aW9uKHJ0d2Rldik7XG4rXG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKSB7XG4rXHRcdGNsZWFyID0gcnR3X3JlYWQzMihydHdkZXYsIFJFR19TRElPX0hJU1IpIFx1MDAyNiBSVFdfU0RJT19ISVNSX0NMRUFSX01BU0s7XG4rXHRcdGlmIChjbGVhcilcbitcdFx0XHRydHdfd3JpdGUzMihydHdkZXYsIFJFR19TRElPX0hJU1IsIGNsZWFyKTtcbitcdH1cbitcbiBcdHJ0d19zZGlvX2VuYWJsZV9pbnRlcnJ1cHQocnR3ZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTgxNSw3ICsxMTE4LDExIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2tpY2tfb2ZmKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFxuLVx0cXVldWVfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmspO1xuK1x0LypcbitcdCAqIEEgcmV0cnkgbWF5IGFscmVhZHkgYmUgcGVuZGluZyB3aXRoIGEgZGVsYXk7IHJlLWFybSBpdCBzbyBhIG5ld2x5XG4rXHQgKiBxdWV1ZWQgZnJhbWUgaXMgbm90IGhlbGQgYmFjayBieSBpdC5cbitcdCAqL1xuK1x0bW9kX2RlbGF5ZWRfd29yayhydHdzZGlvLVx1MDAzZXR4d3EsIFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIDApO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb19saW5rX3BzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsIGJvb2wgZW50ZXIpXG5AQCAtODMxLDYgKzExMzgsOCBAQCBzdGF0aWMgdm9pZCBydHdfc2Rpb19pbnRlcmZhY2VfY2ZnKHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXG4gXHR2YWwgPSBydHdfcmVhZDMyKHJ0d2RldiwgUkVHX1NESU9fVFhfQ1RSTCk7XG4gXHR2YWwgXHUwMDI2PSAweGZmZjg7XG4rXHRpZiAocnR3X2lzXzg3MjNicyhydHdkZXYpKVxuK1x0XHR2YWwgfD0gQklUX1NESU9fVFhfQ1RSTF9BTFdBWVNfUkVDT0dOSVpFO1xuIFx0cnR3X3dyaXRlMzIocnR3ZGV2LCBSRUdfU0RJT19UWF9DVFJMLCB2YWwpO1xuIH1cbiBcbkBAIC05MjIsMTIgKzEyMzEsNzUgQEAgc3RhdGljIGludCBydHdfc2Rpb193cml0ZV9kYXRhX2gyYyhzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LCB1OCAqYnVmLCB1MzIgc2l6ZSlcbiBcdHJldHVybiBydHdfc2Rpb193cml0ZV9kYXRhKHJ0d2RldiwgXHUwMDI2cGt0X2luZm8sIHNrYiwgUlRXX1RYX1FVRVVFX0gyQyk7XG4gfVxuIFxuKy8qXG4rICogQmFjay1wcmVzc3VyZSBvbiB0aGUgZGF0YSBBQ3MgKEJLL0JFL1ZJL1ZPKTogb25jZSB0aGUgc29mdHdhcmUgRklGTyBmaWxsc1xuKyAqIHBhc3QgdGhlIGhpZ2ggd2F0ZXJtYXJrLCBzdG9wIHRoZSBjb3JyZXNwb25kaW5nIG1hYzgwMjExIHF1ZXVlIHNvIGl0IHN0b3BzXG4rICogaGFuZGluZyBmcmFtZXMgZG93biwgd2hpY2ggYm91bmRzIHRoZSBxdWV1ZWluZyBsYXRlbmN5LiBUaGUgcXVldWUgaXMgd29rZW5cbisgKiBhZ2FpbiBmcm9tIHRoZSBUWCBkcmFpbiBwYXRoIG9uY2UgdGhlIEZJRk8gZmFsbHMgYmFjayB0byB0aGUgbG93IHdhdGVybWFyay5cbisgKi9cbitzdGF0aWMgdm9pZCBydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUsXG4rXHRcdFx0XHRcdCAgdTE2IHFfbWFwKVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcbitcdGlmICghcnR3X2lzXzg3MjNicyhydHdkZXYpIHx8IHF1ZXVlIFx1MDAzZT0gUlRXX1RYX1FVRVVFX0JDTilcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKFJFQURfT05DRShydHdzZGlvLVx1MDAzZXR4X3F1ZXVlX3N0b3BwZWRbcXVldWVdKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0aWYgKHNrYl9xdWV1ZV9sZW4oXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pIFx1MDAzYyBSVFdfU0RJT19UWF9GSUZPX0hJV0FURVIpXG4rXHRcdHJldHVybjtcbitcbitcdFdSSVRFX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSwgdHJ1ZSk7XG4rXHRpZWVlODAyMTFfc3RvcF9xdWV1ZShydHdkZXYtXHUwMDNlaHcsIHFfbWFwKTtcbitcbitcdC8qXG4rXHQgKiBUaGUgd29ya2VyIG1heSBoYXZlIGRyYWluZWQgdGhlIHF1ZXVlIGJldHdlZW4gdGhlIGxlbmd0aCBjaGVja1xuK1x0ICogYWJvdmUgYW5kIHRoZSBmbGFnIGJlY29taW5nIHZpc2libGU7IGl0cyB3YWtlIGNoZWNrIHRoZW4gc2F3IHRoZVxuK1x0ICogZmxhZyBzdGlsbCBjbGVhciBhbmQgdGhpcyBzdG9wIHdvdWxkIG5ldmVyIGJlIHVuZG9uZS4gUmUtY2hlY2tcbitcdCAqIG5vdyB0aGF0IHRoZSBmbGFnIGlzIHNldCBhbmQgdW5kbyB0aGUgc3RvcCBpZiBzby4gQm90aCBzaWRlcyBjYW5cbitcdCAqIHdha2UsIHdoaWNoIGlzIGhhcm1sZXNzOyB0aGUgYmFycmllciBwYWlycyB3aXRoIHRoZSBvbmUgaW5cbitcdCAqIHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKCkgc28gYXQgbGVhc3Qgb25lIHNpZGUgZG9lcy5cbitcdCAqL1xuK1x0c21wX21iKCk7XG4rXHRpZiAoc2tiX3F1ZXVlX2xlbihcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSkgXHUwMDNjPVxuK1x0ICAgIFJUV19TRElPX1RYX0ZJRk9fTE9XQVRFUikge1xuK1x0XHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbitcdFx0aWVlZTgwMjExX3dha2VfcXVldWUocnR3ZGV2LVx1MDAzZWh3LCBxX21hcCk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4rXHRcdFx0XHRcdCAgZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSxcbitcdFx0XHRcdFx0ICB1MTYgcV9tYXApXG4re1xuK1x0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKCFydHdfaXNfODcyM2JzKHJ0d2RldikgfHwgcXVldWUgXHUwMDNlPSBSVFdfVFhfUVVFVUVfQkNOKVxuK1x0XHRyZXR1cm47XG4rXG4rXHQvKiBwYWlycyB3aXRoIHRoZSBiYXJyaWVyIGluIHJ0d19zZGlvXzg3MjNic19zdG9wX3R4X3F1ZXVlKCkgKi9cbitcdHNtcF9tYigpO1xuK1xuK1x0aWYgKCFSRUFEX09OQ0UocnR3c2Rpby1cdTAwM2V0eF9xdWV1ZV9zdG9wcGVkW3F1ZXVlXSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChza2JfcXVldWVfbGVuKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSBcdTAwM2UgUlRXX1NESU9fVFhfRklGT19MT1dBVEVSKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRXUklURV9PTkNFKHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtxdWV1ZV0sIGZhbHNlKTtcbitcdGllZWU4MDIxMV93YWtlX3F1ZXVlKHJ0d2Rldi1cdTAwM2VodywgcV9tYXApO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0d19zZGlvX3R4X3dyaXRlKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgcnR3X3R4X3BrdF9pbmZvICpwa3RfaW5mbyxcbiBcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IHJ0d19zZGlvICpydHdzZGlvID0gKHN0cnVjdCBydHdfc2RpbyAqKXJ0d2Rldi1cdTAwM2Vwcml2O1xuIFx0ZW51bSBydHdfdHhfcXVldWVfdHlwZSBxdWV1ZSA9IHJ0d190eF9xdWV1ZV9tYXBwaW5nKHNrYik7XG4rXHR1MTYgcV9tYXAgPSBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKTtcbiBcdHN0cnVjdCBydHdfc2Rpb190eF9kYXRhICp0eF9kYXRhO1xuIFxuIFx0cnR3X3NkaW9fdHhfc2tiX3ByZXBhcmUocnR3ZGV2LCBwa3RfaW5mbywgc2tiLCBxdWV1ZSk7XG5AQCAtOTM1LDggKzEzMDcsMTUgQEAgc3RhdGljIGludCBydHdfc2Rpb190eF93cml0ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuIFx0dHhfZGF0YSA9IHJ0d19zZGlvX2dldF90eF9kYXRhKHNrYik7XG4gXHR0eF9kYXRhLVx1MDAzZXNuID0gcGt0X2luZm8tXHUwMDNlc247XG4gXG4rXHQvKlxuK1x0ICogc2tiX3F1ZXVlX3RhaWwoKSBwdWJsaXNoZXMgdGhlIHNrYiB0byB0aGUgVFggd29ya2VyLCB3aGljaCBtYXlcbitcdCAqIHByb2Nlc3MgYW5kIGZyZWUgaXQgaW1tZWRpYXRlbHksIHNvIG5vdGhpbmcgbWF5IHRvdWNoIHRoZSBza2JcbitcdCAqIHBhc3QgdGhpcyBwb2ludC5cbitcdCAqL1xuIFx0c2tiX3F1ZXVlX3RhaWwoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0sIHNrYik7XG4gXG4rXHRydHdfc2Rpb184NzIzYnNfc3RvcF90eF9xdWV1ZShydHdkZXYsIHF1ZXVlLCBxX21hcCk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTA5NSw2ICsxNDc0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jKVxuIFx0XHRydHdfc2Rpb19yeF9pc3IocnR3ZGV2KTtcbiBcdH1cbiBcbitcdC8qXG4rXHQgKiBSVEw4NzIzQlMga2VlcHMgcmFpc2luZyB0aGUgaW50ZXJydXB0IGFmdGVyIHJlc3VtZSBpZiB1bmRlZmluZWRcbitcdCAqIHN0YXR1cyBiaXRzIGFyZSB3cml0dGVuIGJhY2ssIHNvIGFja25vd2xlZGdlIG9ubHkgdGhlIGJpdHMgdGhpc1xuK1x0ICogZHJpdmVyIGRlZmluZXMuIE90aGVyIGNoaXBzIGtlZXAgdGhlIGV4aXN0aW5nIGJlaGF2aW91ci5cbitcdCAqL1xuK1x0aWYgKHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0aGlzciBcdTAwMjY9IFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTSztcbitcbiBcdHJ0d193cml0ZTMyKHJ0d2RldiwgUkVHX1NESU9fSElTUiwgaGlzcik7XG4gXG4gXHRydHdzZGlvLVx1MDAzZWlycV90aHJlYWQgPSBOVUxMO1xuQEAgLTEyMzEsMzMgKzE2MTgsODEgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHN0cnVjdCBydHdfZGV2ICpydHdkZXYsXG4gXHRpZWVlODAyMTFfdHhfc3RhdHVzX2lycXNhZmUoaHcsIHNrYik7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldixcbi1cdFx0XHRcdCAgICAgIGVudW0gcnR3X3R4X3F1ZXVlX3R5cGUgcXVldWUpXG4rLypcbisgKiBTZW5kIG9uZSBmcmFtZSBmcm9tIEBxdWV1ZS4gUmV0dXJucyAwIHdoZW4gYSBmcmFtZSB3YXMgd3JpdHRlbiwgMSB3aGVuIHRoZVxuKyAqIHF1ZXVlIHdhcyBlbXB0eSBhbmQgYSBuZWdhdGl2ZSBlcnJubyB3aGVuIHRoZSB3cml0ZSBmYWlsZWQsIGluIHdoaWNoIGNhc2VcbisgKiB0aGUgZnJhbWUgaXMgcHV0IGJhY2sgYXQgdGhlIGhlYWQgb2YgdGhlIHF1ZXVlLlxuKyAqL1xuK3N0YXRpYyBpbnQgcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0ICAgICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlKVxuIHtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCBza19idWZmICpza2I7XG4rXHR1MTYgcV9tYXA7XG4gXHRpbnQgcmV0O1xuIFxuIFx0c2tiID0gc2tiX2RlcXVldWUoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtxdWV1ZV0pO1xuIFx0aWYgKCFza2IpXG4tXHRcdHJldHVybjtcbitcdFx0cmV0dXJuIDE7XG4gXG4rXHRxX21hcCA9IHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpO1xuIFx0cmV0ID0gcnR3X3NkaW9fd3JpdGVfcG9ydChydHdkZXYsIHNrYiwgcXVldWUpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRza2JfcXVldWVfaGVhZChcdTAwMjZydHdzZGlvLVx1MDAzZXR4X3F1ZXVlW3F1ZXVlXSwgc2tiKTtcbi1cdFx0cmV0dXJuO1xuK1x0XHRyZXR1cm4gcmV0O1xuIFx0fVxuIFxuIFx0cnR3X3NkaW9faW5kaWNhdGVfdHhfc3RhdHVzKHJ0d2Rldiwgc2tiKTtcbitcbitcdHJ0d19zZGlvXzg3MjNic193YWtlX3R4X3F1ZXVlKHJ0d2RldiwgcXVldWUsIHFfbWFwKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIERlY2lkZSB3aGV0aGVyIHRoZSBSVEw4NzIzQlMgd2FudHMgdGhlIFRYIHdvcmsgdG8gcnVuIGFnYWluLCBhbmQgaWYgc29cbisgKiBhcnJhbmdlIGl0IGFuZCB0ZWxsIHRoZSBjYWxsZXIgdG8gc3RvcCBkcmFpbmluZy4gVHdvIGNhc2VzIG5lZWQgaXQuXG4rICpcbisgKiBBIHRyYW5zbWl0IHBhZ2Ugb3Igb3V0cHV0IHF1ZXVlIHNob3J0YWdlIGFuZCBhIGZhaWxlZCBza2IgZXhwYW5zaW9uIGFyZVxuKyAqIHRyYW5zaWVudCBhbmQgbGVhdmUgdGhlIGZyYW1lIHF1ZXVlZCwgc28gY29tZSBiYWNrIGZvciBpdCBzaG9ydGx5LiBUaGF0XG4rICogbWF0dGVycyBvbmNlIHRoZSBtYWM4MDIxMSBxdWV1ZSBjYW4gYmUgc3RvcHBlZDogYSBzdG9wcGVkIHF1ZXVlIGlzIGhhbmRlZFxuKyAqIG5vIGZ1cnRoZXIgZnJhbWVzLCBzbyBub3RoaW5nIGVsc2Ugd291bGQga2ljayB0aGlzIHdvcmsgaXRlbSBhbmQgdGhlIGFjY2Vzc1xuKyAqIGNhdGVnb3J5IHdvdWxkIHN0YXkgc3RvcHBlZCBmb3IgZ29vZC4gVGhlIHJlbWFpbmluZyBlcnJvcnMgYXJlIGxvZ2dlZCB3aGVyZVxuKyAqIHRoZXkgaGFwcGVuIGFuZCBhcmUgbm90IHJldHJpZWQuXG4rICpcbisgKiBBZnRlciBhIG1hbmFnZW1lbnQgZnJhbWUsIHJlc3RhcnQgZnJvbSB0aGUgaGlnaGVzdCBwcmlvcml0eSBxdWV1ZSBzbyB0aGVcbisgKiBqb2luIHNlcXVlbmNlIGlzIG5vdCBoZWxkIHVwIGJlaGluZCBhIGRhdGEgYmFja2xvZy5cbisgKi9cbitzdGF0aWMgYm9vbCBydHdfc2Rpb184NzIzYnNfcmVzY2hlZHVsZV90eChzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2LFxuK1x0XHRcdFx0XHQgIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEgKndvcmtfZGF0YSxcbitcdFx0XHRcdFx0ICBlbnVtIHJ0d190eF9xdWV1ZV90eXBlIHF1ZXVlLCBpbnQgcmV0KVxuK3tcbitcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbyA9IChzdHJ1Y3QgcnR3X3NkaW8gKilydHdkZXYtXHUwMDNlcHJpdjtcbitcdHVuc2lnbmVkIGxvbmcgZGVsYXk7XG4rXG4rXHRpZiAoIXJ0d19pc184NzIzYnMocnR3ZGV2KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHJldCA9PSAtRUJVU1kgfHwgcmV0ID09IC1FTk9NRU0pXG4rXHRcdGRlbGF5ID0gUlRXX1NESU9fVFhfUkVUUllfREVMQVk7XG4rXHRlbHNlIGlmIChyZXQgPT0gMCBcdTAwMjZcdTAwMjYgcXVldWUgPT0gUlRXX1RYX1FVRVVFX01HTVQpXG4rXHRcdGRlbGF5ID0gMDtcbitcdGVsc2VcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cXVldWVfZGVsYXllZF93b3JrKHJ0d3NkaW8tXHUwMDNldHh3cSwgXHUwMDI2d29ya19kYXRhLVx1MDAzZXdvcmssIGRlbGF5KTtcbitcbitcdHJldHVybiB0cnVlO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydHdfc2Rpb190eF9oYW5kbGVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp3b3JrX2RhdGEgPVxuLVx0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IHJ0d19zZGlvX3dvcmtfZGF0YSwgd29yayk7XG4rXHRcdGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEsXG4rXHRcdFx0ICAgICB3b3JrKTtcbiBcdHN0cnVjdCBydHdfc2RpbyAqcnR3c2RpbztcbiBcdHN0cnVjdCBydHdfZGV2ICpydHdkZXY7XG4tXHRpbnQgbGltaXQsIHF1ZXVlO1xuK1x0aW50IGxpbWl0LCBxdWV1ZSwgcmV0O1xuIFxuIFx0cnR3ZGV2ID0gd29ya19kYXRhLVx1MDAzZXJ0d2RldjtcbiBcdHJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG5AQCAtMTI2Nyw3ICsxNzAyLDEzIEBAIHN0YXRpYyB2b2lkIHJ0d19zZGlvX3R4X2hhbmRsZXIoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIFxuIFx0Zm9yIChxdWV1ZSA9IFJUS19NQVhfVFhfUVVFVUVfTlVNIC0gMTsgcXVldWUgXHUwMDNlPSAwOyBxdWV1ZS0tKSB7XG4gXHRcdGZvciAobGltaXQgPSAwOyBsaW1pdCBcdTAwM2MgMTAwMDsgbGltaXQrKykge1xuLVx0XHRcdHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWUocnR3ZGV2LCBxdWV1ZSk7XG4rXHRcdFx0cmV0ID0gcnR3X3NkaW9fcHJvY2Vzc190eF9xdWV1ZShydHdkZXYsIHF1ZXVlKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzZSAwKVxuK1x0XHRcdFx0YnJlYWs7XG4rXG4rXHRcdFx0aWYgKHJ0d19zZGlvXzg3MjNic19yZXNjaGVkdWxlX3R4KHJ0d2Rldiwgd29ya19kYXRhLFxuK1x0XHRcdFx0XHRcdFx0ICBxdWV1ZSwgcmV0KSlcbitcdFx0XHRcdHJldHVybjtcbiBcbiBcdFx0XHRpZiAoc2tiX3F1ZXVlX2VtcHR5KFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfcXVldWVbcXVldWVdKSlcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTEyOTQsMTQgKzE3MzUsMTggQEAgc3RhdGljIGludCBydHdfc2Rpb19pbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgUlRLX01BWF9UWF9RVUVVRV9OVU07IGkrKylcbitcdG11dGV4X2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9jcmVkaXRfbG9jayk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBSVEtfTUFYX1RYX1FVRVVFX05VTTsgaSsrKSB7XG4gXHRcdHNrYl9xdWV1ZV9oZWFkX2luaXQoXHUwMDI2cnR3c2Rpby1cdTAwM2V0eF9xdWV1ZVtpXSk7XG4rXHRcdHJ0d3NkaW8tXHUwMDNldHhfcXVldWVfc3RvcHBlZFtpXSA9IGZhbHNlO1xuK1x0fVxuIFx0cnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEgPSBrbWFsbG9jX29iaigqcnR3c2Rpby1cdTAwM2V0eF9oYW5kbGVyX2RhdGEpO1xuIFx0aWYgKCFydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSlcbiBcdFx0Z290byBlcnJfZGVzdHJveV93cTtcbiBcbiBcdHJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXJ0d2RldiA9IHJ0d2Rldjtcbi1cdElOSVRfV09SSyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrLCBydHdfc2Rpb190eF9oYW5kbGVyKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnJ0d3NkaW8tXHUwMDNldHhfaGFuZGxlcl9kYXRhLVx1MDAzZXdvcmssIHJ0d19zZGlvX3R4X2hhbmRsZXIpO1xuIFxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTMxNSw2ICsxNzYwLDcgQEAgc3RhdGljIHZvaWQgcnR3X3NkaW9fZGVpbml0X3R4KHN0cnVjdCBydHdfZGV2ICpydHdkZXYpXG4gXHRzdHJ1Y3QgcnR3X3NkaW8gKnJ0d3NkaW8gPSAoc3RydWN0IHJ0d19zZGlvICopcnR3ZGV2LVx1MDAzZXByaXY7XG4gXHRpbnQgaTtcbiBcbitcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHJ0d3NkaW8tXHUwMDNldHh3cSk7XG4gXHRrZnJlZShydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YSk7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmggYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuaW5kZXggNDU3ZThiMDIzODBlNS4uNmU3ZTYwMDk3NDRiMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaFxuQEAgLTIyLDYgKzIyLDcgQEBcbiBcbiAvKiBTRElPIFR4IENvbnRyb2wgKi9cbiAjZGVmaW5lIFJFR19TRElPX1RYX0NUUkxcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMDApXG4rI2RlZmluZSBCSVRfU0RJT19UWF9DVFJMX0FMV0FZU19SRUNPR05JWkVcdEJJVCg0KVxuIFxuIC8qU0RJTyBzdGF0dXMgdGltZW91dCovXG4gI2RlZmluZSBSRUdfU0RJT19USU1FT1VUXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDAyKVxuQEAgLTc3LDYgKzc4LDE0IEBAXG4gLyogdGhlIGZvbGxvd2luZyB0d28gYXJlIFJUTDgxODggU0RJTyBTcGVjaWZpYyAqL1xuICNkZWZpbmUgUkVHX1NESU9fSElTUl9NQ1VfRVJSXHRcdFx0QklUKDI4KVxuICNkZWZpbmUgUkVHX1NESU9fSElTUl9UU0ZfQklUMzJfVE9HR0xFXHRcdEJJVCgyOSlcbisjZGVmaW5lIFJUV19TRElPX0hJU1JfQ0xFQVJfTUFTS1x0XHRcXFxuK1x0KFJFR19TRElPX0hJU1JfVFhFUlIgfCBSRUdfU0RJT19ISVNSX1JYRVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYRk9WVyB8IFJFR19TRElPX0hJU1JfUlhGT1ZXIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1RYQkNOT0sgfCBSRUdfU0RJT19ISVNSX1RYQkNORVJSIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX0MySENNRCB8IFJFR19TRElPX0hJU1JfQ1BXTTEgfCBcXFxuK1x0IFJFR19TRElPX0hJU1JfQ1BXTTIgfCBSRUdfU0RJT19ISVNSX0hTSVNSX0lORCB8IFxcXG4rXHQgUkVHX1NESU9fSElTUl9HVElOVDNfSU5EIHwgUkVHX1NESU9fSElTUl9HVElOVDRfSU5EIHwgXFxcbitcdCBSRUdfU0RJT19ISVNSX1BTVElNRU9VVCB8IFJFR19TRElPX0hJU1JfT0NQSU5UKVxuIFxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgKi9cbiAjZGVmaW5lIFJFR19TRElPX0hDUFdNXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMTkpXG5AQCAtODYsNiArOTUsMTAgQEBcbiAjZGVmaW5lIFJFR19TRElPX09RVF9GUkVFX1BHXHRcdFx0KFNESU9fTE9DQUxfT0ZGU0VUICsgMHgwMDFFKVxuIC8qIEZyZWUgVHggQnVmZmVyIFBhZ2UgKi9cbiAjZGVmaW5lIFJFR19TRElPX0ZSRUVfVFhQR1x0XHRcdChTRElPX0xPQ0FMX09GRlNFVCArIDB4MDAyMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfSElHSFx0XHRcdEdFTk1BU0soNywgMClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTk9STUFMXHRcdFx0R0VOTUFTSygxNSwgOClcbisjZGVmaW5lIEJJVF9GUkVFX1RYUEdfTE9XXHRcdFx0R0VOTUFTSygyMywgMTYpXG4rI2RlZmluZSBCSVRfRlJFRV9UWFBHX1BVQlx0XHRcdEdFTk1BU0soMzEsIDI0KVxuIC8qIEhDSSBDdXJyZW50IFBvd2VyIE1vZGUgMSAqL1xuICNkZWZpbmUgUkVHX1NESU9fSENQV00xXHRcdFx0XHQoU0RJT19MT0NBTF9PRkZTRVQgKyAweDAwMjQpXG4gLyogSENJIEN1cnJlbnQgUG93ZXIgTW9kZSAyICovXG5AQCAtMTQzLDcgKzE1Niw3IEBAIHN0cnVjdCBydHdfc2Rpb190eF9kYXRhIHtcbiB9O1xuIFxuIHN0cnVjdCBydHdfc2Rpb193b3JrX2RhdGEge1xuLVx0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4rXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7XG4gXHRzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2O1xuIH07XG4gXG5AQCAtMTU5LDYgKzE3MiwxNSBAQCBzdHJ1Y3QgcnR3X3NkaW8ge1xuIFx0c3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKnR4d3E7XG4gXHRzdHJ1Y3QgcnR3X3NkaW9fd29ya19kYXRhICp0eF9oYW5kbGVyX2RhdGE7XG4gXHRzdHJ1Y3Qgc2tfYnVmZl9oZWFkIHR4X3F1ZXVlW1JUS19NQVhfVFhfUVVFVUVfTlVNXTtcbitcdGJvb2wgdHhfcXVldWVfc3RvcHBlZFtSVEtfTUFYX1RYX1FVRVVFX05VTV07XG4rXG4rXHRhdG9taWNfdCBmcmVlX3BnX2hpZ2g7XG4rXHRhdG9taWNfdCBmcmVlX3BnX25vcm1hbDtcbitcdGF0b21pY190IGZyZWVfcGdfbG93O1xuK1x0YXRvbWljX3QgZnJlZV9wZ19wdWI7XG4rXHRhdG9taWNfdCB0eF9vcXRfZnJlZTtcbitcdC8qIG9uZSB3cml0ZXIgYXQgYSB0aW1lIGJldHdlZW4gdGhlIGNyZWRpdCBjaGVjayBhbmQgdGhlIGFjY291bnRpbmcgKi9cbitcdHN0cnVjdCBtdXRleCB0eF9jcmVkaXRfbG9jaztcbiB9O1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBydHdfc2Rpb19wbV9vcHM7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG5pbmRleCA4Nzg2YmJiNDIxYzJiLi40ZTExMGE0NTdlNzFkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC90eC5jXG4rKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3R4LmNcbkBAIC0yMDgsOCArMjA4LDkgQEAgdm9pZCBydHdfdHhfcmVwb3J0X2VucXVldWUoc3RydWN0IHJ0d19kZXYgKnJ0d2Rldiwgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggc24pXG4gXHRfX3NrYl9xdWV1ZV90YWlsKFx1MDAyNnR4X3JlcG9ydC1cdTAwM2VxdWV1ZSwgc2tiKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXFfbG9jaywgZmxhZ3MpO1xuIFxuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbiBcdFx0dGltZW91dCA9IG1zZWNzX3RvX2ppZmZpZXMoMjUwMCk7XG4gXG4gXHRtb2RfdGltZXIoXHUwMDI2dHhfcmVwb3J0LVx1MDAzZXB1cmdlX3RpbWVyLCBqaWZmaWVzICsgdGltZW91dCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MTowMi4yNTk0MjcwOTZaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjk4NzU2OTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW9uIG9mIHRoZSBydHc4OCBQYXRjaCBTZXJpZXMgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gYXNzZXNzIHRoaXMgcGF0Y2ggc2VyaWVzIHRvIGRldGVybWluZSBpZiB0aGUgY2hhbmdlcyB3YXJyYW50IGZ1enppbmcgZWZmb3J0cy4gSXQgc2VlbXMgdG8gYmUgbW9kaWZ5aW5nIHRoZSBgcnR3ODhgIHdpcmVsZXNzIGRyaXZlciwgc3BlY2lmaWNhbGx5IGFkZGluZyBzdXBwb3J0IG9yIGZpeGluZyBsb2dpYyBmb3IgdGhlIGBSVFdfQ0hJUF9UWVBFXzg3MjNCYCBjaGlwIG92ZXIgU0RJTy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGNoZWNrIHdoYXQgdGhpcyBtZWFucyBmb3IgcmVhY2hhYmlsaXR5IGluIGEgdmlydHVhbGl6ZWQgZnV6emluZyBlbnZpcm9ubWVudC4gVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBmaWxlczogYG1haW4uaGAsIGByeC5jYCwgYHNkaW8uY2AsIGBzZGlvLmhgLCBhbmQgYHR4LmNgLCBhbGwgd2l0aGluIHRoZSBgcnR3ODhgIGRpcmVjdG9yeS5cblxuVGhlIGNoYW5nZXMgaW52b2x2ZSBhZGRpbmcgYSBjaGlwIHR5cGUsIGhlbHBlciBmdW5jdGlvbnMsIG1vZGlmeWluZyBSWCBwYWNrZXQgc2l6ZSBjaGVja3MsIGFuZCBhZGRpbmcgU0RJTy1zcGVjaWZpYyBUWCBGSUZPIGJhY2stcHJlc3N1cmUsIHBhZ2UgdHJhY2tpbmcsIE9RVCB3YWl0IGxvZ2ljLCBhbmQgbW9kaWZpY2F0aW9ucyB0byBgcnR3X3NkaW9fd3JpdGVfcG9ydGAsIGBydHdfc2Rpb190eF9oYW5kbGVyYCBhbmQgYWRkaW5nIG5ldyBgX3N0b3BfdHhfcXVldWVgIGFuZCBgX3dha2VfdHhfcXVldWVgIGZ1bmN0aW9ucy5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMgd2hldGhlciB0aGlzIGlzIHJlYWNoYWJsZS4gSXQncyBhIFJlYWx0ZWsgd2lyZWxlc3MgZHJpdmVyLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgZGVwZW5kZW5jeS4gVGhlIGNvZGUgdG91Y2hlcyBTRElPIGZpbGVzIGFuZCBtZW50aW9ucyBhbiBgODcyM0JTYCBjaGlwLCBzbyBpdCdzIGEgc3BlY2lmaWMgU0RJTyBjYXJkLiBDYW4gd2UgZW11bGF0ZSBTRElPIGRldmljZXMgZWZmZWN0aXZlbHkgaW4gYSBmdXp6ZXIgbGlrZSBzeXprYWxsZXI/IFN5emthbGxlciBkb2Vzbid0IG5hdGl2ZWx5IGVtdWxhdGUgU0RJTywgYWx0aG91Z2ggdGhlcmUgYXJlIG9wdGlvbnMgbGlrZSBgbWFjODAyMTFfaHdzaW1gIGZvciBtYWM4MDIxMS9jZmc4MDIxMS1iYXNlZCBkcml2ZXJzIGJ1dCB0aGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyIChgcnR3ODhgKS5cblxuVGhlIHByb21wdCBoYXMgYSBzcGVjaWZpYyBjbGF1c2UgYWJvdXQgbm90IGZ1enppbmcgdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBEb2VzIHRoaXMgYXBwbHkgaGVyZT8gSGFyZHdhcmUtc3BlY2lmaWMgV2ktRmkgZHJpdmVycyBvZnRlbiBmYWxsIGludG8gYSBzaW1pbGFyIGNhdGVnb3J5LCB1bmxlc3MgdGhleSBoYXZlIGEgVVNCIGludGVyZmFjZS4gRG9lcyBgcnR3ODhgIGhhdmUgVVNCIHN1cHBvcnQ/IExldCBtZSBjaGVjay5cblxuVGhlIHBhdGNoIHNwZWNpZmljYWxseSB0YXJnZXRzIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCwgc28gaXQncyBTRElPLWNlbnRyaWMuIFRoZSBuZXcgaGVscGVyIGZ1bmN0aW9uIGBydHdfaXNfODcyM2JzKClgIGNoZWNrcyBmb3IgYHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfU0RJT2AsIGNvbmZpcm1pbmcgdGhlIFNESU8gZGVwZW5kZW5jeS4gQ2FuIFNESU8gaXRzZWxmIGJlIGVtdWxhdGVkPyBJJ2QgbmVlZCB0byBsb29rIGludG8gd2hldGhlciB0aGVyZSdzIGFueSBTRElPIGVtdWxhdGlvbiBpbiBzeXprYWxsZXIgb3IgUUVNVS4gVXN1YWxseSwgU0RJTyBpc24ndCBlYXNpbHkgcmVhY2hhYmxlIHdpdGhvdXQgc3BlY2lmaWMgaGFyZHdhcmUuXG5cbkxvb2tpbmcgYXQgdGhlIGNvZGUgbW9yZSBjbG9zZWx5LCB0aGUgY2hhbmdlcyBpbiBgdHguY2AgYW5kIGByeC5jYCBhZGQgdGhlIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGNoZWNrLCB3aGljaCByZWluZm9yY2VzIHRoZSBTRElPLW9ubHkgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMuIEFsbCBvZiB0aGUgZnVuY3Rpb25hbCBjaGFuZ2VzIHNlZW0gc3BlY2lmaWMgdG8gYFJUV19DSElQX1RZUEVfODcyM0JgIHdpdGggYFJUV19IQ0lfVFlQRV9TRElPYC4gU2luY2UgdGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIFNESU8gZHJpdmVyLCBpdCByZWFsbHkgZG9lcyByZXF1aXJlIHRoZSBwaHlzaWNhbCBSZWFsdGVrIFdpLUZpIGNoaXAgYW5kIFNESU8gY2FyZCB0byBmdW5jdGlvbi5cblxuRG9lcyBRRU1VIGhlbHAgaGVyZT8gUUVNVSBoYXMgYHNkaGNpLXBjaWAsIGJ1dCByZWFjaGluZyB0aGUgcHJvYmUgYW5kIGxhdGVyIGxvZ2ljIHJlcXVpcmVzIGEgdmVyeSBzcGVjaWZpYyBSZWFsdGVrIFNESU8gY2FyZCB0byBiZSBlbXVsYXRlZCwgd2hpY2ggaXNuJ3QgdGhlIGNhc2UgZm9yIHRoZSBSVEw4NzIzQlMuIEFyZSB0aGVyZSBhbnkgc29mdHdhcmUgZnJhbWV3b3JrcyBpbiBMaW51eCB0byBpbmplY3QgU0RJTyBkZXZpY2VzPyBVbmxpa2UgVVNCJ3MgYGR1bW15X2hjZGAsIHRoZXJlJ3Mgbm8gYHZoY2lgIGVxdWl2YWxlbnQgZm9yIFNESU8sIHNvIGl0J3MgZ2VuZXJhbGx5IHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgd2l0aG91dCBzcGVjaWZpYyBoYXJkd2FyZSBlbXVsYXRpb24sIHdoaWNoIGRvZXNuJ3QgZXhpc3QgZm9yIHRoaXMgZHJpdmVyLlxuXG5JIG5lZWQgdG8gY29uZmlybSBieSBzZWFyY2hpbmcgZm9yIGFueSBTRElPIGZ1enppbmcgc3VwcG9ydCwgYnV0IGJhc2VkIG9uIG15IGV4cGVyaWVuY2UgYW5kIGluaXRpYWwgZmluZGluZ3MsIHRoaXMgcGF0Y2ggaXMgcHJvYmFibHkgbm90IHdvcnRoIGZ1enppbmcgaW4gb3VyIHN0YW5kYXJkIGVudmlyb25tZW50IGJlY2F1c2Ugb2YgdGhlIHJlcXVpcmVkIGhhcmR3YXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzI5MSwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MToxOS4yNDY5OTg3ODhaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY2NjQ4Mzk0MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydHdfc2Rpb19wcm9iZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jPTIxPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNjc19kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTIzLVxcdC5pZF90YWJsZSA9IHJ0d184NzIzY3NfaWRfdGFibGUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzY3MuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNjcy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg3MjNkcy5jPTI3PXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg3MjNkc19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0yOC1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODcyM2RzLmM6Mjk6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4NzIzZHMuYy0zMC1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIxY3MuYz0yMj1zdGF0aWMgc3RydWN0IHNkaW9fZHJpdmVyIHJ0d184ODIxY3NfZHJpdmVyID0ge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjMtXFx0Lm5hbWUgPSBLQlVJTERfTU9ETkFNRSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjFjcy5jOjI0OlxcdC5wcm9iZSA9IHJ0d19zZGlvX3Byb2JlLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMWNzLmMtMjUtXFx0LnJlbW92ZSA9IHJ0d19zZGlvX3JlbW92ZSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmJzLmM9MjI9c3RhdGljIHN0cnVjdCBzZGlvX2RyaXZlciBydHdfODgyMmJzX2RyaXZlciA9IHtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTIzLVxcdC5uYW1lID0gS0JVSUxEX01PRE5BTUUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyYnMuYzoyNDpcXHQucHJvYmUgPSBydHdfc2Rpb19wcm9iZSxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJicy5jLTI1LVxcdC5yZW1vdmUgPSBydHdfc2Rpb19yZW1vdmUsXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3J0dzg4MjJjcy5jPTIyPXN0YXRpYyBzdHJ1Y3Qgc2Rpb19kcml2ZXIgcnR3Xzg4MjJjc19kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yMy1cXHQubmFtZSA9IEtCVUlMRF9NT0ROQU1FLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvcnR3ODgyMmNzLmM6MjQ6XFx0LnByb2JlID0gcnR3X3NkaW9fcHJvYmUsXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9ydHc4ODIyY3MuYy0yNS1cXHQucmVtb3ZlID0gcnR3X3NkaW9fcmVtb3ZlLFxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9MTc1OD1zdGF0aWMgdm9pZCBydHdfc2Rpb19kZWluaXRfdHgoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzAtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM6MTc3MTppbnQgcnR3X3NkaW9fcHJvYmUoc3RydWN0IHNkaW9fZnVuYyAqc2Rpb19mdW5jLFxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE3NzItXFx0XFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jLTE4NDUtfVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjE4NDY6RVhQT1JUX1NZTUJPTChydHdfc2Rpb19wcm9iZSk7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtMTg0Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oPTE4Nj1leHRlcm4gY29uc3Qgc3RydWN0IGRldl9wbV9vcHMgcnR3X3NkaW9fcG1fb3BzO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5oLTE4Ny1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaDoxODg6aW50IHJ0d19zZGlvX3Byb2JlKHN0cnVjdCBzZGlvX2Z1bmMgKnNkaW9fZnVuYyxcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L3NkaW8uaC0xODktXFx0XFx0ICAgY29uc3Qgc3RydWN0IHNkaW9fZGV2aWNlX2lkICppZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjIwLjkxMzQ4Njk5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzczOTk1ODY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIHJ0d19zZGlvX3Byb2JlIEZ1bmN0aW9uKipcblxuT2theSwgc28gYHJ0d19zZGlvX3Byb2JlYCBpcyBleHBvcnRlZCwgbWVhbmluZyBpdCdzIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGFjcm9zcyBtdWx0aXBsZSBkcml2ZXJzLiBMZXQncyBzZWUuLi4gYHJ0dzg3MjNjc2AsIGBydHc4NzIzZHNgLCBgcnR3ODgyMWNzYCwgYHJ0dzg4MjJic2AsIGFuZCBgcnR3ODgyMmNzYCBhbGwgbGV2ZXJhZ2UgaXQuIFRoYXQncyBhIGRlY2VudCByYW5nZSBvZiBCcm9hZGNvbS9SZWFsdGVrIFdpLUZpIGNoaXBzLiBJbnRlcmVzdGluZy4gTm93LCB0aGlzIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgYFJUV19DSElQX1RZUEVfODcyM0JgIGNvbnN0YW50IGFuZCBhIGhlbHBlciBmdW5jdGlvbiBgcnR3X2lzXzg3MjNicygpYC4gVGhlIGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayBpZiB3ZSdyZSBkZWFsaW5nIHdpdGggYSBuZXcgZHJpdmVyIGZpbGUuIElzIHRoZXJlIGFuIGBydHc4NzIzYnMuY2A/IEdvdHRhIHZlcmlmeSB0aGF0LiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY4MDksIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MjQuNjUzNDQ5MTI3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NjI0NjU2MzIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJ0dzg3MjNic1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MjYuMzE1OTI1Mjk5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1MjM5NTgwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoJ3MgSW1wYWN0KipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBgUlRXX0NISVBfVFlQRV84NzIzQmAgaW50byB0aGUgYHJ0d19jaGlwX3R5cGVgIGVudW0uICBOb3RoaW5nIGluaGVyZW50bHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUsIGJ1dCBub3cgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucy4gVGhlIGNvZGUgdGhlbiBkZWZpbmVzIGBydHdfaXNfODcyM2JzKClgLCB3aGljaCB1c2VzIHRoZSBuZXcgZW51bSB2YWx1ZSBhbG9uZ3NpZGUgYSBjaGVjayBmb3IgYFJUV19IQ0lfVFlQRV9TRElPYC4gVGhhdCdzIGltcG9ydGFudDsgaXQncyBzcGVjaWZpYyB0byB0aGUgODcyM0IgY2hpcCBhbmQgYSBwYXJ0aWN1bGFyIEhvc3QgQ29udHJvbGxlciBJbnRlcmZhY2UuIEl0J3MgYSBjb25kaXRpb25hbCBjaGVjay4gTXkgcHJpbWFyeSB0aG91Z2h0IGlzLCB3aG8gdXNlcyB0aGlzIGNoZWNrPyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBmaWxlcyBpbiB0aGUgY29kZWJhc2Ugbm93IHJlbHkgb24gYFJUV19DSElQX1RZUEVfODcyM0JgLiBGaW5kaW5nIHdoZXJlIGBydHdfaXNfODcyM2JzKClgIGlzIGludm9rZWQgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIHRoZSBzY29wZSBvZiB0aGlzIGNoYW5nZSBhbmQgYW55IHBvdGVudGlhbCBkb3duc3RyZWFtIGVmZmVjdHMuIFRoaXMgYWRkaXRpb24gcHJvYmFibHkgYWRkcmVzc2VzIGEgc3BlY2lmaWMgaGFyZHdhcmUgdmFyaWFudCBvciBjb25maWd1cmF0aW9uLCBhbmQgSSBuZWVkIHRvIGlkZW50aWZ5IHRoZSBleGFjdCB0YXJnZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3MTU5LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjMwLjQ2ODMyNDA2OFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQxNzA2OTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUV19DSElQX1RZUEVfODcyM0JcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MTkxPWVudW0gcnR3X2NoaXBfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTgtXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTIxOTg9c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVxcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9OTMxPXN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjkzNjpcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MzEuOTEwMDM1MTkxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MDk2MTY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaWdnaW5nIGludG8gdGhlIENvZGU6IFdoZXJlJ3MgVGhhdCBDaGlwIElEPyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgSSBoYXZlIGEgcXVpY2sgcXVlc3Rpb246IHdoZXJlIGV4YWN0bHkgaXMgYFJUV19DSElQX1RZUEVfODcyM0JgIGFjdHVhbGx5IGJlaW5nIGFzc2lnbmVkIHRvIGBydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZGA/IEl0J3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMsIGFuZCB0aGF0IG1ha2VzIG1lIGEgbGl0dGxlIHVuZWFzeS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRhdGEgZmxvdyBoZXJlLiBMZXQncyBkbyBhIHF1aWNrIHNlYXJjaC4gUGVyaGFwcyB0aGlzIGNvbnN0YW50IGlzbid0IGRlZmluZWQgd2hlcmUgSSBpbml0aWFsbHkgdGhvdWdodCBhbmQgaXMgaGlkaW5nIHNvbWV3aGVyZSBlbHNlLCBtYXliZSB0dWNrZWQgYXdheSB3aXRoaW4gdGhlIGBydHc4OGAgZGlyZWN0b3J5LiBMZXQncyBnZXQgdG8gdGhlIGJvdHRvbSBvZiB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODAxMywiT3V0cHV0VG9rZW5zIjo0NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjM1LjI5MDk5OTQ2NFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzUxNTQ3NDIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlJUV19DSElQX1RZUEVfODcyM0JcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9tYWluLmg9MTkxPWVudW0gcnR3X2NoaXBfdHlwZSB7XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTYtXFx0UlRXX0NISVBfVFlQRV84NzAzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoxOTc6XFx0UlRXX0NISVBfVFlQRV84NzIzQixcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0xOTgtXFx0UlRXX0NISVBfVFlQRV84ODIxQSxcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvbWFpbi5oPTIxOTg9c3RhdGljIGlubGluZSBib29sIHJ0d19pc184NzIzYnMoc3RydWN0IHJ0d19kZXYgKnJ0d2RldilcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMTk5LXtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaDoyMjAwOlxcdHJldHVybiBydHdkZXYtXFx1MDAzZWNoaXAtXFx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0IgXFx1MDAyNlxcdTAwMjZcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9yZWFsdGVrL3J0dzg4L21haW4uaC0yMjAxLVxcdCAgICAgICBydHdkZXYtXFx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9TRElPO1xcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmM9OTMxPXN0YXRpYyB2b2lkIHJ0d19zZGlvX2VuYWJsZV9yeF9hZ2dyZWdhdGlvbihzdHJ1Y3QgcnR3X2RldiAqcnR3ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM1LVxcdHN3aXRjaCAocnR3ZGV2LVxcdTAwM2VjaGlwLVxcdTAwM2VpZCkge1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3JlYWx0ZWsvcnR3ODgvc2Rpby5jOjkzNjpcXHRjYXNlIFJUV19DSElQX1RZUEVfODcyM0I6XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvcmVhbHRlay9ydHc4OC9zZGlvLmMtOTM3LVxcdGNhc2UgUlRXX0NISVBfVFlQRV84NzAzQjpcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6MzYuMDQyNTU1NTM2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3MTUxMTIwMDIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUG90ZW50aWFsIEltcGFjdCBvZiBhIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgYFJUV19DSElQX1RZUEVfODcyM0JgIGlzbid0IGFzc2lnbmVkIGFueXdoZXJlIHdpdGhpbiB0aGUgY29udGV4dCBvZiAqdGhpcyogcGF0Y2guIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0J3MgbGlrZWx5IGRlZmluZWQgYW5kIGFzc2lnbmVkIGVsc2V3aGVyZSwgcGVyaGFwcyBpbiBhbiBlYXJsaWVyIHBhdGNoIGluIHRoZSBzZXJpZXMuIEhvd2V2ZXIsIHNpbmNlIEkgb25seSBoYXZlICp0aGlzKiBwYXRjaCB0byB3b3JrIHdpdGgsIGl0IG1ha2VzIG1lIHRoaW5rIHRoYXQgYHJ0d19pc184NzIzYnMoKWAgd291bGQgYWx3YXlzIHJldHVybiBmYWxzZS4gSSBkaWQgYSBxdWljayBncmVwcGluZyB0byB2ZXJpZnkgaWYgdGhlIGRlZmluaXRpb24gaXMgdXNlZCBhbnl3aGVyZSBlbHNlIGFuZCBub3RoaW5nIGNhbWUgdXAuIE5vdyBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciBpdCdzIGFzc2lnbmVkIGluIGEgcm91bmRhYm91dCB3YXksIGxpa2UgYGlkID09IDBgLCBidXQgaXQncyBhbiBlbnVtLCBzbyB0aGF0J3Mgbm90IHRoZSBjYXNlLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlIGNoYW5nZXMgdGhhdCAqZG9uJ3QqIGRlcGVuZCBvbiBgcnR3X2lzXzg3MjNicygpYC4gSSBzZWUgaW4gYHR4LmNgIGFuZCBgcnguY2AgdGhhdCB0aGUgY2hhbmdlcyBtYWRlIHRoZXJlIGFyZSBjb25kaXRpb25hbCBvbiBgcnR3X2lzXzg3MjNicygpYCwgc28gSSBjYW4ndCBsb29rIGF0IHRoZW0gbm93LlxuXG5Ib3dldmVyLCBpbiBgc2Rpby5jYCwgSSBzZWUgYSBzZWN0aW9uIG9mIGNvZGUgdGhhdCAqZG9lc24ndCogZGVwZW5kIG9uIGBydHdfaXNfODcyM2JzKClgLiBUaGVyZSBhcmUgc3Vic3RhbnRpYWwgY2hhbmdlcyBoZXJlOiB0aGUgd29yayBpdGVtIGBydHdzZGlvLVx1MDAzZXR4X2hhbmRsZXJfZGF0YS1cdTAwM2V3b3JrYCBpcyBiZWluZyBjaGFuZ2VkIGZyb20gYSBgd29ya19zdHJ1Y3RgIHRvIGEgYGRlbGF5ZWRfd29ya2AuIFRoaXMgaXMgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgY29yZSBoYW5kbGluZyBvZiBTRElPIHRyYW5zYWN0aW9ucy4gSXQgYWxzbyBpbnZvbHZlcyBjaGFuZ2luZyB0aGUgZnVuY3Rpb24gYHJ0d19zZGlvX3R4X2hhbmRsZXJgIHRvIGFjY291bnQgZm9yIHRoZSB3b3JrIHN0cnVjdCBjaGFuZ2UuIEkgbm90ZSB0aGF0IGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBub3cgcmV0dXJuaW5nIGFuIGBpbnRgIGluc3RlYWQgb2YgYHZvaWRgLlxuXG5EaXZpbmcgZGVlcGVyLCB3aXRoaW4gYHJ0d19zZGlvX3R4X2hhbmRsZXJgLCBpdCBsb29rcyBsaWtlIHRoZSBsb29wIGNvbmRpdGlvbiBoYXMgY2hhbmdlZCBhbmQgbm93IGJyZWFrcyBvdXQgb2YgYSBsb29wIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYHJ0d19zZGlvX3Byb2Nlc3NfdHhfcXVldWVgLiBTbywgaW5zdGVhZCBvZiByZXR1cm5pbmcgdm9pZCBhbmQgdGhlbiB0ZXN0aW5nIGEgcXVldWUncyBlbXB0aW5lc3MsIGl0IGNoZWNrcyB0aGUgcmV0dXJuIG9mIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYC5cblxuTm93LCB0aGUgcXVlc3Rpb24gaXMsIGlzIHRoaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBmb3IgKmFsbCogU0RJTyBjaGlwcz8gVGhlIGNvZGUgaGl0cyBhbGwgU0RJTyBjaGlwcyBiZWNhdXNlIGBydHdfc2Rpb19wcm9jZXNzX3R4X3F1ZXVlYCBpcyBjYWxsZWQgcmVnYXJkbGVzcy4gVGhpcyBjaGFuZ2VzIGhvdyB0aGUgVFggcXVldWUgaXMgcHJvY2Vzc2VkLiBJZiBgcmV0IFx1MDAzZSAwYCwgaXQgYnJlYWtzIHRoZSBpbm5lciBsb29wLiBQcmV2aW91c2x5LCBpdCBkaWRuJ3QgdXNlIGFuIGV4cGxpY2l0IHJldHVybiBjb2RlLlxuXG5UaGlzIGlzIGEga2V5IHBvaW50LCBidXQgaGVyZSdzIHdoZXJlIEkgbmVlZCB0byB0aGluayBjcml0aWNhbGx5OiBjYW4gSSBldmVuICp0cmlnZ2VyKiB0aGlzIGNvZGUgcGF0aD8gU0RJTyBkZXZpY2VzIGFyZW4ndCB1c3VhbGx5IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoZXkgcmVxdWlyZSBzcGVjaWZpYyBoYXJkd2FyZSwgc28gaXQgaXMgcHJvYmFibHkgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gQ2FuIEkgaW5qZWN0IFNESU8gaW4gc29mdHdhcmU/IFRoZXJlJ3MgYG1hYzgwMjExX2h3c2ltYCBmb3IgV2ktRmksIGJ1dCB0aGF0J3MgaXJyZWxldmFudCBoZXJlLiBMZXQncyBzZWUgaWYgdGhlIGBydHc4OGAgZHJpdmVyIHJlZ2lzdGVycyBhbiBTRElPIGRyaXZlci4gWWVzLCBpdCByZWdpc3RlcnMgYHJ0d19zZGlvX3Byb2JlYC4gVG8gcHJvYmUsIHRoZSBrZXJuZWwgbmVlZHMgdG8gZGV0ZWN0IGFuIFNESU8gZGV2aWNlIHdpdGggdGhlIHJpZ2h0IHZlbmRvci9kZXZpY2UgSURzLiBNTUMgc3Vic3lzdGVtcyBlbnVtZXJhdGUgU0RJTyBkZXZpY2VzLiBEb2VzIHN5emthbGxlciBkbyB0aGlzPyBObywgaXQgaGFzIG5vIGB2aGNpYCBmb3IgTU1DL1NESU8uIFRoZXJlIGlzbid0IGFueSBgZHVtbXlfbW1jYCBvciBgcmF3X3NkaW9gIGRyaXZlciBpbiB0aGUgdXBzdHJlYW0ga2VybmVsIGZvciBhcmJpdHJhcnkgU0RJTyBkZXZpY2UgaW5qZWN0aW9uIGZyb20gdXNlcnNwYWNlLiBJJ2xsIG5lZWQgdG8gdmVyaWZ5IHRoYXQgdGhlcmUncyBubyBNTUMvU0RJTyBlbXVsYXRpb24gZHJpdmVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODc1NiwiT3V0cHV0VG9rZW5zIjoxOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6NTMuMTkzNjc3NTM3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDcwNTk2MjI4LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkdW1teV9tbWNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjU0LjY2NDI4MDI2NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjAzMzkwNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyB0aGUgTU1DIEhvc3QgRHJpdmVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHNvbWV0aGluZyByZWxhdGVkIHRvIGBzZGlvYCwgbGlrZWx5IHdpdGhpbiB0aGUgTU1DIGhvc3QgZHJpdmVycy4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2UsIGlzIHRvIHplcm8gaW4gb24gdGhlIGBkcml2ZXJzL21tYy9ob3N0L2AgZGlyZWN0b3J5LiBUaGF0J3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGNvcmUgU0RJTyBjb250cm9sbGVyIGNvZGUsIGRyaXZlciBpbnRlcmZhY2UsIGFuZCByZWxhdGVkIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGtlcm5lbC4gSXQncyB0aGUgc3RhbmRhcmQgbG9jYXRpb24gZm9yIE1NQyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycywgYW5kIHRoZXJlZm9yZSBhIHZlcnkgbGlrZWx5IHNwb3QgZm9yIGFueXRoaW5nIFNESU8tcmVsYXRlZCBhcyB3ZWxsLiBUaGlzIHNob3VsZCBiZSB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNESU8gcHJvdG9jb2wncyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBNTUMgaG9zdCBoYXJkd2FyZSB3b3VsZCByZXNpZGUuIExldCdzIHN0YXJ0IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTExOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUxOjU3Ljg2NzY3MzM2OFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU2OTk1MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL21tYy9ob3N0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJcXG5GdWxsIG91dHB1dCBpcyB0b28gbG9uZywgc2hvd2luZyA1MDAgb3V0IG9mIDE4NDkgbGluZXMuXFxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxcblxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZz02NTk9Y29uZmlnIE1NQ19NVlNESU9cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvS2NvbmZpZy02NjgtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWc6NjY5OlxcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIG12c2Rpby5cXG5kcml2ZXJzL21tYy9ob3N0L0tjb25maWctNjcwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZT0zND1vYmotJChDT05GSUdfTU1DX1RJRk1fU0QpXFx0Kz0gdGlmbV9zZC5vXFxuZHJpdmVycy9tbWMvaG9zdC9NYWtlZmlsZTozNTpvYmotJChDT05GSUdfTU1DX01WU0RJTylcXHQrPSBtdnNkaW8ub1xcbmRyaXZlcnMvbW1jL2hvc3QvTWFrZWZpbGUtMzYtb2JqLSQoQ09ORklHX01NQ19EQVZJTkNJKSAgICAgICArPSBkYXZpbmNpX21tYy5vXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlPTY4PW9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RIQylcXHQrPSBtZXNvbi1teC1zZGhjLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlOjY5Om9iai0kKENPTkZJR19NTUNfTUVTT05fTVhfU0RJTylcXHQrPSBtZXNvbi1teC1zZGlvLm9cXG5kcml2ZXJzL21tYy9ob3N0L01ha2VmaWxlLTcwLW9iai0kKENPTkZJR19NTUNfTU9YQVJUKVxcdCs9IG1veGFydC1tbWMub1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL2hvc3QuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjMwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzEtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTMzMj1zdHJ1Y3QgYXRtZWxfbWNpIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMzg3LSAqIEBzZGNfcmVnOiBWYWx1ZSBvZiBTRENSIHRvIGJlIHdyaXR0ZW4gYmVmb3JlIHVzaW5nIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjM4ODogKiBAc2Rpb19pcnE6IFNESU8gaXJxIG1hc2sgZm9yIHRoaXMgc2xvdC5cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTM4OS0gKiBAbXJxOiBtbWNfcmVxdWVzdCBjdXJyZW50bHkgYmVpbmcgcHJvY2Vzc2VkIG9yIHdhaXRpbmcgdG8gYmVcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9NDAxPXN0cnVjdCBhdG1lbF9tY2lfc2xvdCB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTQwNS1cXHR1MzJcXHRcXHRcXHRzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6NDA2OlxcdHUzMlxcdFxcdFxcdHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtNDA3LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYz0xNTQ1PXN0YXRpYyBpbnQgYXRtY2lfZ2V0X2NkKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTU4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU1OTpzdGF0aWMgdm9pZCBhdG1jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2NC1cXHRpZiAoZW5hYmxlKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MTU2NTpcXHRcXHRhdG1jaV93cml0ZWwoaG9zdCwgQVRNQ0lfSUVSLCBzbG90LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTY2LVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1Njc6XFx0XFx0YXRtY2lfd3JpdGVsKGhvc3QsIEFUTUNJX0lEUiwgc2xvdC1cXHUwMDNlc2Rpb19pcnEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMTU2OC19XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTE1NzA9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgYXRtY2lfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0xNTc0LVxcdC5nZXRfY2RcXHRcXHQ9IGF0bWNpX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjE1NzU6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGF0bWNpX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTE1NzYtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjAxMT1zdGF0aWMgdm9pZCBhdG1jaV93cml0ZV9kYXRhX3BpbyhzdHJ1Y3QgYXRtZWxfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDc4LVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA3OTpzdGF0aWMgdm9pZCBhdG1jaV9zZGlvX2ludGVycnVwdChzdHJ1Y3QgYXRtZWxfbWNpICpob3N0LCB1MzIgc3RhdHVzKVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjA4MC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIwODQtXFx0XFx0c3RydWN0IGF0bWVsX21jaV9zbG90ICpzbG90ID0gaG9zdC1cXHUwMDNlc2xvdFtpXTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIwODU6XFx0XFx0aWYgKHNsb3QgXFx1MDAyNlxcdTAwMjYgKHN0YXR1cyBcXHUwMDI2IHNsb3QtXFx1MDAzZXNkaW9faXJxKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjA4NjpcXHRcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKHNsb3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMDg3LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM9MjA5Mj1zdGF0aWMgaXJxcmV0dXJuX3QgYXRtY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjIxMy1cXHRcXHRpZiAocGVuZGluZyBcXHUwMDI2IChBVE1DSV9TRElPSVJRQSB8IEFUTUNJX1NESU9JUlFCKSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMTQ6XFx0XFx0XFx0YXRtY2lfc2Rpb19pbnRlcnJ1cHQoaG9zdCwgc3RhdHVzKTtcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMTUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jPTIyMzY9c3RhdGljIGludCBhdG1jaV9pbml0X3Nsb3Qoc3RydWN0IGF0bWVsX21jaSAqaG9zdCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzctXFx0XFx0c3RydWN0IG1jaV9zbG90X3BkYXRhICpzbG90X2RhdGEsIHVuc2lnbmVkIGludCBpZCxcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jOjIyMzg6XFx0XFx0dTMyIHNkY19yZWcsIHUzMiBzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyMzkte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYy0yMjU0LVxcdHNsb3QtXFx1MDAzZXNkY19yZWcgPSBzZGNfcmVnO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmM6MjI1NTpcXHRzbG90LVxcdTAwM2VzZGlvX2lycSA9IHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI1Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXRtZWwtbWNpLmMtMjI2Ny1cXHRtbWMtXFx1MDAzZW9jcl9hdmFpbFxcdD0gTU1DX1ZERF8zMl8zMyB8IE1NQ19WRERfMzNfMzQ7XFxuZHJpdmVycy9tbWMvaG9zdC9hdG1lbC1tY2kuYzoyMjY4OlxcdGlmIChzZGlvX2lycSlcXG5kcml2ZXJzL21tYy9ob3N0L2F0bWVsLW1jaS5jLTIyNjktXFx0XFx0bW1jLVxcdTAwM2VjYXBzIHw9IE1NQ19DQVBfU0RJT19JUlE7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYz03Nzg9c3RhdGljIGlycXJldHVybl90IGF1MXhtbWNfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc4OC1cXHRpZiAoc3RhdHVzIFxcdTAwMjYgU0RfU1RBVFVTX1NJKVxcdC8qIFNESU8gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYzo3ODk6XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTc5MC1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkwNj1zdGF0aWMgdm9pZCBhdTF4bW1jX2RiZG1hX3NodXRkb3duKHN0cnVjdCBhdTF4bW1jX2hvc3QgKmhvc3QpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MTQtXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTE1OnN0YXRpYyB2b2lkIGF1MXhtbWNfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBpbnQgZW4pXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmMtOTE2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jPTkyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBhdTF4bW1jX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYXUxeG1tYy5jLTkyOS1cXHQuZ2V0X2NkXFx0XFx0PSBhdTF4bW1jX2NhcmRfaW5zZXJ0ZWQsXFxuZHJpdmVycy9tbWMvaG9zdC9hdTF4bW1jLmM6OTMwOlxcdC5lbmFibGVfc2Rpb19pcnEgPSBhdTF4bW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2F1MXhtbWMuYy05MzEtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTgtICpcXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzo5OiAqIFRoZSBzZGhjaSBjb250cm9sbGVyIHN1cHBvcnRzIGJvdGggc2RjYXJkIGFuZCBzZGlvLiAgVGhlIHNkaG9zdFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEwLSAqIGNvbnRyb2xsZXIgc3VwcG9ydHMgdGhlIHNkY2FyZCBvbmx5LCBidXQgaGFzIGJldHRlciBwZXJmb3JtYW5jZS5cXG5kcml2ZXJzL21tYy9ob3N0L2JjbTI4MzUuYzoxMTogKiBBbHNvIG5vdGUgdGhhdCB0aGUgcnBpMyBoYXMgc2RpbyB3aWZpLCBzbyBkcml2aW5nIHRoZSBzZGNhcmQgd2l0aFxcbmRyaXZlcnMvbW1jL2hvc3QvYmNtMjgzNS5jLTEyLSAqIHRoZSBzZGhvc3QgY29udHJvbGxlciBhbGxvd3MgdG8gdXNlIHRoZSBzZGhjaSBjb250cm9sbGVyIGZvciB3aWZpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTY2PXN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzMtXFx0c3RydWN0IHJlc291cmNlICptZW1fcmVzO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxNzQ6XFx0aW50IG1tY19pcnEsIHNkaW9faXJxO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xNzUtXFx0dW5zaWduZWQgY2hhciBidXNfbW9kZTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODctXFx0Ym9vbCBkb19kbWE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjE4ODpcXHRib29sIHNkaW9faW50O1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xODktXFx0Ym9vbCBhY3RpdmVfcmVxdWVzdDtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz03NTY9bW1jX2RhdmluY2lfeGZlcl9kb25lKHN0cnVjdCBtbWNfZGF2aW5jaV9ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX2RhdGEgKmRhdGEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtNzY1LVxcdFxcdCAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3NjY6XFx0XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faW50IFxcdTAwMjZcXHUwMDI2ICEocmVhZGwoaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT1NUMCkgXFx1MDAyNlxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjctXFx0XFx0XFx0XFx0XFx0U0RJT1NUMF9EQVQxX0hJKSkge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NjgtXFx0XFx0XFx0d3JpdGVsKFNESU9JU1RfSU9JTlQsIGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JU1QpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzo3Njk6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy03NzAtXFx0XFx0fVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jPTgzMz1kYXZpbmNpX2Fib3J0X2RhdGEoc3RydWN0IG1tY19kYXZpbmNpX2hvc3QgKmhvc3QsIHN0cnVjdCBtbWNfZGF0YSAqZGF0YSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDAtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg0MTpzdGF0aWMgaXJxcmV0dXJuX3QgbW1jX2RhdmluY2lfc2Rpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy04NDIte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1MC1cXHRcXHR3cml0ZWwoc3RhdHVzIHwgU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjg1MTpcXHRcXHRtbWNfc2lnbmFsX3NkaW9faXJxKGhvc3QtXFx1MDAzZW1tYyk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTg1Mi1cXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTAxND1zdGF0aWMgaW50IG1tY19kYXZpbmNpX2dldF9ybyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDI0LVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDI1OnN0YXRpYyB2b2lkIG1tY19kYXZpbmNpX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAyNi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzMS1cXHRcXHRcXHR3cml0ZWwoU0RJT0lTVF9JT0lOVCwgaG9zdC1cXHUwMDNlYmFzZSArIERBVklOQ0lfU0RJT0lTVCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzI6XFx0XFx0XFx0bW1jX3NpZ25hbF9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDMzLVxcdFxcdH0gZWxzZSB7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEwMzQ6XFx0XFx0XFx0aG9zdC1cXHUwMDNlc2Rpb19pbnQgPSB0cnVlO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDM1LVxcdFxcdFxcdHdyaXRlbChyZWFkbChob3N0LVxcdTAwM2ViYXNlICsgREFWSU5DSV9TRElPSUVOKSB8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTAzOC1cXHR9IGVsc2Uge1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMDM5OlxcdFxcdGhvc3QtXFx1MDAzZXNkaW9faW50ID0gZmFsc2U7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEwNDAtXFx0XFx0d3JpdGVsKHJlYWRsKGhvc3QtXFx1MDAzZWJhc2UgKyBEQVZJTkNJX1NESU9JRU4pIFxcdTAwMjYgflNESU9JRU5fSU9JTlRFTixcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYz0xMDQ1PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIG1tY19kYXZpbmNpX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDQ5LVxcdC5nZXRfcm9cXHRcXHQ9IG1tY19kYXZpbmNpX2dldF9ybyxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTA1MDpcXHQuZW5hYmxlX3NkaW9faXJxID0gbW1jX2RhdmluY2lfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMDUxLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM9MTE4ND1zdGF0aWMgaW50IGRhdmluY2lfbW1jc2RfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUwLVxcdGhvc3QtXFx1MDAzZW1tY19pcnEgPSBpcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEyNTE6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSBwbGF0Zm9ybV9nZXRfaXJxX29wdGlvbmFsKHBkZXYsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYy0xMjUyLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jLTEzMDEtXFxuZHJpdmVycy9tbWMvaG9zdC9kYXZpbmNpX21tYy5jOjEzMDI6XFx0aWYgKGhvc3QtXFx1MDAzZXNkaW9faXJxIFxcdTAwM2U9IDApIHtcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmM6MTMwMzpcXHRcXHRyZXQgPSBkZXZtX3JlcXVlc3RfaXJxKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIGhvc3QtXFx1MDAzZXNkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvZGF2aW5jaV9tbWMuYzoxMzA0OlxcdFxcdFxcdFxcdCAgICAgICBtbWNfZGF2aW5jaV9zZGlvX2lycSwgMCxcXG5kcml2ZXJzL21tYy9ob3N0L2RhdmluY2lfbW1jLmMtMTMwNS1cXHRcXHRcXHRcXHQgICAgICAgbW1jX2hvc3RuYW1lKG1tYyksIGhvc3QpO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYz00OTg9c3RhdGljIGludCBkd19tY2lfcm9ja2NoaXBfaW5pdChzdHJ1Y3QgZHdfbWNpICpob3N0KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYy01MDMtXFx0LyogU0RJTyBpcnEgaXMgdGhlIDh0aCBvbiBSb2NrY2hpcCBTb0NzICovXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMtcm9ja2NoaXAuYzo1MDQ6XFx0aG9zdC1cXHUwMDNlc2Rpb19pcnEgPSA4O1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLXJvY2tjaGlwLmMtNTA1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0yNC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkaW8uaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI2LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTE0ODA9c3RhdGljIHZvaWQgZHdfbWNpX2h3X3Jlc2V0KHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTEyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTUxMzpzdGF0aWMgdm9pZCBkd19tY2lfcHJlcGFyZV9zZGlvX2lycShzdHJ1Y3QgZHdfbWNpICpob3N0LCBib29sIHByZXBhcmUpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTE0LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU0MC1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NDE6c3RhdGljIHZvaWQgX19kd19tY2lfZW5hYmxlX3NkaW9faXJxKHN0cnVjdCBkd19tY2kgKmhvc3QsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTQyLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU1MC1cXHRpZiAoZW5iKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU1MTpcXHRcXHRpbnRfbWFzayB8PSBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTUyLVxcdGVsc2VcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NTM6XFx0XFx0aW50X21hc2sgXFx1MDAyNj0gflNETU1DX0lOVF9TRElPKGhvc3QtXFx1MDAzZXNkaW9faXJxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTQtXFx0bWNpX3dyaXRlbChob3N0LCBJTlRNQVNLLCBpbnRfbWFzayk7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NTgtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTU5OnN0YXRpYyB2b2lkIGR3X21jaV9lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmIpXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTYwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU2Mi1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjM6XFx0ZHdfbWNpX3ByZXBhcmVfc2Rpb19pcnEoaG9zdCwgZW5iKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjE1NjQ6XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIGVuYik7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTY1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNTcyLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6MTU3MzpzdGF0aWMgdm9pZCBkd19tY2lfYWNrX3NkaW9faXJxKHN0cnVjdCBtbWNfaG9zdCAqbW1jKVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMTU3NC17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzYtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNTc3OlxcdF9fZHdfbWNpX2VuYWJsZV9zZGlvX2lycShob3N0LCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE1NzgtfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0xNjcwPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGR3X21jaV9vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTE2NzctXFx0LmNhcmRfaHdfcmVzZXQgICAgICAgICAgPSBkd19tY2lfaHdfcmVzZXQsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc4OlxcdC5lbmFibGVfc2Rpb19pcnFcXHQ9IGR3X21jaV9lbmFibGVfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoxNjc5OlxcdC5hY2tfc2Rpb19pcnFcXHRcXHQ9IGR3X21jaV9hY2tfc2Rpb19pcnEsXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYy0xNjgwLVxcdC5leGVjdXRlX3R1bmluZ1xcdFxcdD0gZHdfbWNpX2V4ZWN1dGVfdHVuaW5nLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYz0yNjU0PXN0YXRpYyBpcnFyZXR1cm5fdCBkd19tY2lfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc1Ny1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI3NTg6XFx0XFx0aWYgKHBlbmRpbmcgXFx1MDAyNiBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpIHtcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI3NTktXFx0XFx0XFx0bWNpX3dyaXRlbChob3N0LCBSSU5UU1RTLFxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MDpcXHRcXHRcXHRcXHQgICBTRE1NQ19JTlRfU0RJTyhob3N0LVxcdTAwM2VzZGlvX2lycSkpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmM6Mjc2MTpcXHRcXHRcXHRfX2R3X21jaV9lbmFibGVfc2Rpb19pcnEoaG9zdCwgMCk7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuYzoyNzYyOlxcdFxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjc2My1cXHRcXHR9XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTI3OTQ9c3RhdGljIGludCBkd19tY2lfaW5pdF9ob3N0X2NhcHMoc3RydWN0IGR3X21jaSAqaG9zdClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMjgyNS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjI4MjY6XFx0LyogUHJvY2VzcyBTRElPIElSUXMgdGhyb3VnaCB0aGUgc2Rpb19pcnFfd29yay4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTI4MjctXFx0aWYgKG1tYy1cXHUwMDNlY2FwcyBcXHUwMDI2IE1NQ19DQVBfU0RJT19JUlEpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jPTM0NDM9aW50IGR3X21jaV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jLTM0OTQtXFx0LyogUmUtZW5hYmxlIFNESU8gaW50ZXJydXB0cy4gKi9cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTU6XFx0aWYgKHNkaW9faXJxX2NsYWltZWQoaG9zdC1cXHUwMDNlbW1jKSlcXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5jOjM0OTY6XFx0XFx0X19kd19tY2lfZW5hYmxlX3NkaW9faXJxKGhvc3QsIDEpO1xcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmMtMzQ5Ny1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9NTI9c3RydWN0IGR3X21jaV9kbWFfc2xhdmUge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0xMjEtICogQGlycTogVGhlIGlycSB2YWx1ZSB0byBiZSBwYXNzZWQgdG8gcmVxdWVzdF9pcnEuXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoxMjI6ICogQHNkaW9faXJxOiBTRElPIGludGVycnVwdCBiaXQgaW4gaW50ZXJydXB0IHJlZ2lzdGVycy5cXG5kcml2ZXJzL21tYy9ob3N0L2R3X21tYy5oLTEyMy0gKiBAY21kMTFfdGltZXI6IFRpbWVyIGZvciBTRDMuMCB2b2x0YWdlIHN3aXRjaCBvdmVyIHNjaGVtZS5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvZHdfbW1jLmg9MTYxPXN0cnVjdCBkd19tY2kge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzMtXFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaDoyMzQ6XFx0aW50XFx0XFx0XFx0c2Rpb19pcnE7XFxuZHJpdmVycy9tbWMvaG9zdC9kd19tbWMuaC0yMzUtXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYz04NDA9c3RhdGljIGlycXJldHVybl90IGp6X21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NTktXFx0XFx0ano0NzQwX21tY193cml0ZV9pcnFfcmVnKGhvc3QsIEpaX01NQ19JUlFfU0RJTyk7XFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM6ODYwOlxcdFxcdG1tY19zaWduYWxfc2Rpb19pcnEoaG9zdC1cXHUwMDNlbW1jKTtcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy04NjEtXFx0XFx0aXJxX3JlZyBcXHUwMDI2PSB+SlpfTU1DX0lSUV9TRElPO1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmM9OTQwPXN0YXRpYyB2b2lkIGp6NDc0MF9tbWNfc2V0X2lvcyhzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jLTk5NC1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzo5OTU6c3RhdGljIHZvaWQgano0NzQwX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9qejQ3NDBfbW1jLmMtOTk2LXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3Qvano0NzQwX21tYy5jPTEwMTg9c3RhdGljIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgano0NzQwX21tY19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI0LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYzoxMDI1OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBqejQ3NDBfbW1jX2VuYWJsZV9zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2p6NDc0MF9tbWMuYy0xMDI2LVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBqejQ3NDBfdm9sdGFnZV9zd2l0Y2gsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy0yMC0jaW5jbHVkZSBcXHUwMDNjbGludXgvbW1jL3NkLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6MjE6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTQxMz1zdGF0aWMgaXJxcmV0dXJuX3QgbG9vbmdzb24yX21tY19pcnEoaW50IGlycSwgdm9pZCAqZGV2aWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy00MjgtXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM6NDI5OlxcdFxcdHNkaW9fc2lnbmFsX2lycShtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTQzMC1cXHRcXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYz01NzQ9c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19yZXF1ZXN0KHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU4OC1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1ODk6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTkwLXtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTU5NS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTY6c3RhdGljIHZvaWQgbG9vbmdzb24yX21tY19hY2tfc2Rpb19pcnEoc3RydWN0IG1tY19ob3N0ICptbWMpXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNTk3LXtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo1OTg6XFx0bG9vbmdzb24yX21tY19lbmFibGVfc2Rpb19pcnEobW1jLCAxKTtcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy01OTktfVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9NjAxPXN0YXRpYyBzdHJ1Y3QgbW1jX2hvc3Rfb3BzIGxvb25nc29uMl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjA1LVxcdC5nZXRfY2RcXHRcXHQ9IG1tY19ncGlvX2dldF9jZCxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYzo2MDY6XFx0LmVuYWJsZV9zZGlvX2lycSA9IGxvb25nc29uMl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYwNzpcXHQuYWNrX3NkaW9faXJxXFx0PSBsb29uZ3NvbjJfbW1jX2Fja19zZGlvX2lycSxcXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MDgtfTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jPTYxNz1zdGF0aWMgaW50IGxvb25nc29uMl9yZW9yZGVyX2NtZF9saXN0W10gPSB7IFNEX0FQUF9TRU5EX1NDUiwgU0RfQVBQX1NFTkRfTlVNX1dSX0JMS1MsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L2xvb25nc29uMi1tbWMuYy02MjItICogcmVzcG9uc2UgZGF0YXMgaGFzIGRpZmZlcmVudCBieXRlIG9yZGVyIHdpdGggdXN1YWwgZGF0YSBwYWNrZXRzLlxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjYyMzogKiBIb3dldmVyIHNkaW8gY29udHJvbGxlciB3aWxsIHNlbmQgdGhlc2UgZGF0YXMgaW4gdXN1YWwgZGF0YSBmb3JtYXQsXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtNjI0LSAqIHNvIHdlIG5lZWQgdG8gYWRqdXN0IHRoZXNlIGRhdGFzIHRvIGEgcHJvdG9jb2wgY29uc2lzdGVudCBieXRlIG9yZGVyLlxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmM9OTQwPXN0YXRpYyBpbnQgbG9vbmdzb24yX21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9sb29uZ3NvbjItbW1jLmMtOTczLVxcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jOjk3NDpcXHQvKiBQcm9jZXNzIFNESU8gSVJRcyB0aHJvdWdoIHRoZSBzZGlvX2lycV93b3JrLiAqL1xcbmRyaXZlcnMvbW1jL2hvc3QvbG9vbmdzb24yLW1tYy5jLTk3NS1cXHRpZiAobW1jLVxcdTAwM2VjYXBzIFxcdTAwMjYgTU1DX0NBUF9TRElPX0lSUSlcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjIwOiNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2Rpby5oXFx1MDAzZVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMjEtI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtNTMtI2RlZmluZSAgIENMS19BTFdBWVNfT04oaClcXHRcXHQoaC1cXHUwMDNlZGF0YS1cXHUwMDNlYWx3YXlzX29uKVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6NTQ6I2RlZmluZSAgIENMS19JUlFfU0RJT19TTEVFUChoKVxcdFxcdChoLVxcdTAwM2VkYXRhLVxcdTAwM2VpcnFfc2Rpb19zbGVlcClcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTU1LVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzY9c3RydWN0IG1lc29uX21tY19kYXRhIHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQwLVxcdHVuc2lnbmVkIGludCBhZGp1c3Q7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxNDE6XFx0dW5zaWduZWQgaW50IGlycV9zZGlvX3NsZWVwO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTQyLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkwNz1zdGF0aWMgdm9pZCBtZXNvbl9tbWNfcmVhZF9yZXNwKHN0cnVjdCBtbWNfaG9zdCAqbW1jLCBzdHJ1Y3QgbW1jX2NvbW1hbmQgKmNtZClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTIwLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTIxOnN0YXRpYyB2b2lkIF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTkyMi17XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTkzMT1zdGF0aWMgaXJxcmV0dXJuX3QgbWVzb25fbW1jX2lycShpbnQgaXJxLCB2b2lkICpkZXZfaWQpXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTk1Ni1cXHRcXHRzcGluX2xvY2soXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU3OlxcdFxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShob3N0LVxcdTAwM2VtbWMsIDApO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6OTU4OlxcdFxcdHNkaW9fc2lnbmFsX2lycShob3N0LVxcdTAwM2VtbWMpO1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtOTU5LVxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTA4Nj1zdGF0aWMgaW50IG1lc29uX21tY192b2x0YWdlX3N3aXRjaChzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgc3RydWN0IG1tY19pb3MgKmlvcylcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEwOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMTA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYywgaW50IGVuYWJsZSlcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMTEte1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE1LVxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZob3N0LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTE2OlxcdF9fbWVzb25fbW1jX2VuYWJsZV9zZGlvX2lycShtbWMsIGVuYWJsZSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTE3LVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhvc3QtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTExOS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjExMjA6c3RhdGljIHZvaWQgbWVzb25fbW1jX2Fja19zZGlvX2lycShzdHJ1Y3QgbW1jX2hvc3QgKm1tYylcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jLTExMjEte1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEyMjpcXHRtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxKG1tYywgMSk7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTIzLX1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM9MTEyNT1zdGF0aWMgY29uc3Qgc3RydWN0IG1tY19ob3N0X29wcyBtZXNvbl9tbWNfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMTMzLVxcdC5zdGFydF9zaWduYWxfdm9sdGFnZV9zd2l0Y2ggPSBtZXNvbl9tbWNfdm9sdGFnZV9zd2l0Y2gsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYzoxMTM0OlxcdC5lbmFibGVfc2Rpb19pcnEgPSBtZXNvbl9tbWNfZW5hYmxlX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmM6MTEzNTpcXHQuYWNrX3NkaW9faXJxXFx0PSBtZXNvbl9tbWNfYWNrX3NkaW9faXJxLFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTEzNi19O1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYz0xMzA5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVzb25fbW1jX2RhdGEgbWVzb25fZ3hfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMxMy1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMTQ6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjJfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzE1LX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jPTEzMTc9c3RhdGljIGNvbnN0IHN0cnVjdCBtZXNvbl9tbWNfZGF0YSBtZXNvbl9heGdfZGF0YSA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tZ3gtbW1jLmMtMTMyMS1cXHQuYWRqdXN0XFx0XFx0PSBTRF9FTU1DX1YzX0FESlVTVCxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLWd4LW1tYy5jOjEzMjI6XFx0LmlycV9zZGlvX3NsZWVwXFx0PSBDTEtfVjNfSVJRX1NESU9fU0xFRVAsXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1neC1tbWMuYy0xMzIzLX07XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmMtMjItI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9tbWMuaFxcdTAwM2VcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MjM6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTI0LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvc2xvdC1ncGlvLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM9MTMyPXN0YXRpYyB2b2lkIG1lc29uX214X3NkaGNfc3RhcnRfY21kKHN0cnVjdCBtbWNfaG9zdCAqbW1jLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGhjLW1tYy5jLTE3OS1cXHRcXHQgKiBkb3dubG9hZCBpbiB0aGUgYnJjbWZtYWMgZHJpdmVyIGZvciBhIEJDTTQzMzYyLzEgY2FyZC5cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaGMtbW1jLmM6MTgwOlxcdFxcdCAqIFdpdGhvdXQgdGhpcyBzZGlvX21lbWNweV90b2lvKCkgKHdpdGggYSBzaXplIG9mIDIxOTU1N1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2RoYy1tbWMuYy0xODEtXFx0XFx0ICogYnl0ZXMpIHRpbWVzIG91dCBpZiBNRVNPTl9TREhDX01JU0NfTUFOVUFMX1NUT1AgaXMgbm90IHNldC5cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTItLypcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzozOiAqIG1lc29uLW14LXNkaW8uYyAtIE1lc29uNiwgTWVzb244IGFuZCBNZXNvbjhiIFNESU8vTU1DIEhvc3QgQ29udHJvbGxlclxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTQtICpcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTI3LSNpbmNsdWRlIFxcdTAwM2NsaW51eC9tbWMvbW1jLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6Mjg6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zZGlvLmhcXHUwMDNlXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtMjktI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYy9zbG90LWdwaW8uaFxcdTAwM2VcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTYyOT1zdGF0aWMgaW50IG1lc29uX214X21tY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTYzMC17XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NjMxOlxcdGNvbnN0IHN0cnVjdCByZWdtYXBfY29uZmlnIG1lc29uX214X3NkaW9fcmVnbWFwX2NvbmZpZyA9IHtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02MzItXFx0XFx0LnJlZ19iaXRzID0gOCxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTY2OC1cXHRob3N0LVxcdTAwM2VyZWdtYXAgPSBkZXZtX3JlZ21hcF9pbml0X21taW8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgYmFzZSxcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYzo2Njk6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bWVzb25fbXhfc2Rpb19yZWdtYXBfY29uZmlnKTtcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy02NzAtXFx0aWYgKElTX0VSUihob3N0LVxcdTAwM2VyZWdtYXApKSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYz03NDg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbWVzb25fbXhfbW1jX29mX21hdGNoW10gPSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzQ5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjgtc2Rpb1xcXCIsIH0sXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmM6NzUwOlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYW1sb2dpYyxtZXNvbjhiLXNkaW9cXFwiLCB9LFxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jLTc1MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jPTc1NT1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtZXNvbl9teF9tbWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tZXNvbi1teC1zZGlvLmMtNzU4LVxcdC5kcml2ZXIgID0ge1xcbmRyaXZlcnMvbW1jL2hvc3QvbWVzb24tbXgtc2Rpby5jOjc1OTpcXHRcXHQubmFtZSA9IFxcXCJtZXNvbi1teC1zZGlvXFxcIixcXG5kcml2ZXJzL21tYy9ob3N0L21lc29uLW14LXNkaW8uYy03NjAtXFx0XFx0LnByb2JlX3R5cGUgPSBQUk9CRV9QUkVGRVJfQVNZTkNIUk9OT1VTLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNfc3BpLmMtMzMtICpcXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYzozNDogKiAtIEZvciBub3csIHdlIHdvbid0IHRyeSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhIHJlYWwgbW1jL3NkL3NkaW9cXG5kcml2ZXJzL21tYy9ob3N0L21tY19zcGkuYy0zNS0gKiAgIGNvbnRyb2xsZXIsIGFsdGhvdWdoIHNvbWUgb2YgdGhlbSBkbyBoYXZlIGhhcmR3YXJlIHN1cHBvcnQgZm9yXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xMTE9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91MzAwID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTIxLVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjEyMzpcXHQuc3Rfc2Rpb1xcdFxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0xMjQtXFx0LnB3cnJlZ19wb3dlcnVwXFx0XFx0PSBNQ0lfUFdSX09OLFxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTM2PXN0YXRpYyBzdHJ1Y3QgdmFyaWFudF9kYXRhIHZhcmlhbnRfbm9tYWRpayA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE0Ni1cXHQuZGF0YWN0cmxfYmxvY2tzelxcdD0gMTEsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTQ3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNDg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTQ5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjI9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMCA9IHtcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTE3Ni1cXHQuZG1hX3Bvd2VyX29mXzJcXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTc3OlxcdC5kYXRhY3RybF9tYXNrX3NkaW9cXHQ9IE1DSV9EUFNNX1NUX1NESU9FTixcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzg6XFx0LnN0X3NkaW9cXHRcXHQ9IHRydWUsXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc5LVxcdC5zdF9jbGtkaXZcXHRcXHQ9IHRydWUsXFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xOTY9c3RhdGljIHN0cnVjdCB2YXJpYW50X2RhdGEgdmFyaWFudF91eDUwMHYyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjExLVxcdC5kbWFfcG93ZXJfb2ZfMlxcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyMTI6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjIxMzpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yMTQtXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTIzMT1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjQ0LVxcdC5kYXRhY3RybF9ibG9ja3N6XFx0PSAxMSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNDU6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjI0NjpcXHQuc3Rfc2Rpb1xcdFxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNDctXFx0LnN0X2Nsa2RpdlxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI1Nj1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jID0ge1xcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMjcyLVxcdC5kYXRhY3RybF9hbnlfYmxvY2tzelxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoyNzM6XFx0LmRhdGFjdHJsX21hc2tfc2Rpb1xcdD0gTUNJX0RQU01fU1RfU0RJT0VOLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NC1cXHQuc3RtMzJfaWRtYWJzaXplX21hc2tcXHQ9IEdFTk1BU0soMTIsIDUpLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTI3NS1cXHQuc3RtMzJfaWRtYWJzaXplX2FsaWduXFx0PSBCSVQoNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6Mjc2OlxcdC5zdXBwb3J0c19zZGlvX2lycVxcdD0gdHJ1ZSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0yNzctXFx0LmJ1c3lfdGltZW91dFxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTI4ND1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjIgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMDAtXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMwMTpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAyLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNSksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzAzLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg1KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMDQ6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMwNS1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTMxMz1zdGF0aWMgc3RydWN0IHZhcmlhbnRfZGF0YSB2YXJpYW50X3N0bTMyX3NkbW1jdjMgPSB7XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYy0zMjktXFx0LmRhdGFjdHJsX2FueV9ibG9ja3N6XFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjMzMDpcXHQuZGF0YWN0cmxfbWFza19zZGlvXFx0PSBNQ0lfRFBTTV9TVF9TRElPRU4sXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMxLVxcdC5zdG0zMl9pZG1hYnNpemVfbWFza1xcdD0gR0VOTUFTSygxNiwgNiksXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMzMyLVxcdC5zdG0zMl9pZG1hYnNpemVfYWxpZ25cXHQ9IEJJVCg2KSxcXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzozMzM6XFx0LnN1cHBvcnRzX3NkaW9faXJxXFx0PSB0cnVlLFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTMzNC1cXHQuZG1hX2xsaVxcdFxcdD0gdHJ1ZSxcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jPTQyNT1zdGF0aWMgdm9pZCBtbWNpX3dyaXRlX2RhdGFjdHJscmVnKHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIHUzMiBkYXRhY3RybClcXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTQyOC1cXHRkYXRhY3RybCB8PSBob3N0LVxcdTAwM2VkYXRhY3RybF9yZWcgXFx1MDAyNiAoaG9zdC1cXHUwMDNldmFyaWFudC1cXHUwMDNlYnVzeV9kcHNtX2ZsYWcgfFxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jOjQyOTpcXHRcXHRcXHRcXHRcXHQgIGhvc3QtXFx1MDAzZXZhcmlhbnQtXFx1MDAzZWRhdGFjdHJsX21hc2tfc2Rpbyk7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtNDMwLVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM9MTIzNj1zdGF0aWMgdm9pZCBtbWNpX3N0YXJ0X2RhdGEoc3RydWN0IG1tY2lfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19kYXRhICpkYXRhKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2MS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxMjYyOlxcdGlmIChob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQgXFx1MDAyNlxcdTAwMjYgbW1jX2NhcmRfc2Rpbyhob3N0LVxcdTAwM2VtbWMtXFx1MDAzZWNhcmQpKSB7XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2My1cXHRcXHR1MzIgY2xrO1xcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNjQtXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI2NTpcXHRcXHRkYXRhY3RybCB8PSB2YXJpYW50LVxcdTAwM2VkYXRhY3RybF9tYXNrX3NkaW87XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI2Ni1cXG4tLVxcbmRyaXZlcnMvbW1jL2hvc3QvbW1jaS5jLTEyNzItXFx0XFx0ICovXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmM6MTI3MzpcXHRcXHRpZiAodmFyaWFudC1cXHUwMDNlc3Rfc2RpbyBcXHUwMDI2XFx1MDAyNiBkYXRhLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1NQ19EQVRBX1dSSVRFIFxcdTAwMjZcXHUwMDI2XFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTI3NC1cXHRcXHQgICAgKGhvc3QtXFx1MDAzZXNpemUgXFx1MDAzYyA4IHx8XFxuLS1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYz0xNjk3PXN0YXRpYyBpcnFyZXR1cm5fdCBtbWNpX3Bpb19pcnEoaW50IGlycSwgdm9pZCAqZGV2X2lkKVxcbi0tXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc2OC1cXG5kcml2ZXJzL21tYy9ob3N0L21tY2kuYzoxNzY5OnN0YXRpYyB2b2lkIG1tY2lfd3JpdGVfc2Rpb19pcnFfYml0KHN0cnVjdCBtbWNpX2hvc3QgKmhvc3QsIGludCBlbmFibGUpXFxuZHJpdmVycy9tbWMvaG9zdC9tbWNpLmMtMTc3MC17XFxuLS1cXG5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTE6NTcuOTIzMzc4MDQ3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwMTMyNTg4NDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVucmVhY2hhYmxlIENvZGUgaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IGlmIGl0J3Mgd29ydGggZnV6emluZy4gVGhlIGNydXggb2YgdGhlIGlzc3VlIGlzIHRoaXMgU0RJTyBkcml2ZXIgZm9yIHRoZSBSZWFsdGVrIFJUTDg3MjNCUy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlcmUncyBubyB3YXkgdG8gdHJpZ2dlciB0aGlzIGNvZGUgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cCwgbGlrZSBRRU1VIG9yIHN5emthbGxlci4gVGhlcmUncyBubyBidWlsdC1pbiBgZHVtbXlfbW1jYCBvciBgdmhjaWAgZXF1aXZhbGVudCBmb3IgU0RJTywgd2hpY2ggd291bGQgYWxsb3cgbWUgdG8gaW5qZWN0IGEgdmlydHVhbCBTRElPIGRldmljZS5cblxuSSBicmllZmx5IGNvbnNpZGVyZWQgYGRyaXZlcnMvbW1jL2hvc3QvbW1jX3NwaS5jYCwgYnV0IGl0IGV4cGxpY2l0bHkgc2F5cyBpdCAqZG9lc24ndCogaW50ZXJhY3Qgd2l0aCByZWFsIE1NQy9TRC9TRElPIGNvbnRyb2xsZXJzLiBRRU1VIGRvZXMgaGF2ZSBgc2RoY2ktcGNpYCB0byBlbXVsYXRlIGFuIFNEIGhvc3QgY29udHJvbGxlciwgYnV0IHRoYXQncyBmb3IgU0QgY2FyZHMsIG5vdCBTRElPLiBEYW1uLiBJIGV2ZW4gd29uZGVyZWQgaWYgYSB1c2VyLXNwYWNlIHByb2dyYW0gY291bGQgYWN0IGFzIGFuIFNESU8gZGV2aWNlIHNvbWVob3csIGJ1dCBubywgdGhlIExpbnV4IGtlcm5lbCBkb2Vzbid0IG9mZmVyIGFueSBpbnRlcmZhY2UgZm9yIHRoYXQuXG5cblNvLCB0aGUgYHJ0dzg4YCBTRElPIGRyaXZlciBjYW4ndCBiZSBwcm9iZWQgaW4gYSBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgd2hpY2ggbWFrZXMgaXQgdW5yZWFjaGFibGUgY29kZS5cblxuVGhlIHF1ZXN0aW9uIHRoZW4gYmVjb21lcywgaWYgdGhlIGRyaXZlciBpcyBjb21waWxlZCwgYnV0IG5ldmVyIHByb2JlZCwgZG9lcyB0aGF0IGNvZGUgbWF0dGVyIGZvciBmdXp6aW5nIHB1cnBvc2VzPyBUaGUgcHJvbXB0IGlzIHRlbGxpbmcgbWUgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIHRoZSBwYXRjaCBoYXMgdW5yZWFjaGFibGUgY29kZSBsaWtlIHRoaXMuXG5cbkkgaW5pdGlhbGx5IHRob3VnaHQgdGhhdCBgbWFjODAyMTFfaHdzaW1gICptaWdodCogcHJvdmlkZSBhIHBhdGggdG8gdGhpcyBjb2RlLCBidXQgdGhhdCdzIGEgZGVhZCBlbmQuIEl0J3MgYSBjb21wbGV0ZWx5IHNlcGFyYXRlIHNvZnR3YXJlLWVtdWxhdGVkIFdpLUZpIGRyaXZlciBhbmQgZG9lc24ndCB1c2UgdGhlIGBydHc4OGAgZHJpdmVyIG9yIGFueSBvZiB0aGUgUmVhbHRlayBkcml2ZXIgY29kZS5cblxuVGhlIHBhdGNoIG1vZGlmaWVzIGB0eC5jYCwgYnV0IHRoZSBhZGRlZCBjb2RlIGlzIGd1YXJkZWQgYnkgYSBjb25kaXRpb24gdGhhdCByZXF1aXJlcyB0aGUgc3BlY2lmaWMgUmVhbHRlayBjaGlwIGFuZCBhbiBTRElPIGludGVyZmFjZS4gSSBsb29rZWQgYXQgdGhlIGNvbmRpdGlvbjpcbmBgYGNcblx0aWYgKChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MjNEIFx1MDAyNlx1MDAyNlxuXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuXHQgICAgcnR3X2lzXzg3MjNicyhydHdkZXYpKVxuYGBgXG5UaGUgVVNCIHBhdGggd2FzIGFscmVhZHkgdGhlcmU7IHRoZSBwYXRjaCBqdXN0IGFkZHMgYHx8IHJ0d19pc184NzIzYnMocnR3ZGV2KWAuIFRoZSBuZXcgY29uZGl0aW9uIGlzIG9ubHkgdGFrZW4gZm9yIHRoZSBSVEw4NzIzQlMgY2hpcCAodGhhdCB0cmlnZ2VycyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCkgd2hpY2ggKnJlcXVpcmVzKiB0aGUgU0RJTyBpbnRlcmZhY2UuIEFueSBjaGFuZ2VzIGluIGBzZGlvLmNgIGFuZCBgc2Rpby5oYCBhcmUgKm9ubHkqIGNvbXBpbGVkIGFuZCB1c2VkIGlmIHRoZSBTRElPIGludGVyZmFjZSBpcyBhY3RpdmUuXG5cblNvLCBldmVuIGlmIGBDT05GSUdfUlRXODhfU0RJT2AgaXMgc2V0LCBgc2Rpby5jYCB3aWxsIHN0aWxsIGJlIGNvbXBpbGVkLCBidXQgdGhlIGNvZGUgd2lsbCAqb25seSogYmUgZXhlY3V0ZWQgaWYgYW4gU0RJTyBkZXZpY2UgaXMgYWN0dWFsbHkgcHJvYmVkLlxuXG5UaGUgYm90dG9tIGxpbmU6IGdpdmVuIHRoYXQgd2UgY2FuJ3QgZW11bGF0ZSBTRElPIGRldmljZXMgaW4gYSBzdGFuZGFyZCBlbnZpcm9ubWVudCwgdGhpcyBjb2RlIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUuXG5cbkknbSBnb2luZyB0byBkb3VibGUgY2hlY2sgdGhlIGtlcm5lbCBzb3VyY2UganVzdCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gdGhlcmUgaXNuJ3Qgc29tZSBjbGV2ZXIgc29mdHdhcmUgaW5qZWN0aW9uIG1lY2hhbmlzbSBmb3IgU0RJTyBoaWRpbmcgaW4gYGRyaXZlcnMvbW1jL2NvcmUvYCwgYnV0IEknbSBwcmV0dHkgY29uZmlkZW50IGluIG15IGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMzc4NCwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMFQwOTo1MjowOC4wNTU5NzA1NzdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQxNTA1MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2Rpb19yZWdpc3Rlcl9kcml2ZXJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYz0xNzQ1PXN0YXRpYyBpbnQgX19pbml0IGJ0bXJ2bF9zZGlvX2luaXRfbW9kdWxlKHZvaWQpXFxuZHJpdmVycy9ibHVldG9vdGgvYnRtcnZsX3NkaW8uYy0xNzQ2LXtcXG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jOjE3NDc6XFx0aWYgKHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZidF9tcnZsX3NkaW8pICE9IDApIHtcXG5kcml2ZXJzL2JsdWV0b290aC9idG1ydmxfc2Rpby5jLTE3NDgtXFx0XFx0QlRfRVJSKFxcXCJTRElPIERyaXZlciBSZWdpc3RyYXRpb24gRmFpbGVkXFxcIik7XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM9Mjc0PXN0YXRpYyB2b2lkIHNkaW9fbGVnYWN5X3NodXRkb3duKHN0cnVjdCBzZGlvX2Z1bmMgKmZ1bmMpXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjgyLS8qKlxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYzoyODM6ICpcXHRfX3NkaW9fcmVnaXN0ZXJfZHJpdmVyIC0gcmVnaXN0ZXIgYSBmdW5jdGlvbiBkcml2ZXJcXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMjg0LSAqXFx0QGRydjogU0RJTyBmdW5jdGlvbiBkcml2ZXJcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0yODYtICovXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jOjI4NzppbnQgX19zZGlvX3JlZ2lzdGVyX2RyaXZlcihzdHJ1Y3Qgc2Rpb19kcml2ZXIgKmRydiwgc3RydWN0IG1vZHVsZSAqb3duZXIpXFxuZHJpdmVycy9tbWMvY29yZS9zZGlvX2J1cy5jLTI4OC17XFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmMtMzAxLX1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fYnVzLmM6MzAyOkVYUE9SVF9TWU1CT0xfR1BMKF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb19idXMuYy0zMDMtXFxuLS1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jPTExMTU9c3RhdGljIGludCBfX2luaXQgc2Rpb191YXJ0X2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0MC1cXG5kcml2ZXJzL21tYy9jb3JlL3NkaW9fdWFydC5jOjExNDE6XFx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnNkaW9fdWFydF9kcml2ZXIpO1xcbmRyaXZlcnMvbW1jL2NvcmUvc2Rpb191YXJ0LmMtMTE0Mi1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYz0xOTU9aW50IGI0M19zZGlvX2luaXQodm9pZClcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9iNDMvc2Rpby5jLTE5Ni17XFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYjQzL3NkaW8uYzoxOTc6XFx0cmV0dXJuIHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZiNDNfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2I0My9zZGlvLmMtMTk4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYz0xMjcxPWludCBicmNtZl9zZGlvX3JlZ2lzdGVyKHZvaWQpXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvYnJvYWRjb20vYnJjbTgwMjExL2JyY21mbWFjL2JjbXNkaC5jLTEyNzIte1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL2Jyb2FkY29tL2JyY204MDIxMS9icmNtZm1hYy9iY21zZGguYzoxMjczOlxcdHJldHVybiBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2YnJjbWZfc2RtbWNfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9icm9hZGNvbS9icmNtODAyMTEvYnJjbWZtYWMvYmNtc2RoLmMtMTI3NC19XFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9tYXJ2ZWxsL2xpYmVydGFzL2lmX3NkaW8uYz0xMzkwPXN0YXRpYyBpbnQgX19pbml0IGlmX3NkaW9faW5pdF9tb2R1bGUodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTYtXFxuZHJpdmVycy9uZXQvd2lyZWxlc3MvbWFydmVsbC9saWJlcnRhcy9pZl9zZGlvLmM6MTM5NzpcXHRyZXQgPSBzZGlvX3JlZ2lzdGVyX2RyaXZlcihcXHUwMDI2aWZfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL21hcnZlbGwvbGliZXJ0YXMvaWZfc2Rpby5jLTEzOTgtXFxuLS1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zaWxhYnMvd2Z4L21haW4uYz00OTM9c3RhdGljIGludCBfX2luaXQgd2Z4X2NvcmVfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmMtNTAyLVxcdGlmIChJU19FTkFCTEVEKENPTkZJR19NTUMpKSB7XFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc2lsYWJzL3dmeC9tYWluLmM6NTAzOlxcdFxcdHJldCA9IHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZ3Znhfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3NpbGFicy93ZngvbWFpbi5jLTUwNC1cXHRcXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvd2lyZWxlc3Mvc3QvY3cxMjAwL2N3MTIwMF9zZGlvLmM9Mzg4PXN0YXRpYyBpbnQgX19pbml0IGN3MTIwMF9zZGlvX2luaXQodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dpcmVsZXNzL3N0L2N3MTIwMC9jdzEyMDBfc2Rpby5jLTQwMC1cXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvY3cxMjAwX3NkaW8uYzo0MDE6XFx0cmV0ID0gc2Rpb19yZWdpc3Rlcl9kcml2ZXIoXFx1MDAyNnNkaW9fZHJpdmVyKTtcXG5kcml2ZXJzL25ldC93aXJlbGVzcy9zdC9jdzEyMDAvY3cxMjAwX3NkaW8uYy00MDItXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jPTQ1MT1zdGF0aWMgaW50IF9faW5pdCBydHdfZHJ2X2VudHJ5KHZvaWQpXFxuZHJpdmVycy9zdGFnaW5nL3J0bDg3MjNicy9vc19kZXAvc2Rpb19pbnRmLmMtNDUyLXtcXG5kcml2ZXJzL3N0YWdpbmcvcnRsODcyM2JzL29zX2RlcC9zZGlvX2ludGYuYzo0NTM6XFx0cmV0dXJuIHNkaW9fcmVnaXN0ZXJfZHJpdmVyKFxcdTAwMjZydGw4NzIzYnNfc2Rpb19kcml2ZXIpO1xcbmRyaXZlcnMvc3RhZ2luZy9ydGw4NzIzYnMvb3NfZGVwL3NkaW9faW50Zi5jLTQ1NC19XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaD03NT1zdHJ1Y3Qgc2Rpb19kcml2ZXIge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmgtMTEwLS8qIHVzZSBhIG1hY3JvIHRvIGF2b2lkIGluY2x1ZGUgY2hhaW5pbmcgdG8gZ2V0IFRISVNfTU9EVUxFICovXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTExOiNkZWZpbmUgc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2KSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTEyOlxcdF9fc2Rpb19yZWdpc3Rlcl9kcml2ZXIoZHJ2LCBUSElTX01PRFVMRSlcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaDoxMTM6ZXh0ZXJuIGludCBfX3NkaW9fcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqLCBzdHJ1Y3QgbW9kdWxlICopO1xcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTExNC1leHRlcm4gdm9pZCBzZGlvX3VucmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBzZGlvX2RyaXZlciAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW1jL3NkaW9fZnVuYy5oLTEyNC0jZGVmaW5lIG1vZHVsZV9zZGlvX2RyaXZlcihfX3NkaW9fZHJpdmVyKSBcXFxcXFxuaW5jbHVkZS9saW51eC9tbWMvc2Rpb19mdW5jLmg6MTI1OlxcdG1vZHVsZV9kcml2ZXIoX19zZGlvX2RyaXZlciwgc2Rpb19yZWdpc3Rlcl9kcml2ZXIsIFxcXFxcXG5pbmNsdWRlL2xpbnV4L21tYy9zZGlvX2Z1bmMuaC0xMjYtXFx0XFx0ICAgICAgc2Rpb191bnJlZ2lzdGVyX2RyaXZlcilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTI6MDkuNTQwMTI2MzM4WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE4MTgzNTk3NTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBSZWFsdGVrIFJUTDg3MjNCUyBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIHRoZXJlJ3Mgbm8gYGR1bW15X3NkaW9gIG9yIGFueXRoaW5nIGNvbXBhcmFibGUgaW4gdGhlIHZpcnR1YWxpemVkIGVudmlyb25tZW50IHRvIGFsbG93IGZvciBTRElPIGVtdWxhdGlvbi4gVGhlIGBydHc4OGAgZHJpdmVyIHVzZXMgYG1vZHVsZV9zZGlvX2RyaXZlcmAgb3IgYHNkaW9fcmVnaXN0ZXJfZHJpdmVyYCB0byByZWdpc3RlciBpdHMgU0RJTyBkcml2ZXJzLiBUaGlzIG1lYW5zIHRoZSBgcHJvYmVgIGZ1bmN0aW9uLCBhbmQgdGhlcmVmb3JlIHRoZSBTRElPLXNwZWNpZmljIGNvZGUsIGlzIG5ldmVyIGdvaW5nIHRvIGJlIGhpdCB1bmxlc3MgdGhlcmUncyBhbiBhY3R1YWwgU0RJTyBjb250cm9sbGVyIGFuZCBjYXJkIHByZXNlbnQuIFNvLCBhbnkgbW9kaWZpY2F0aW9ucyBkaXJlY3RseSB0aWVkIHRvIFNESU8gYXJlIHVucmVhY2hhYmxlLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMuIFRoZXJlJ3MgYSBtb2RpZmljYXRpb24gaW4gYHNkaW8uY2A6ICB0aGUgY2hhbmdlIHRvIHVzZSBgbW9kX2RlbGF5ZWRfd29ya2AgaW5zdGVhZCBvZiBgcXVldWVfd29ya2Agd2hpY2ggYWZmZWN0cyB0aGUgcmV0cnkgbWVjaGFuaXNtIGZvciBTRElPIGNoaXBzLiBJdCBtb2RpZmllcyB0aGUgYmVoYXZpb3IgZm9yICphbGwqIFNESU8gY2hpcHMgc3VwcG9ydGVkIGJ5IGBydHc4OGAuIEJ1dCBhZ2FpbiwgdGhhdCdzIFNESU8tc3BlY2lmaWMuIFRoaXMgY2hhbmdlIGlzIHN0aWxsIHVuLWZ1enphYmxlLlxuXG5UaGVuIHRoZXJlIGFyZSBjaGFuZ2VzIGluIGByeC5jYDpcbmBgYGNcbi1cdGlmIChydHdkZXYtXHUwMDNlY2hpcC1cdTAwM2VpZCA9PSBSVFdfQ0hJUF9UWVBFXzg3MDNCIFx1MDAyNlx1MDAyNiBwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDApIHtcbitcdGlmIChwa3Rfc3RhdC1cdTAwM2Vwa3RfbGVuID09IDAgXHUwMDI2XHUwMDI2XG4rXHQgICAgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcwM0IgfHwgcnR3X2lzXzg3MjNicyhydHdkZXYpKSkge1xuYGBgXG5hbmQgYHR4LmNgOlxuYGBgY1xuLVx0aWYgKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4tXHQgICAgcnR3ZGV2LVx1MDAzZWhjaS50eXBlID09IFJUV19IQ0lfVFlQRV9VU0IpXG4rXHRpZiAoKHJ0d2Rldi1cdTAwM2VjaGlwLVx1MDAzZWlkID09IFJUV19DSElQX1RZUEVfODcyM0QgXHUwMDI2XHUwMDI2XG4rXHQgICAgIHJ0d2Rldi1cdTAwM2VoY2kudHlwZSA9PSBSVFdfSENJX1RZUEVfVVNCKSB8fFxuK1x0ICAgIHJ0d19pc184NzIzYnMocnR3ZGV2KSlcbmBgYFxuVGhlc2UgYWZmZWN0IGBydHdfcnhfZmlsbF9yeF9zdGF0dXNgIGFuZCBzaW1pbGFyIGZ1bmN0aW9ucyB3aGljaCBhcmUgY2FsbGVkIGZvciBhbGwgaW50ZXJmYWNlcyAoUENJZSwgVVNCLCBhbmQgU0RJTykuIEJ1dCwgSSAqY2FuKiByZWFjaCBgcnR3ODhgIHZpYSBQQ0llIG9yIFVTQi4gRm9yIGluc3RhbmNlLCBgcnR3ODgyMmJlYCBpcyBhIFBDSWUgZHJpdmVyOyBgcnR3ODgyMmJ1YCBpcyBVU0IuIFVzaW5nIGBkdW1teV9oY2RgIG9yIGByYXdfZ2FkZ2V0YCwgSSAqY2FuKiBlbXVsYXRlIGEgVVNCIGRldmljZSBtYXRjaGluZyB0aGUgYHJ0dzg4YCBVU0IgSURzIGFuZCB0aGVyZWZvcmUgdHJpZ2dlciBgcnR3X3J4X2ZpbGxfcnhfc3RhdHVzYC5cblxuSG93ZXZlciwgdGhlIGtleSBoZXJlIGlzIHRoZSBgcnR3X2lzXzg3MjNicygpYCBjaGVjay4gTGV0J3Mgc2VlIGlmIHRoaXMgaXMgYW4gaXNzdWUuIFRoZSBjaGFuZ2UgaW4gYHJ4LmNgLCBpbiB0aGUgY29udGV4dCBvZiBub24tODcyM2JzIGNoaXBzLCBpcyBlc3NlbnRpYWxseSByZW9yZGVyaW5nIG9mIGFuIGFscmVhZHkgcHJlc2VudCBjb25kaXRpb24sIG5vdCBhIGZ1bmN0aW9uYWwgY2hhbmdlLiBJdCBzaW1wbHkgYWRkcyBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCwgd2hpY2ggd2lsbCAqYWx3YXlzKiBiZSBmYWxzZSBmb3IgVVNCL1BDSWUgZGV2aWNlcy4gSW4gYHR4LmNgIHRoZSBzYW1lIGxvZ2ljIGFwcGxpZXMuIEFnYWluLCBgcnR3X2lzXzg3MjNicyhydHdkZXYpYCBpcyBhZGRlZCwgYW5kIGl0IGlzIHN0aWxsIGZ1bmN0aW9uYWxseSB0aGUgc2FtZS4gVGhlIGNoYW5nZSBpcyBub24tZnVuY3Rpb25hbC5cblxuVGhlcmVmb3JlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogY2hhbmdlcyBhcmUgZm9yIGBydHdfaXNfODcyM2JzKHJ0d2RldilgIGFuZCB0aGUgU0RJTy1zcGVjaWZpYyBtb2RpZmljYXRpb25zIGluIGBzZGlvLmNgLiBUaGUgU0RJTyBjaGFuZ2VzIGFyZSBpbmFjY2Vzc2libGUsIGFuZCB0aGUgYHJ0d19pc184NzIzYnMoKWAgaXMgZ3VhcmRlZCBieSB0aGUgYFJUV19IQ0lfVFlQRV9TRElPYCB3aGljaCBjYW4gbmV2ZXIgYmUgc2V0IGJ5IFVTQi9QQ0llIGluIHRoaXMgZHJpdmVyLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0IG1lIGRvdWJsZS1jaGVjazogZXZlbiBpZiBJIGVtdWxhdGUgYSBVU0IgZGV2aWNlIGFuZCBzb21laG93IHNldCBpdHMgY2hpcCBJRCB0byBgUlRXX0NISVBfVFlQRV84NzIzQmAsIGBydHdfaXNfODcyM2JzKClgIHdpbGwgc3RpbGwgcmV0dXJuIGZhbHNlIGJlY2F1c2UgaXQgZXhwbGljaXRseSBjaGVja3MgZm9yIGBydHdkZXYtXHUwMDNlaGNpLnR5cGUgPT0gUlRXX0hDSV9UWVBFX1NESU9gLiBPa2F5LCB0aGF0IGNvbmZpcm1zIGl0LlxuXG5UaGUgbmV3IGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gbXkgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaXMgcGF0Y2ggcGVyZmVjdGx5IGZpdHMgdGhlIGNyaXRlcmlhOiBpdCBpbnRyb2R1Y2VzIGNvZGUgcGF0aHMgdGhhdCBjYW5ub3QgYmUgYWNjZXNzZWQgZHVlIHRvIHRoZSBsYWNrIG9mIFNESU8gZW11bGF0aW9uLCBhbmQgdGhlIHNoYXJlZCBjb2RlIGhhcyBjaGVja3MgaW4gcGxhY2UgdGhhdCBwcmV2ZW50IHRoZW0gZnJvbSBhZmZlY3Rpbmcgbm9uLVNESU8gcGF0aHMuXG5cbkknbSBjb25maWRlbnQuICoqV29ydGhGdXp6aW5nPWZhbHNlKiouXG5cbk15IHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXBcblxuIiwiSW5wdXRUb2tlbnMiOjM2OTE4LCJPdXRwdXRUb2tlbnMiOjE5MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1ODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjBUMDk6NTI6MjcuNzIzNzI2Nzk4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE0NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBzdXBwb3J0IGFuZCBmaXhlcyBmb3IgdGhlIFJlYWx0ZWsgUlRMODcyM0JTIFdpLUZpIGNoaXAsIHdoaWNoIG9wZXJhdGVzIG92ZXIgdGhlIFNESU8gYnVzLiBUaGUgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSBlaXRoZXIgZW50aXJlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgU0RJTy1zcGVjaWZpYyBkcml2ZXIgZmlsZSAoc2Rpby5jKSBvciBndWFyZGVkIGJ5IHRoZSBydHdfaXNfODcyM2JzKCkgaGVscGVyLCB3aGljaCBleHBsaWNpdGx5IGNoZWNrcyBmb3IgUlRXX0hDSV9UWVBFX1NESU8uIFNpbmNlIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyAobGlrZSBRRU1VIG9yIEdDRSkgZG8gbm90IHN1cHBvcnQgc29mdHdhcmUgZW11bGF0aW9uIG9mIGFyYml0cmFyeSBTRElPIGRldmljZXMgKHVubGlrZSBVU0IgdmlhIGR1bW15X2hjZC9yYXdfZ2FkZ2V0KSwgdGhlIFNESU8gZHJpdmVyIGNhbm5vdCBiZSBwcm9iZWQgYW5kIHRoZXNlIGNvZGUgcGF0aHMgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggZHVyaW5nIGZ1enppbmcuIFRoZSBtaW5vciBjaGFuZ2VzIHRvIHNoYXJlZCBSWC9UWCBwYXRocyBmb3Igb3RoZXIgY2hpcHMgYXJlIHB1cmVseSBub24tZnVuY3Rpb25hbCBjb25kaXRpb24gcmVvcmRlcmluZ3MuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIHN1cHBvcnQgYW5kIGZpeGVzIGZvciB0aGUgUmVhbHRlayBSVEw4NzIzQlMgV2ktRmkgY2hpcCwgd2hpY2ggb3BlcmF0ZXMgb3ZlciB0aGUgU0RJTyBidXMuIFRoZSBmdW5jdGlvbmFsIGNoYW5nZXMgYXJlIGVpdGhlciBlbnRpcmVseSBjb250YWluZWQgd2l0aGluIHRoZSBTRElPLXNwZWNpZmljIGRyaXZlciBmaWxlIChzZGlvLmMpIG9yIGd1YXJkZWQgYnkgdGhlIHJ0d19pc184NzIzYnMoKSBoZWxwZXIsIHdoaWNoIGV4cGxpY2l0bHkgY2hlY2tzIGZvciBSVFdfSENJX1RZUEVfU0RJTy4gU2luY2Ugc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIChsaWtlIFFFTVUgb3IgR0NFKSBkbyBub3Qgc3VwcG9ydCBzb2Z0d2FyZSBlbXVsYXRpb24gb2YgYXJiaXRyYXJ5IFNESU8gZGV2aWNlcyAodW5saWtlIFVTQiB2aWEgZHVtbXlfaGNkL3Jhd19nYWRnZXQpLCB0aGUgU0RJTyBkcml2ZXIgY2Fubm90IGJlIHByb2JlZCBhbmQgdGhlc2UgY29kZSBwYXRocyBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBkdXJpbmcgZnV6emluZy4gVGhlIG1pbm9yIGNoYW5nZXMgdG8gc2hhcmVkIFJYL1RYIHBhdGhzIGZvciBvdGhlciBjaGlwcyBhcmUgcHVyZWx5IG5vbi1mdW5jdGlvbmFsIGNvbmRpdGlvbiByZW9yZGVyaW5ncy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIwVDA5OjUyOjI3LjcyMzc1MTc1OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowlfv2j[1] Phase: Running StartedAt: 2026-08-20 09:52:38 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlfv2j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-20 09:52:38 +0000 UTC FinishedAt: 2026-08-20 09:52:43 +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,}