Name: series-workflowz4b8j Phase: Failed StartedAt: 2026-08-24 22:07:41 +0000 UTC FinishedAt: 2026-08-24 22:54:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4b8j[0] Phase: Succeeded StartedAt: 2026-08-24 22:07:41 +0000 UTC FinishedAt: 2026-08-24 22:54:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4b8j[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 22:07:41 +0000 UTC FinishedAt: 2026-08-24 22:54:36 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZibmljIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3NDE4YmE1ODc3Yzk0MzA5NGNmMDlkZjk0YzYxZjAwZjMyYzQ2MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAyMjo1Mzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yO1xuICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SU1x0XHQxMjh1XG4gI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UU1x0XHQ0XG4gXG4mIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4mIzQzO1x0czMyIHRlbXBfbWRlZztcbiYjNDM7XHRzMzIgdm9sdF9tdjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcbiBcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcbiBcdHN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjtcbiBcbkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7XG4gXG4gaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li42ZGNhMzgwNzZkN2I5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC01NzUsNiAmIzQzOzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xuIFx0RkJOSUNfVExWX0FUVFJfU1RSSU5HKEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUixcbiBcdFx0XHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxuIFx0RkJOSUNfVExWX0FUVFJfVTMyKEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSxcbiBcdEZCTklDX1RMVl9BVFRSX0xBU1RcbiB9O1xuIFxuQEAgLTcwMiw2ICYjNDM7NzA3LDIyIEBAIHN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXG4gXHRmYmQtXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcbiBcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgJiM0MzsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfTEFTVFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBvcGFxdWU7XG4mIzQzO1x0czMyIHZhbHVlO1xuJiM0MztcbiYjNDM7XHR0aGVybV9leGNlZWRlZCA9XG4mIzQzO1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4mIzQzO1x0dm9sdF9leGNlZWRlZCA9XG4mIzQzO1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0aGVybV9leGNlZWRlZCBcdTAwMjZcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7VGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0aGVybV9leGNlZWRlZCkge1xuJiM0MztcdFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpO1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXG5cJiMzNDssIHZhbHVlKTtcbiYjNDM7XHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodm9sdF9leGNlZWRlZCkge1xuJiM0MztcdFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbVZcXG5cJiMzNDssIHZhbHVlKTtcbiYjNDM7XHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuIFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXG5AQCAtMTY0Niw2ICYjNDM7MTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuJiM0MztcdEZCTklDX1RMVl9QQVJTRVIoU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQLFxuJiM0MztcdFx0XHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXG4mIzQzO1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gc3RydWN0IGZibmljX2RldjtcbkBAIC00NCw2ICYjNDM7NDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4mIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxuJiM0MzsgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcbiYjNDM7ICogcmVmcmVzaGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVx0XHRcdFMzMl9NSU5cbiYjNDM7XG4mIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xuJiM0MztcdHMzMiBtaW47XG4mIzQzO1x0czMyIG1heDtcbiYjNDM7XHRzMzIgY3JpdDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHR1OFx0bGlua19zcGVlZDtcbiBcdHU4XHRsaW5rX2ZlYztcbiBcdHUzMlx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdGVtcDtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgJiM0MzsyMjcsNyBAQCBlbnVtIHtcbiBcdEZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1BcdFx0XHQ9IDB4MzksXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXHRcdFx0PSAweDNDLFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcdFx0PSAweDNELFxuJiM0MztcdEZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX1NFTkRfTE9HU19SRVFcdFx0PSAweDQzLFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUVx0XHRcdD0gMHg0NCxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVNQXHRcdFx0PSAweDQ1LFxuQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4mIzQzO1x0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTlx0XHRcdD0gMHgxOCxcbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcdFx0XHQ9IDB4MWEsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5cdFx0XHQ9IDB4MWIsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUdcdD0gMHgxLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcdFx0XHQ9IDB4MixcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgJiM0MzsyLDE4NCBAQFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdtb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtmYm5pYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWNfbWFjLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbiYjNDM7XHRyZXR1cm4gMDQ0NDtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXHUwMDI2ZmJkLVx1MDAzZWh3bW9uX2NhY2hlO1xuJiM0MztcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHMzMiAqY2FjaGVkO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS1cdTAwM2VsYXN0X3JlYWQpKSB7XG4mIzQzO1x0XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuJiM0MztcdGlmICghZndfY21wbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCBlcnIpO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqL1xuJiM0MztcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4mIzQzO1x0Y2FjaGUtXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuJiM0MztcdGNhY2hlLVx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSAqY2FjaGVkO1xuJiM0MztleGl0X2NsZWFudXA6XG4mIzQzO1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbiYjNDM7ZXhpdF9mcmVlOlxuJiM0MztcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4tXHRcdFx0XHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuLVx0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuIFxuJiM0MztcdCp2YWwgPSB0aHI7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREFUQTtcbiYjNDM7XG4mIzQzO1x0KnZhbCA9IGEgXHUwMDNlPSBiO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4gXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0Y29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLVx1MDAzZW1hYztcbi1cdGludCBpZDtcbiBcbi1cdGlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpO1xuLVx0cmV0dXJuIGlkIFx1MDAzYyAwID8gaWQgOiBtYWMtXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW46XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7XG4tXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksXG4tXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyhpbixcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSxcbiBcdE5VTExcbiB9O1xuIFxuQEAgLTU3LDI1ICYjNDM7MjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZmJkLVx1MDAzZWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbiYjNDM7XHQvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi9cbiYjNDM7XHRmYmQtXHUwMDNlaHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbiYjNDM7XG4mIzQzO1x0aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwmIzM0O2ZibmljXCYjMzQ7LCBmYmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmZibmljX2NoaXBfaW5mbywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgIGZiZC1cdTAwM2Vod21vbik7XG4tXHRcdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0XHRcdCAgIGh3bW9uKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLVx1MDAzZWh3bW9uKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtXHUwMDNlaHdtb24pO1xuLVx0ZmJkLVx1MDAzZWh3bW9uID0gTlVMTDtcbiYjNDM7XHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbiYjNDM7XHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxuJiM0MztcdCAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0XG4mIzQzO1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGZiZC1cdTAwM2Vod21vbiwgTlVMTCk7XG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4mIzQzO1xuJiM0MztcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzMzIgYXR0ciA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl90ZW1wO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0dHlwZSA9IGh3bW9uX2luO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cbiYjNDM7XHQgKiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cdTAwM2Vod21vbik7XG4mIzQzO1x0aWYgKGF0dHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBod21vbilcbiYjNDM7XHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCAmIzQzOzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXG4gXHRcdFx0ICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCxcbi1cdFx0XHRcdCAgICAgbG9uZyAqdmFsKVxuLXtcbi1cdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuLVx0aW50IGVyciA9IDA7XG4tXHRzMzIgKnNlbnNvcjtcbi1cbi1cdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcbi1cdGlmICghZndfY21wbClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRzd2l0Y2ggKGlkKSB7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9URU1QOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXhpdF9mcmVlO1xuLVx0fVxuLVxuLVx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4tXHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXG5cJiMzNDspO1xuLVx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuLVx0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4tXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRfX2Z1bmNfXywgZXJyKTtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQqdmFsID0gKnNlbnNvcjtcbi1leGl0X2NsZWFudXA6XG4tXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xuLWV4aXRfZnJlZTpcbi1cdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XG4gXHQuaW5pdF9yZWdzID0gZmJuaWNfbWFjX2luaXRfcmVncyxcbiBcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcbkBAIC05NjYsNyAmIzQzOzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLFxuIFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcbiBcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcbi1cdC5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5pbmRleCAxMGYzMGUwZThmNjkxLi5iZGUyZGFhNjU2NDU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZmJuaWMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzc0MThiYTU4NzdjOTQzMDk0Y2YwOWRmOTRjNjFmMDBmMzJjNDYyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDIyOjUzOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmgKQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yOwogI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTCQkxMjh1CiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTCQk0CiAKJiM0MztzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgewomIzQzOwl1bnNpZ25lZCBsb25nIGxhc3RfcmVhZDsKJiM0MzsJczMyIHRlbXBfbWRlZzsKJiM0MzsJczMyIHZvbHRfbXY7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBmYm5pY19kZXYgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBkZW50cnkgKmRiZ19mYmQ7CiAJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CXN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTsKIAlzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyOwogCXN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqb3RwX3JlcG9ydGVyOwogCkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIAogdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTsKIAogaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwppbmRleCAyODNkMjVmYWU3OWU3Li42ZGNhMzgwNzZkN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCkBAIC01NzUsNiAmIzQzOzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0gewogCUZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsCiAJCQkgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLAogCUZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSwKIAlGQk5JQ19UTFZfQVRUUl9MQVNUCiB9OwogCkBAIC03MDIsNiAmIzQzOzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKQogCS8qIEFsd2F5cyBhc3N1bWUgd2UgbmVlZCBhIEJNQyByZWluaXQgKi8KIAlmYmQtJmd0O2Z3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7CiAKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4ID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxOCw2ICYjNDM7MTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHsKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksCiYjNDM7CUZCTklDX1RMVl9BVFRSX0xBU1QKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLAomIzQzOwkJCQkJCSAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKQomIzQzO3sKJiM0MzsJYm9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDsKJiM0MzsJc3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlOwomIzQzOwlzMzIgdmFsdWU7CiYjNDM7CiYjNDM7CXRoZXJtX2V4Y2VlZGVkID0KJiM0MzsJCWZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTsKJiM0MzsJdm9sdF9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTsKJiM0MzsKJiM0MzsJaWYgKCF0aGVybV9leGNlZWRlZCAmYW1wOyZhbXA7ICF2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRoZXJtX2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZvbHRfZXhjZWVkZWQpIHsKJiM0MzsJCWlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkgewomIzQzOwkJCWRldl9lcnIoZmJkLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQl2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXG4mIzM0OywgdmFsdWUpOwomIzQzOwkJZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0gewogCUZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSwKIAlGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCwKQEAgLTE2NDYsNiAmIzQzOzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0gewogCUZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLAogCQkJIGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCwKIAkJCSBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLAomIzQzOwlGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCwKJiM0MzsJCQkgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsCiYjNDM7CQkJIGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSwKIAlGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLAogCQkJIGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKaW5kZXggZDg0NzIzZTRjZmEzNi4uODczMDFlNjA4MjU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGZibmljX2RldjsKQEAgLTQ0LDYgJiM0Mzs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHsKIAljaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdOwogfTsKIAomIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZQomIzQzOyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldAomIzQzOyAqIHJlZnJlc2hlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBCQkJUzMyX01JTgomIzQzOwomIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQgewomIzQzOwlzMzIgbWluOwomIzQzOwlzMzIgbWF4OwomIzQzOwlzMzIgY3JpdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyOwpAQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJdTgJbGlua19zcGVlZDsKIAl1OAlsaW5rX2ZlYzsKIAl1MzIJYW50aV9yb2xsYmFja192ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7CiYjNDM7CXN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDsKIH07CiAKIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHsKQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7CiAJRkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUAkJCT0gMHgzOSwKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRCQkJPSAweDNDLAogCUZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQCQk9IDB4M0QsCiYjNDM7CUZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRCQk9IDB4NDMsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUQkJCT0gMHg0NCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUAkJCT0gMHg0NSwKQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0gewogCUZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTgkJCT0gMHgxMSwKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIJCT0gMHgxMiwKIAlGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04JCT0gMHgxNSwKJiM0MzsJLyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4JCQk9IDB4MTgsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYCQkJPSAweDE5LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQJCQk9IDB4MWEsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOCQkJPSAweDFiLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWAkJCT0gMHgxYywKIAlGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYCiB9OwogCkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHsKIAlGQk5JQ19GV19UU0VORV9NU0dfTUFYCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcJPSAweDAsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRwk9IDB4MSwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVEhFUk1BTAkJCT0gMHgyLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUQUdFCQkJPSAweDMsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUZCTklDX0ZXX09XTkVSU0hJUF9GTEFHCQkJPSAweDAsCiAJRkJOSUNfRldfT1dORVJTSElQX1RJTUUJCQk9IDB4MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwppbmRleCBkZWY4NTk4YWNlZWNmLi4zZjMzNTIyZmNmZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jCkBAIC0yLDQxICYjNDM7MiwxODQgQEAKIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9od21vbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7ZmJuaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ZibmljX21hYy5oJiMzNDsKIAotc3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfaWQoZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSkKJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsCiYjNDM7CQkJCSAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCiYjNDM7CQkJCSAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkKIHsKLQlpZiAodHlwZSA9PSBod21vbl90ZW1wKQotCQlyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7Ci0JaWYgKHR5cGUgPT0gaHdtb25faW4pCi0JCXJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTsKJiM0MzsJcmV0dXJuIDA0NDQ7CiYjNDM7fQogCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmYm5pY19od21vbl9jYWNoZSAqY2FjaGUgPSAmYW1wO2ZiZC0mZ3Q7aHdtb25fY2FjaGU7CiYjNDM7CXN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJczMyICpjYWNoZWQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaWQpIHsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVEVNUDoKJiM0MzsJCWNhY2hlZCA9ICZhbXA7Y2FjaGUtJmd0O3RlbXBfbWRlZzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgomIzQzOwkJY2FjaGVkID0gJmFtcDtjYWNoZS0mZ3Q7dm9sdF9tdjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgJmFtcDsmYW1wOwomIzQzOwkgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLSZndDtsYXN0X3JlYWQpKSB7CiYjNDM7CQkqdmFsID0gKmNhY2hlZDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTsKJiM0MzsJaWYgKCFmd19jbXBsKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXG4mIzM0OywKJiM0MzsJCQllcnIpOwomIzQzOwkJZ290byBleGl0X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxuJiMzNDspOwomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCWdvdG8gZXhpdF9jbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwomIzQzOwlpZiAoZndfY21wbC0mZ3Q7cmVzdWx0KSB7CiYjNDM7CQllcnIgPSBmd19jbXBsLSZndDtyZXN1bHQ7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIGVycik7CiYjNDM7CQlnb3RvIGV4aXRfY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqLwomIzQzOwljYWNoZS0mZ3Q7dGVtcF9tZGVnID0gZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaWRlZ3JlZXM7CiYjNDM7CWNhY2hlLSZndDt2b2x0X212ID0gZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaXZvbHRzOwomIzQzOwljYWNoZS0mZ3Q7bGFzdF9yZWFkID0gamlmZmllczsKJiM0MzsKJiM0MzsJKnZhbCA9ICpjYWNoZWQ7CiYjNDM7ZXhpdF9jbGVhbnVwOgomIzQzOwlmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpOwomIzQzO2V4aXRfZnJlZToKJiM0MzsJZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSwKLQkJCQkgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAotCQkJCSAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpCiB7Ci0JaWYgKHR5cGUgPT0gaHdtb25fdGVtcCAmYW1wOyZhbXA7IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dCkKLQkJcmV0dXJuIDA0NDQ7Ci0JaWYgKHR5cGUgPT0gaHdtb25faW4gJmFtcDsmYW1wOyBhdHRyID09IGh3bW9uX2luX2lucHV0KQotCQlyZXR1cm4gMDQ0NDsKJiM0MzsJaWYgKHRociA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKIAomIzQzOwkqdmFsID0gdGhyOwogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpZiAoYSA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSB8fCBiID09IEZCTklDX1NFTlNPUl9OT19EQVRBKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwomIzQzOwkqdmFsID0gYSAmZ3Q7PSBiOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5taW4sIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXg6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2lucHV0OgomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybToKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2lucHV0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCwgdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl9pbl9taW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudm9sdC5taW4sIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX2lucHV0OgomIzQzOwljYXNlIGh3bW9uX2luX21pbl9hbGFybToKJiM0MzsJY2FzZSBod21vbl9pbl9tYXhfYWxhcm06CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25faW5faW5wdXQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBod21vbl9pbl9taW5fYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiwgKnZhbCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9tYXhfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCwgdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKIAkJCSAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbCkKIHsKIAlzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtJmd0O21hYzsKLQlpbnQgaWQ7CiAKLQlpZCA9IGZibmljX2h3bW9uX3NlbnNvcl9pZCh0eXBlKTsKLQlyZXR1cm4gaWQgJmx0OyAwID8gaWQgOiBtYWMtJmd0O2dldF9zZW5zb3IoZmJkLCBpZCwgdmFsKTsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHsKQEAgLTQ1LDggJiM0MzsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHsKLQlIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksCi0JSFdNT05fQ0hBTk5FTF9JTkZPKGluLCBIV01PTl9JX0lOUFVUKSwKJiM0MzsJSFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsCiYjNDM7CQkJICAgSFdNT05fVF9JTlBVVCB8CiYjNDM7CQkJICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fVF9NQVggfCBIV01PTl9UX01BWF9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSwKJiM0MzsJSFdNT05fQ0hBTk5FTF9JTkZPKGluLAomIzQzOwkJCSAgIEhXTU9OX0lfSU5QVVQgfAomIzQzOwkJCSAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLAogCU5VTEwKIH07CiAKQEAgLTU3LDI1ICYjNDM7MjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHsKIAogdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwogCWlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikpCiAJCXJldHVybjsKIAotCWZiZC0mZ3Q7aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC0mZ3Q7ZGV2LCAmIzM0O2ZibmljJiMzNDssCi0JCQkJCQkgICAgIGZiZCwgJmFtcDtmYm5pY19jaGlwX2luZm8sCi0JCQkJCQkgICAgIE5VTEwpOwotCWlmIChJU19FUlIoZmJkLSZndDtod21vbikpIHsKJiM0MzsJLyogU2VlZCBjYWNoZSB3aXRoIHNlbnRpbmVsIHNvIHRoZSBmaXJzdCByZWFkIGFsd2F5cyByZWZyZXNoZXMuICovCiYjNDM7CWZiZC0mZ3Q7aHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7CiYjNDM7CWZiZC0mZ3Q7aHdtb25fY2FjaGUudm9sdF9tdiA9IEZCTklDX1NFTlNPUl9OT19EQVRBOwomIzQzOwomIzQzOwlod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLSZndDtkZXYsICYjMzQ7ZmJuaWMmIzM0OywgZmJkLAomIzQzOwkJCQkJCSZhbXA7ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihod21vbikpIHsKIAkJZGV2X25vdGljZShmYmQtJmd0O2RldiwKIAkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcbiYjMzQ7LAotCQkJICAgZmJkLSZndDtod21vbik7Ci0JCWZiZC0mZ3Q7aHdtb24gPSBOVUxMOwomIzQzOwkJCSAgIGh3bW9uKTsKJiM0MzsJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZmJkLSZndDtod21vbiwgaHdtb24pOwogfQogCiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsKIAlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pIHx8ICFmYmQtJmd0O2h3bW9uKQogCQlyZXR1cm47CiAKLQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtJmd0O2h3bW9uKTsKLQlmYmQtJmd0O2h3bW9uID0gTlVMTDsKJiM0MzsJaHdtb24gPSBmYmQtJmd0O2h3bW9uOwomIzQzOwkvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTAomIzQzOwkgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdAomIzQzOwkgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRShmYmQtJmd0O2h3bW9uLCBOVUxMKTsKJiM0MzsJc3luY2hyb25pemVfaXJxKGZiZC0mZ3Q7ZndfbXNpeF92ZWN0b3IpOwomIzQzOwomIzQzOwlod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CWVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGU7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwlzMzIgYXR0ciA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKGlkKSB7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6CiYjNDM7CQl0eXBlID0gaHdtb25fdGVtcDsKJiM0MzsKJiM0MzsJCWlmICh2YWwgJmx0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5taW4pCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCkKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4KQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgomIzQzOwkJdHlwZSA9IGh3bW9uX2luOwomIzQzOwomIzQzOwkJaWYgKHZhbCAmbHQ7PSBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbikKJiM0MzsJCQlhdHRyID0gaHdtb25faW5fbWluX2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4KQomIzQzOwkJCWF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGUKJiM0MzsJICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm4KJiM0MzsJICogZG93bi4KJiM0MzsJICovCiYjNDM7CWh3bW9uID0gUkVBRF9PTkNFKGZiZC0mZ3Q7aHdtb24pOwomIzQzOwlpZiAoYXR0ciAmZ3Q7PSAwICZhbXA7JmFtcDsgaHdtb24pCiYjNDM7CQlod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jCkBAIC04OTksNjAgJiM0Mzs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LAogCQkJICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7CiB9CiAKLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwKLQkJCQkgICAgIGxvbmcgKnZhbCkKLXsKLQlzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDsKLQlpbnQgZXJyID0gMDsKLQlzMzIgKnNlbnNvcjsKLQotCWZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTsKLQlpZiAoIWZ3X2NtcGwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6Ci0JCXNlbnNvciA9ICZhbXA7ZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaWRlZ3JlZXM7Ci0JCWJyZWFrOwotCWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6Ci0JCXNlbnNvciA9ICZhbXA7ZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaXZvbHRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQllcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAotCQkJJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxuJiMzNDssCi0JCQllcnIpOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2Z3X2NtcGwtJmd0O2RvbmUsIDEwICogSFopKSB7Ci0JCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcbiYjMzQ7KTsKLQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JLyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovCi0JaWYgKGZ3X2NtcGwtJmd0O3Jlc3VsdCkgewotCQllcnIgPSBmd19jbXBsLSZndDtyZXN1bHQ7Ci0JCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXG4mIzM0OywKLQkJCV9fZnVuY19fLCBlcnIpOwotCQlnb3RvIGV4aXRfY2xlYW51cDsKLQl9Ci0KLQkqdmFsID0gKnNlbnNvcjsKLWV4aXRfY2xlYW51cDoKLQlmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpOwotZXhpdF9mcmVlOgotCWZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsCiAJLmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLApAQCAtOTY2LDcgJiM0Mzs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHsKIAkuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsCiAJLmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYywKIAkubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsCi0JLmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaAppbmRleCAxMGYzMGUwZThmNjkxLi5iZGUyZGFhNjU2NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7CiAKIAl2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOwotCi0JaW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7CiB9OwogCiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZmJuaWMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyIOKAkyBNZXRhJiMzOTtzIE5JQyBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGhhcmR3YXJlIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzOiB0ZW1wZXJhdHVyZSwgdm9sdGFnZSwgcmVhZGluZyB0aHJlc2hvbGRzIGZyb20gZmlybXdhcmUsIGFuZCBoYW5kbGluZyB0aG9zZSB0aHJlc2hvbGQtZXhjZWVkZWQgZXZlbnRzLiBBIGdvb2Qgc3RlcCwgZ2VuZXJhbGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/JiMzNDsuIE5JQyBkcml2ZXJzLCBlc3BlY2lhbGx5IHNwZWNpYWxpemVkIG9uZXMgbGlrZSB0aGlzLCBvZnRlbiBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBgZmJuaWNgIGlzIHByb2JhYmx5IHRoZSBzYW1lIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBzb21lIG90aGVyIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIFN0YW5kYXJkIFFFTVUgZW11bGF0aW9uIG9mIHZlbmRvci1zcGVjaWZpYyBOSUNzPyBOb3QgbGlrZWx5LCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UuIEl0JiMzOTtzIHVzdWFsbHkgYSBuby1nbyBmb3IgdGhlc2UgdHlwZXMgb2YgbmV0d29yayBkZXZpY2VzLgoKV2FpdCBhIHNlY29uZCwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpY2FsbHk6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZi4uLiYjMzQ7IGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzICYjMzQ7Li4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcy4gVGhhdCB3aWxsIGNvbmZpcm0gd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBpcyBhbmQgaWYgaXQgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBJZiBpdCBpcyBhIFNtYXJ0TklDLCBvciBzaW1pbGFyIHR5cGUgb2YgdmVuZG9yLXNwZWNpZmljIGRldmljZSwgdGhlbiBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG91dHNpZGUgdGhlIHJlYWxtIG9mIHdoYXQgd2UgY2FuIGVhc2lseSBlbXVsYXRlLCBhbmQgdGhhdCAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGZsYWcgd291bGQgYmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgbG9va2luZyBsaWtlIGl0IG1pZ2h0IGJlIGEgcXVpY2sgJiMzNDtubyYjMzQ7IGJhc2VkIG9uIHRoYXQgaW5zdHJ1Y3Rpb24gYW5kIG15IGV4cGVyaWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgc29tZXRoaW5nIG91dCByZWxhdGVkIHRvIG5ldHdvcmtpbmcgZHJpdmVycywgc3BlY2lmaWNhbGx5IEV0aGVybmV0LiBJIGtub3cgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5ldHdvcmtpbmcgc3VidHJlZS4gJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldCYjMzQ7IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgRXRoZXJuZXQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIEFuZCB3aXRoaW4gdGhhdCwgJiMzNDttZXRhJiMzNDsgb2Z0ZW4gY29udGFpbnMgZ2VuZXJpYyBvciBoaWdoLWxldmVsIGRlZmluaXRpb25zLCBvciBldmVuIGp1c3QgaGVscGVyIGRlZmluaXRpb25zIGZvciB0aGUgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnYC4gSG9wZWZ1bGx5LCB0aGUgbWV0YSBLY29uZmlnIHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWQgc3Ryb2tlcywgb3IgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB0aGUgKmFjdHVhbCogb3B0aW9ucyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJuaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0zNS1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjM2Olx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgdGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgaGlnaGVyLWxldmVsIEV0aGVybmV0IHNldHRpbmdzLCB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IG9yY2hlc3RyYXRlIG9yIGFmZmVjdCBzZXZlcmFsIGxvd2VyLWxldmVsIGRyaXZlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgb3B0aW9ucyBkZWZpbmluZyB0aGUgb3ZlcmFsbCBFdGhlcm5ldCBzdWJzeXN0ZW0gZmVhdHVyZXMsIG1heWJlIHNvbWUgZ2xvYmFsIHBhcmFtZXRlcnMgdGhhdCBhcHBseSBhY3Jvc3MgZGlmZmVyZW50IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIG9yIHBlcmhhcHMgc2VsZWN0aW9uIHN0YXRlbWVudHMgdG8gdHVybiBvbiBvciBvZmYgbWFqb3IgZHJpdmVyIGdyb3Vwcy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGlzIGZpbGUganVzdCBpbXBvcnRzIG90aGVyIEtjb25maWcgZmlsZXMgdGhhdCBhcmUgbW9yZSBzcGVjaWZpYyB0byBjZXJ0YWluIGRyaXZlciBmYW1pbGllcy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBsb2dpY2FsIHN0cnVjdHVyZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdW5kZXJzdGFuZCBob3cgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEV0aGVybmV0IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNZXRhIFBsYXRmb3JtcyBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX01FVEFcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXG4gIDExOlx0XHQgIFRoYXQmIzM5O3MgTWV0YSBhcyBpbiB0aGUgcGFyZW50IGNvbXBhbnkgb2YgRmFjZWJvb2suXG4gIDEyOlx0XG4gIDEzOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNDpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTY6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNzpcdFxuICAxODpcdGlmIE5FVF9WRU5ET1JfTUVUQVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBGQk5JQ1xuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCBDT01QSUxFX1RFU1RcbiAgMjM6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgMjQ6XHRcdGRlcGVuZHMgb24gTUFYX1NLQl9GUkFHUyBcdTAwM2MgMjJcbiAgMjU6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDI4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDI5Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgMzA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDMxOlx0XHRzZWxlY3QgUExETUZXXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UuXG4gIDM0Olx0XG4gIDM1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMzY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZmJuaWMuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZC5cbiAgMzc6XHRcbiAgMzg6XHRlbmRpZiAjIE5FVF9WRU5ET1JfTUVUQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZmJuaWNgIGFuZCBRRU1VIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gYGZibmljYCwgdGhhdCYjMzk7cyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSDigJMgdGhlaXIgY3VzdG9tIFNtYXJ0TklDLCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSwgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uLCBlbXVsYXRlIGl0PyBBbmQgdGhlIGFuc3dlciBpcyBhIGZpcm0gbm8uIFRoaXMgbWVhbnMgdGhhdCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGlzIGRyaXZlciwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBhY3R1YWwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkczsgc3RhbmRhcmQgUUVNVSB3b24mIzM5O3QgY3V0IGl0LiBUaGlzIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLgoKR2l2ZW4gdGhhdCBkZXBlbmRlbmN5IG9uIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGUgaW5hYmlsaXR5IHRvIHRlc3QgaXQgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudCwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCYjMzk7cyBqdXN0IG5vdCBwcmFjdGljYWwgb3IgZWZmaWNpZW50IHRvIHRyeSBmdXp6aW5nIHRoaXMgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBjYXJkcy4KCkJlZm9yZSBJIGxvY2sgdGhhdCBpbiwgdGhvdWdoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSYjMzk7bGwgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYW55IG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZmJuaWNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQmIzM5O3MgcmFyZSwgYnV0IHNvbWV0aW1lcyB0aGVyZSBhcmUgaGlkZGVuIGdlbXMuIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCAqc29tZSogZW11bGF0aW9uLCBldmVuIGlmIGxpbWl0ZWQsIGV4aXN0cy4gQnV0IEkgYW0gYWxtb3N0IGNlcnRhaW4gaXQgaXMgbm90IGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz0yMTQ9c3RhdGljIHZvaWQgZmJuaWNfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI0OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MjQ5OiAqIGZibmljX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjUwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjU4LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MjU5OnN0YXRpYyBpbnQgZmJuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz02MjY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZibmljX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTYyOC1cdC5pZF90YWJsZVx0PSBmYm5pY19wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzo2Mjk6XHQucHJvYmVcdFx0PSBmYm5pY19wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjMwLVx0LnJlbW92ZVx0XHQ9IGZibmljX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzAKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIFBDSSBkcml2ZXIgc2V0dXAuIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nIHRoZXJlLiBUaGUgYGZibmljX3BjaV90YmxgIHRhYmxlIGlkZW50aWZpZXMgdGhlIGRldmljZSBieSBpdHMgdmVuZG9yIGFuZCBkZXZpY2UgSUQg4oCTIGEgYE1FVEFgIHZlbmRvciBJRCBhbmQgYSBzcGVjaWZpYyBgUENJX0RFVklDRV9JRF9NRVRBX0ZCTklDYCBkZXZpY2UgSUQuCgpUaGUgaW1tZWRpYXRlIHRha2Vhd2F5IGhlcmUsIGhvd2V2ZXIsIGlzIHRoYXQgdGhpcyBkZXZpY2UgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBuZWVkcyBhY3R1YWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGluc3RhbnRseSBydWxlcyBvdXQgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIHVzaW5nIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBpbiBhIHZpcnR1YWwgbWFjaGluZS4KClRoZXJlZm9yZSwgZm9yIG15IGFzc2Vzc21lbnQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHNpbXBsZTogdGhpcyBkcml2ZXIgY29udHJvbHMgYSBQQ0llIE5JQyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnRlcmFjdGlvbi4gQW55IGZ1enppbmcgYXR0ZW1wdHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGFyZSBnb2luZyB0byBiZSBhIHdhc3RlIG9mIHRpbWUsIGFzIHRoZSBkZXZpY2Ugd29uJiMzOTt0IGJlIGFjY2Vzc2libGUsIGFuZCB0aGUgZnV6emVyIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBhICYjMzQ7cmVxdWlyZSBoYXJkd2FyZSYjMzQ7IHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1Mzo1OC4yMzA5ODE5ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYxMzI0NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjUzOjU4LjIzMDk4NzU2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzUxNjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3NDE4YmE1ODc3Yzk0MzA5NGNmMDlkZjk0YzYxZjAwZjMyYzQ2MmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjI6NTM6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXFxuaW5kZXggZDA3MTU2OTVjNDNlNy4uNGE0OWMyMGU0YTAxNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xcbiBcXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxcbiBcXHRcXHRcXHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxcbiBcXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXFxuIFxcdEZCTklDX1RMVl9BVFRSX0xBU1RcXG4gfTtcXG4gXFxuQEAgLTcwMiw2ICs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcXG4gXFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xcbiBcXHRmYmQtXFx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XFxuIFxcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTYxOCw2ICsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbit7XFxuK1xcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XFxuK1xcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcXG4rXFx0czMyIHZhbHVlO1xcbitcXG4rXFx0dGhlcm1fZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XFxuK1xcdHZvbHRfZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcXG4rXFxuK1xcdGlmICghdGhlcm1fZXhjZWVkZWQgXFx1MDAyNlxcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XFxuK1xcdFxcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXFxcblxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXFxuIFxcdFxcdFxcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXFxuIFxcdFxcdFxcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxcbitcXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcXG4rXFx0XFx0XFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxcbitcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xcbkBAIC00NCw2ICs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHtcXG4gXFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcXG4gfTtcXG4gXFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxcbisgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcXG4rICogcmVmcmVzaGVkLlxcbisgKi9cXG4rI2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVxcdFxcdFxcdFMzMl9NSU5cXG4rXFxuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xcbitcXHRzMzIgbWluO1xcbitcXHRzMzIgbWF4O1xcbitcXHRzMzIgY3JpdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XFxuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XFxuIFxcdHU4XFx0bGlua19zcGVlZDtcXG4gXFx0dThcXHRsaW5rX2ZlYztcXG4gXFx0dTMyXFx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XFxuK1xcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHtcXG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXFx0XFx0XFx0PSAweDM5LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXFx0XFx0XFx0PSAweDNDLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFxcdFxcdD0gMHgzRCxcXG4rXFx0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXFx0XFx0PSAweDQzLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXFx0XFx0XFx0PSAweDQ0LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFxcdFxcdFxcdD0gMHg0NSxcXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXFx0XFx0XFx0PSAweDExLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFJcXHRcXHQ9IDB4MTIsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlxcdFxcdD0gMHgxNSxcXG4rXFx0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cXHRcXHRcXHQ9IDB4MTgsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXFx0XFx0XFx0PSAweDE5LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcXHRcXHRcXHQ9IDB4MWEsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXFx0XFx0XFx0PSAweDFiLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWFxcdFxcdFxcdD0gMHgxYyxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxcbiB9O1xcbiBcXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUdcXHQ9IDB4MCxcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXFx0PSAweDEsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcXHRcXHRcXHQ9IDB4MixcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVxcdFxcdFxcdD0gMHgzLFxcbitcXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9GTEFHXFx0XFx0XFx0PSAweDAsXFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXFx0XFx0XFx0PSAweDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcXG4tXFx0XFx0cmV0dXJuIDA0NDQ7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbitcXHQqdmFsID0gdGhyO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuK3tcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xcbkBAIC04OTksNjAgKzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXFxuIFxcdFxcdFxcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbG9uZyAqdmFsKVxcbi17XFxuLVxcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4tXFx0czMyICpzZW5zb3I7XFxuLVxcbi1cXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuLVxcdGlmICghZndfY21wbClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzd2l0Y2ggKGlkKSB7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZmd19jbXBsLVxcdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXFxuLVxcdGlmIChmd19jbXBsLVxcdTAwM2VyZXN1bHQpIHtcXG4tXFx0XFx0ZXJyID0gZndfY21wbC1cXHUwMDNlcmVzdWx0O1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRfX2Z1bmNfXywgZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2NsZWFudXA7XFxuLVxcdH1cXG4tXFxuLVxcdCp2YWwgPSAqc2Vuc29yO1xcbi1leGl0X2NsZWFudXA6XFxuLVxcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XFxuLWV4aXRfZnJlZTpcXG4tXFx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcXG4gXFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXFxuIFxcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXFxuIFxcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXFxuIFxcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcXG4tXFx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XFxuIFxcbiBcXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXHR2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4tXFxuLVxcdGludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpO1xcbiB9O1xcbiBcXG4gaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjUzOjU5LjY1OTIxOTczN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MTg0OTc0NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZmJuaWMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzQxOGJhNTg3N2M5NDMwOTRjZjA5ZGY5NGM2MWYwMGYzMmM0NjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjI6NTM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkY2EzODA3NmQ3YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4rXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4rfTtcbitcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbit7XG4rXHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuK1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuK1x0czMyIHZhbHVlO1xuK1xuK1x0dGhlcm1fZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4rXHR2b2x0X2V4Y2VlZGVkID1cbitcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4rXG4rXHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XCJUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICh0aGVybV9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRpZiAodm9sdF9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiArMTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuK1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4rXHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuK1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4rLyogU2VudGluZWwgZm9yIGEgc2Vuc29yIHZhbHVlIHRoZSBkcml2ZXIgZG9lcyBub3QgaGF2ZTogYSB0aHJlc2hvbGQgdGhlXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4rICogcmVmcmVzaGVkLlxuKyAqL1xuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4rXG4rc3RydWN0IGZibmljX3RocmVzaG9sZCB7XG4rXHRzMzIgbWluO1xuK1x0czMyIG1heDtcbitcdHMzMiBjcml0O1xuK307XG4rXG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiArNzMsOCBAQCBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcbiBcdHU4XHRsaW5rX3NwZWVkO1xuIFx0dThcdGxpbmtfZmVjO1xuIFx0dTMyXHRhbnRpX3JvbGxiYWNrX3ZlcnNpb247XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xuIFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFx0XHRcdD0gMHgzOSxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVFcdFx0XHQ9IDB4M0MsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFx0XHQ9IDB4M0QsXG4rXHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiArMjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4rXHQvKiAweDE2IGFuZCAweDE3IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVFx0XHRcdD0gMHgxYSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiArMjk3LDE0IEBAIGVudW0ge1xuIFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxuIH07XG4gXG4rZW51bSB7XG4rXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbitcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1x0PSAweDEsXG4rXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4rXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxuK307XG4rXG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4rXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4rXHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuK3tcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCIsXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwiKTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIiVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwiLFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjI6NTM6NTkuNjU5MjIwOTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjU1OTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmYm5pYyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyIOKAkyBNZXRhJ3MgTklDIGRyaXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZGluZyBoYXJkd2FyZSBtb25pdG9yaW5nIGNhcGFiaWxpdGllczogdGVtcGVyYXR1cmUsIHZvbHRhZ2UsIHJlYWRpbmcgdGhyZXNob2xkcyBmcm9tIGZpcm13YXJlLCBhbmQgaGFuZGxpbmcgdGhvc2UgdGhyZXNob2xkLWV4Y2VlZGVkIGV2ZW50cy4gQSBnb29kIHN0ZXAsIGdlbmVyYWxseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XCIuIE5JQyBkcml2ZXJzLCBlc3BlY2lhbGx5IHNwZWNpYWxpemVkIG9uZXMgbGlrZSB0aGlzLCBvZnRlbiBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBgZmJuaWNgIGlzIHByb2JhYmx5IHRoZSBzYW1lIHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIG9yIHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gU3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gb2YgdmVuZG9yLXNwZWNpZmljIE5JQ3M/IE5vdCBsaWtlbHksIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZS4gSXQncyB1c3VhbGx5IGEgbm8tZ28gZm9yIHRoZXNlIHR5cGVzIG9mIG5ldHdvcmsgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZCwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpY2FsbHk6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZi4uLlwiIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIFwiLi4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBUaGF0J3MgdGhlIGtleS5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgd2lsbCBjb25maXJtIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgaXMgYW5kIGlmIGl0IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSWYgaXQgaXMgYSBTbWFydE5JQywgb3Igc2ltaWxhciB0eXBlIG9mIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UsIHRoZW4gaXQncyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG91dHNpZGUgdGhlIHJlYWxtIG9mIHdoYXQgd2UgY2FuIGVhc2lseSBlbXVsYXRlLCBhbmQgdGhhdCBcIldvcnRoRnV6emluZz1mYWxzZVwiIGZsYWcgd291bGQgYmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgbG9va2luZyBsaWtlIGl0IG1pZ2h0IGJlIGEgcXVpY2sgXCJub1wiIGJhc2VkIG9uIHRoYXQgaW5zdHJ1Y3Rpb24gYW5kIG15IGV4cGVyaWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjI6NTQ6MDUuNjQxNzgyNjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTYwMzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA1LjY4NDc0ODU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzQxNDg4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIHNvbWV0aGluZyBvdXQgcmVsYXRlZCB0byBuZXR3b3JraW5nIGRyaXZlcnMsIHNwZWNpZmljYWxseSBFdGhlcm5ldC4gSSBrbm93IHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbmV0d29ya2luZyBzdWJ0cmVlLiBcImRyaXZlcnMvbmV0L2V0aGVybmV0XCIgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBFdGhlcm5ldC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gQW5kIHdpdGhpbiB0aGF0LCBcIm1ldGFcIiBvZnRlbiBjb250YWlucyBnZW5lcmljIG9yIGhpZ2gtbGV2ZWwgZGVmaW5pdGlvbnMsIG9yIGV2ZW4ganVzdCBoZWxwZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEknbGwgY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhlIG1ldGEgS2NvbmZpZyB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIHN0cm9rZXMsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gdG8gdGhlICphY3R1YWwqIG9wdGlvbnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA5LjYxODkwMDI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMzUtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjM2OlxcdCAgd2lsbCBiZSBjYWxsZWQgZmJuaWMuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA5LjY2Mjg3OTc2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjYyNDY2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgaGlnaGVyLWxldmVsIEV0aGVybmV0IHNldHRpbmdzLCB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IG9yY2hlc3RyYXRlIG9yIGFmZmVjdCBzZXZlcmFsIGxvd2VyLWxldmVsIGRyaXZlcnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIGRlZmluaW5nIHRoZSBvdmVyYWxsIEV0aGVybmV0IHN1YnN5c3RlbSBmZWF0dXJlcywgbWF5YmUgc29tZSBnbG9iYWwgcGFyYW1ldGVycyB0aGF0IGFwcGx5IGFjcm9zcyBkaWZmZXJlbnQgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgb3IgcGVyaGFwcyBzZWxlY3Rpb24gc3RhdGVtZW50cyB0byB0dXJuIG9uIG9yIG9mZiBtYWpvciBkcml2ZXIgZ3JvdXBzLiBJdCdzIGFsc28gcG9zc2libGUgdGhpcyBmaWxlIGp1c3QgaW1wb3J0cyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIG1vcmUgc3BlY2lmaWMgdG8gY2VydGFpbiBkcml2ZXIgZmFtaWxpZXMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIHRvIHVuZGVyc3RhbmQgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEV0aGVybmV0IGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1NDoxMy41ODkxMjgzODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWV0YSBQbGF0Zm9ybXMgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9NRVRBXFxuICAgNzpcXHRcXHRib29sIFxcXCJNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXFxuICAxMTpcXHRcXHQgIFRoYXQncyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX01FVEFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEZCTklDXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgQ09NUElMRV9URVNUXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE1BWF9TS0JfRlJBR1MgXFx1MDAzYyAyMlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDI4OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDI5OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgMzA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDMxOlxcdFxcdHNlbGVjdCBQTERNRldcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGZibmljLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjEzLjU4OTE4NzM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzY4NjcwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZmJuaWNgIGFuZCBRRU1VIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBgZmJuaWNgLCB0aGF0J3MgdGhlIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2Ug4oCTIHRoZWlyIGN1c3RvbSBTbWFydE5JQywgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUsIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiwgZW11bGF0ZSBpdD8gQW5kIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIG5vLiBUaGlzIG1lYW5zIHRoYXQgaWYgSSdtIHdvcmtpbmcgd2l0aCB0aGlzIGRyaXZlciwgSSdtIGdvaW5nIHRvIG5lZWQgdGhlIGFjdHVhbCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzOyBzdGFuZGFyZCBRRU1VIHdvbid0IGN1dCBpdC4gVGhpcyBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay5cblxuR2l2ZW4gdGhhdCBkZXBlbmRlbmN5IG9uIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGUgaW5hYmlsaXR5IHRvIHRlc3QgaXQgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudCwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCdzIGp1c3Qgbm90IHByYWN0aWNhbCBvciBlZmZpY2llbnQgdG8gdHJ5IGZ1enppbmcgdGhpcyB3aXRob3V0IGFjY2VzcyB0byB0aGUgYWN0dWFsIGNhcmRzLlxuXG5CZWZvcmUgSSBsb2NrIHRoYXQgaW4sIHRob3VnaCwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEknbGwgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYW55IG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZmJuaWNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQncyByYXJlLCBidXQgc29tZXRpbWVzIHRoZXJlIGFyZSBoaWRkZW4gZ2Vtcy4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0ICpzb21lKiBlbXVsYXRpb24sIGV2ZW4gaWYgbGltaXRlZCwgZXhpc3RzLiBCdXQgSSBhbSBhbG1vc3QgY2VydGFpbiBpdCBpcyBub3QgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjE5LjAyNjA1NjIyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTc5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjE0PXN0YXRpYyB2b2lkIGZibmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI0OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjI0OTogKiBmYm5pY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI1OC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzoyNTk6c3RhdGljIGludCBmYm5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTYyNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmJuaWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjgtXFx0LmlkX3RhYmxlXFx0PSBmYm5pY19wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6NjI5OlxcdC5wcm9iZVxcdFxcdD0gZmJuaWNfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MzAtXFx0LnJlbW92ZVxcdFxcdD0gZmJuaWNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1NDoxOS41MTAwMzkyNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzNDExODk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIGNvZGUsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGEgc3RhbmRhcmQgUENJIGRyaXZlciBzZXR1cC4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIFRoZSBgZmJuaWNfcGNpX3RibGAgdGFibGUgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGJ5IGl0cyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgYSBgTUVUQWAgdmVuZG9yIElEIGFuZCBhIHNwZWNpZmljIGBQQ0lfREVWSUNFX0lEX01FVEFfRkJOSUNgIGRldmljZSBJRC5cblxuVGhlIGltbWVkaWF0ZSB0YWtlYXdheSBoZXJlLCBob3dldmVyLCBpcyB0aGF0IHRoaXMgZGV2aWNlIGlzbid0IHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSBpdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbmVlZHMgYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpbnN0YW50bHkgcnVsZXMgb3V0IHN0YW5kYXJkIGZ1enppbmcgdGVjaG5pcXVlcyB1c2luZyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgaW4gYSB2aXJ0dWFsIG1hY2hpbmUuXG5cblRoZXJlZm9yZSwgZm9yIG15IGFzc2Vzc21lbnQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc2ltcGxlOiB0aGlzIGRyaXZlciBjb250cm9scyBhIFBDSWUgTklDIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGludGVyYWN0aW9uLiBBbnkgZnV6emluZyBhdHRlbXB0cyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgYXJlIGdvaW5nIHRvIGJlIGEgd2FzdGUgb2YgdGltZSwgYXMgdGhlIGRldmljZSB3b24ndCBiZSBhY2Nlc3NpYmxlLCBhbmQgdGhlIGZ1enplciB3b3VsZG4ndCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGEgXCJyZXF1aXJlIGhhcmR3YXJlXCIgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjI1Ljg0NDE2MDUwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjI1Ljg0NDE5Njk4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz4b8j[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 22:07:41 +0000 UTC FinishedAt: 2026-08-24 22:54:26 +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+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZibmljIGRyaXZlciwgd2hpY2ggaXMgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBuZXR3b3JrIGludGVyZmFjZSBjYXJkIChNZXRhIFBsYXRmb3JtcyBIb3N0IE5ldHdvcmsgSW50ZXJmYWNlKS4gVGhpcyBoYXJkd2FyZSBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSBvciB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIG1ha2luZyB0aGUgY29kZSB1bnJlYWNoYWJsZSBmb3IgZnV6emluZyB3aXRob3V0IHBoeXNpY2FsIGhhcmR3YXJlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMjo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDM3NDE4YmE1ODc3Yzk0MzA5NGNmMDlkZjk0YzYxZjAwZjMyYzQ2MmRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAyMjo1Mzo1NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yO1xuICNkZWZpbmUgRkJOSUNfTUFYX05BUElfVkVDVE9SU1x0XHQxMjh1XG4gI2RlZmluZSBGQk5JQ19NQlhfQ01QTF9TTE9UU1x0XHQ0XG4gXG4mIzQzO3N0cnVjdCBmYm5pY19od21vbl9jYWNoZSB7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4mIzQzO1x0czMyIHRlbXBfbWRlZztcbiYjNDM7XHRzMzIgdm9sdF9tdjtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2RldiB7XG4gXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2O1xuIFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcbiBcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcbiBcdHN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqZndfcmVwb3J0ZXI7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKm90cF9yZXBvcnRlcjtcbiBcbkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4mIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCk7XG4gXG4gaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIHZvaWQgZmJuaWNfbWFjX2ZyZWVfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG5pbmRleCAyODNkMjVmYWU3OWU3Li42ZGNhMzgwNzZkN2I5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbkBAIC01NzUsNiAmIzQzOzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xuIFx0RkJOSUNfVExWX0FUVFJfU1RSSU5HKEZCTklDX0ZXX0NBUF9SRVNQX1VFRklfQ09NTUlUX1NUUixcbiBcdFx0XHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxuIFx0RkJOSUNfVExWX0FUVFJfVTMyKEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSxcbiBcdEZCTklDX1RMVl9BVFRSX0xBU1RcbiB9O1xuIFxuQEAgLTcwMiw2ICYjNDM7NzA3LDIyIEBAIHN0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfY2FwX3Jlc3Aodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHQvKiBBbHdheXMgYXNzdW1lIHdlIG5lZWQgYSBCTUMgcmVpbml0ICovXG4gXHRmYmQtXHUwMDNlZndfY2FwLm5lZWRfYm1jX3RjYW1fcmVpbml0ID0gdHJ1ZTtcbiBcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbiYjNDM7XHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXG4mIzQzO1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbiYjNDM7XHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4mIzQzO1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuJiM0MztcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcbiYjNDM7XHRcdFx0XHRcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgJiM0MzsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X2luZGV4IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4W10gPSB7XG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxuJiM0MztcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9USEVSTUFMKSxcbiYjNDM7XHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4mIzQzO1x0RkJOSUNfVExWX0FUVFJfTEFTVFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXG4mIzQzO1x0XHRcdFx0XHRcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBvcGFxdWU7XG4mIzQzO1x0czMyIHZhbHVlO1xuJiM0MztcbiYjNDM7XHR0aGVybV9leGNlZWRlZCA9XG4mIzQzO1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4mIzQzO1x0dm9sdF9leGNlZWRlZCA9XG4mIzQzO1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0aGVybV9leGNlZWRlZCBcdTAwMjZcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcbiYjNDM7XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7VGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICh0aGVybV9leGNlZWRlZCkge1xuJiM0MztcdFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1RIRVJNQUxdKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpO1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXG5cJiMzNDssIHZhbHVlKTtcbiYjNDM7XHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAodm9sdF9leGNlZWRlZCkge1xuJiM0MztcdFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXG5cJiMzNDspO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHZhbHVlID0gZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRBR0UpO1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbVZcXG5cJiMzNDssIHZhbHVlKTtcbiYjNDM7XHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0ge1xuIFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxuIFx0RkJOSUNfVExWX1BBUlNFUihGV19DQVBfUkVTUCwgZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXgsXG5AQCAtMTY0Niw2ICYjNDM7MTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuJiM0MztcdEZCTklDX1RMVl9QQVJTRVIoU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQLFxuJiM0MztcdFx0XHQgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsXG4mIzQzO1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiAmIzQzOzYsNyBAQFxuIFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbGltaXRzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90eXBlcy5oXHUwMDNlXG4gXG4gc3RydWN0IGZibmljX2RldjtcbkBAIC00NCw2ICYjNDM7NDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4mIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxuJiM0MzsgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcbiYjNDM7ICogcmVmcmVzaGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVx0XHRcdFMzMl9NSU5cbiYjNDM7XG4mIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xuJiM0MztcdHMzMiBtaW47XG4mIzQzO1x0czMyIG1heDtcbiYjNDM7XHRzMzIgY3JpdDtcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHR1OFx0bGlua19zcGVlZDtcbiBcdHU4XHRsaW5rX2ZlYztcbiBcdHUzMlx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xuJiM0MztcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdGVtcDtcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgJiM0MzsyMjcsNyBAQCBlbnVtIHtcbiBcdEZCTklDX1RMVl9NU0dfSURfUVNGUF9SRUFEX1JFU1BcdFx0XHQ9IDB4MzksXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXHRcdFx0PSAweDNDLFxuIFx0RkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1BcdFx0PSAweDNELFxuJiM0MztcdEZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX1NFTkRfTE9HU19SRVFcdFx0PSAweDQzLFxuIFx0RkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUVx0XHRcdD0gMHg0NCxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVNQXHRcdFx0PSAweDQ1LFxuQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4mIzQzO1x0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTlx0XHRcdD0gMHgxOCxcbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbiYjNDM7XHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcdFx0XHQ9IDB4MWEsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5cdFx0XHQ9IDB4MWIsXG4mIzQzO1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHtcbiBcdEZCTklDX0ZXX1RTRU5FX01TR19NQVhcbiB9O1xuIFxuJiM0MztlbnVtIHtcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUdcdD0gMHgxLFxuJiM0MztcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcdFx0XHQ9IDB4MixcbiYjNDM7XHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4mIzQzO1x0RkJOSUNfRldfVFNFTkVfRVhDRUVERURfTVNHX01BWCxcbiYjNDM7fTtcbiYjNDM7XG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgJiM0MzsyLDE4NCBAQFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaHdtb24uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9qaWZmaWVzLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDtmYm5pYy5oXCYjMzQ7XG4gI2luY2x1ZGUgXCYjMzQ7ZmJuaWNfbWFjLmhcJiMzNDtcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4mIzQzO1x0XHRcdFx0ICAgICAgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiYjNDM7XHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbiYjNDM7XHRyZXR1cm4gMDQ0NDtcbiYjNDM7fVxuIFxuLVx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXHUwMDI2ZmJkLVx1MDAzZWh3bW9uX2NhY2hlO1xuJiM0MztcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuJiM0MztcdGludCBlcnIgPSAwO1xuJiM0MztcdHMzMiAqY2FjaGVkO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4mIzQzO1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHRpbWVfaXNfYWZ0ZXJfZXFfamlmZmllcyhjYWNoZS1cdTAwM2VsYXN0X3JlYWQpKSB7XG4mIzQzO1x0XHQqdmFsID0gKmNhY2hlZDtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuJiM0MztcdGlmICghZndfY21wbClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gZXhpdF9mcmVlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2ZndfY21wbC1cdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbiYjNDM7XHRpZiAoZndfY21wbC1cdTAwM2VyZXN1bHQpIHtcbiYjNDM7XHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuJiM0MztcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcJiMzNDslczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdF9fZnVuY19fLCBlcnIpO1xuJiM0MztcdFx0Z290byBleGl0X2NsZWFudXA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqL1xuJiM0MztcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4mIzQzO1x0Y2FjaGUtXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuJiM0MztcdGNhY2hlLVx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XG4mIzQzO1xuJiM0MztcdCp2YWwgPSAqY2FjaGVkO1xuJiM0MztleGl0X2NsZWFudXA6XG4mIzQzO1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbiYjNDM7ZXhpdF9mcmVlOlxuJiM0MztcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXG4tXHRcdFx0XHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxuLVx0XHRcdFx0ICAgICAgdTMyIGF0dHIsIGludCBjaGFubmVsKVxuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcCBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl90ZW1wX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbi1cdGlmICh0eXBlID09IGh3bW9uX2luIFx1MDAyNlx1MDAyNiBhdHRyID09IGh3bW9uX2luX2lucHV0KVxuLVx0XHRyZXR1cm4gMDQ0NDtcbiYjNDM7XHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9EQVRBO1xuIFxuJiM0MztcdCp2YWwgPSB0aHI7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREFUQTtcbiYjNDM7XG4mIzQzO1x0KnZhbCA9IGEgXHUwMDNlPSBiO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4mIzQzO3tcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGF0dHIpIHtcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5jcml0LCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9pbnB1dDpcbiYjNDM7XHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0cmV0dXJuIGVycjtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoIChhdHRyKSB7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl90ZW1wX2NyaXRfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcbiYjNDM7e1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5fbWluOlxuJiM0MztcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXg6XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX2lucHV0OlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuJiM0MztcdGNhc2UgaHdtb25faW5fbWF4X2FsYXJtOlxuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAoYXR0cikge1xuJiM0MztcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRjYXNlIGh3bW9uX2luX21pbl9hbGFybTpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4mIzQzO1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4gXHRcdFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxuIHtcbiBcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xuLVx0Y29uc3Qgc3RydWN0IGZibmljX21hYyAqbWFjID0gZmJkLVx1MDAzZW1hYztcbi1cdGludCBpZDtcbiBcbi1cdGlkID0gZmJuaWNfaHdtb25fc2Vuc29yX2lkKHR5cGUpO1xuLVx0cmV0dXJuIGlkIFx1MDAzYyAwID8gaWQgOiBtYWMtXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xuJiM0MztcdHN3aXRjaCAodHlwZSkge1xuJiM0MztcdGNhc2UgaHdtb25fdGVtcDpcbiYjNDM7XHRcdHJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xuJiM0MztcdGNhc2UgaHdtb25faW46XG4mIzQzO1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICYjNDM7MTg4LDE1IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbiB9O1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hhbm5lbF9pbmZvICpmYm5pY19od21vbl9pbmZvW10gPSB7XG4tXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksXG4tXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbiYjNDM7XHRcdFx0ICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX1RfTUFYIHwgSFdNT05fVF9NQVhfQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuJiM0MztcdEhXTU9OX0NIQU5ORUxfSU5GTyhpbixcbiYjNDM7XHRcdFx0ICAgSFdNT05fSV9JTlBVVCB8XG4mIzQzO1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuJiM0MztcdFx0XHQgICBIV01PTl9JX01BWCB8IEhXTU9OX0lfTUFYX0FMQVJNKSxcbiBcdE5VTExcbiB9O1xuIFxuQEAgLTU3LDI1ICYjNDM7MjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0ZmJkLVx1MDAzZWh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcJiMzNDtmYm5pY1wmIzM0Oyxcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbiYjNDM7XHQvKiBTZWVkIGNhY2hlIHdpdGggc2VudGluZWwgc28gdGhlIGZpcnN0IHJlYWQgYWx3YXlzIHJlZnJlc2hlcy4gKi9cbiYjNDM7XHRmYmQtXHUwMDNlaHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7XG4mIzQzO1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbiYjNDM7XG4mIzQzO1x0aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwmIzM0O2ZibmljXCYjMzQ7LCBmYmQsXG4mIzQzO1x0XHRcdFx0XHRcdFx1MDAyNmZibmljX2NoaXBfaW5mbywgTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwmIzM0O0ZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxuXCYjMzQ7LFxuLVx0XHRcdCAgIGZiZC1cdTAwM2Vod21vbik7XG4tXHRcdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4mIzQzO1x0XHRcdCAgIGh3bW9uKTtcbiYjNDM7XHRcdHJldHVybjtcbiBcdH1cbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqaHdtb247XG4mIzQzO1xuIFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSB8fCAhZmJkLVx1MDAzZWh3bW9uKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtXHUwMDNlaHdtb24pO1xuLVx0ZmJkLVx1MDAzZWh3bW9uID0gTlVMTDtcbiYjNDM7XHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbiYjNDM7XHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxuJiM0MztcdCAqIGFuZCB3YWl0IGZvciBhbnkgaW4tZmxpZ2h0IEZXIG1haWxib3ggSVJRIGhhbmRsZXIgdG8gZmluaXNoIHNvIGl0XG4mIzQzO1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRXUklURV9PTkNFKGZiZC1cdTAwM2Vod21vbiwgTlVMTCk7XG4mIzQzO1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4mIzQzO1xuJiM0MztcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGh3bW9uKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbiYjNDM7XHRzMzIgYXR0ciA9IC0xO1xuJiM0MztcbiYjNDM7XHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKGlkKSB7XG4mIzQzO1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbiYjNDM7XHRcdHR5cGUgPSBod21vbl90ZW1wO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9taW5fYWxhcm07XG4mIzQzO1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbiYjNDM7XHRcdGVsc2UgaWYgKHZhbCBcdTAwM2U9IGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgpXG4mIzQzO1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuJiM0MztcdFx0dHlwZSA9IGh3bW9uX2luO1xuJiM0MztcbiYjNDM7XHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluKVxuJiM0MztcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuJiM0MztcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heClcbiYjNDM7XHRcdFx0YXR0ciA9IGh3bW9uX2luX21heF9hbGFybTtcbiYjNDM7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4mIzQzO1x0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cbiYjNDM7XHQgKiBkb3duLlxuJiM0MztcdCAqL1xuJiM0MztcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cdTAwM2Vod21vbik7XG4mIzQzO1x0aWYgKGF0dHIgXHUwMDNlPSAwIFx1MDAyNlx1MDAyNiBod21vbilcbiYjNDM7XHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCAmIzQzOzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXG4gXHRcdFx0ICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCxcbi1cdFx0XHRcdCAgICAgbG9uZyAqdmFsKVxuLXtcbi1cdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuLVx0aW50IGVyciA9IDA7XG4tXHRzMzIgKnNlbnNvcjtcbi1cbi1cdGZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTtcbi1cdGlmICghZndfY21wbClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4tXG4tXHRzd2l0Y2ggKGlkKSB7XG4tXHRjYXNlIEZCTklDX1NFTlNPUl9URU1QOlxuLVx0XHRzZW5zb3IgPSBcdTAwMjZmd19jbXBsLVx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xuLVx0XHRicmVhaztcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaXZvbHRzO1xuLVx0XHRicmVhaztcbi1cdGRlZmF1bHQ6XG4tXHRcdGVyciA9IC1FSU5WQUw7XG4tXHRcdGdvdG8gZXhpdF9mcmVlO1xuLVx0fVxuLVxuLVx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xuLVx0aWYgKGVycikge1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4tXHRcdFx0XCYjMzQ7RmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cJiMzNDssXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXG5cJiMzNDspO1xuLVx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuLVx0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4tXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuLVx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwmIzM0Oyxcbi1cdFx0XHRfX2Z1bmNfXywgZXJyKTtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQqdmFsID0gKnNlbnNvcjtcbi1leGl0X2NsZWFudXA6XG4tXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xuLWV4aXRfZnJlZTpcbi1cdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xuLVxuLVx0cmV0dXJuIGVycjtcbi19XG4tXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7XG4gXHQuaW5pdF9yZWdzID0gZmJuaWNfbWFjX2luaXRfcmVncyxcbiBcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcbkBAIC05NjYsNyAmIzQzOzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xuIFx0LmdldF9ybW9uX3N0YXRzID0gZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzLFxuIFx0LmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYyxcbiBcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcbi1cdC5nZXRfc2Vuc29yID0gZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyxcbiB9O1xuIFxuIC8qKlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXG5pbmRleCAxMGYzMGUwZThmNjkxLi5iZGUyZGFhNjU2NDU3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjUzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgZmJuaWMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMzc0MThiYTU4NzdjOTQzMDk0Y2YwOWRmOTRjNjFmMDBmMzJjNDYyZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDIyOjUzOjU2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oCmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmgKQEAgLTIyLDExICYjNDM7MjIsMTggQEAgc3RydWN0IGZibmljX25hcGlfdmVjdG9yOwogI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTCQkxMjh1CiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTCQk0CiAKJiM0MztzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgewomIzQzOwl1bnNpZ25lZCBsb25nIGxhc3RfcmVhZDsKJiM0MzsJczMyIHRlbXBfbWRlZzsKJiM0MzsJczMyIHZvbHRfbXY7CiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBmYm5pY19kZXYgewogCXN0cnVjdCBkZXZpY2UgKmRldjsKIAlzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2OwogCXN0cnVjdCBkZW50cnkgKmRiZ19mYmQ7CiAJc3RydWN0IGRldmljZSAqaHdtb247CiYjNDM7CXN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTsKIAlzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyOwogCXN0cnVjdCBkZXZsaW5rX2hlYWx0aF9yZXBvcnRlciAqb3RwX3JlcG9ydGVyOwogCkBAIC0xODUsNiAmIzQzOzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTsKIAogdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7CiYjNDM7dm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTsKIAogaW50IGZibmljX21hY19yZXF1ZXN0X2lycShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuYwppbmRleCAyODNkMjVmYWU3OWU3Li42ZGNhMzgwNzZkN2I5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jCkBAIC01NzUsNiAmIzQzOzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0gewogCUZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsCiAJCQkgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLAogCUZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4pLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVgpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYKSwKIAlGQk5JQ19UTFZfQVRUUl9MQVNUCiB9OwogCkBAIC03MDIsNiAmIzQzOzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKQogCS8qIEFsd2F5cyBhc3N1bWUgd2UgbmVlZCBhIEJNQyByZWluaXQgKi8KIAlmYmQtJmd0O2Z3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7CiAKJiM0MzsJZmJkLSZndDtmd19jYXAudGVtcC5taW4gPQomIzQzOwkJZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC50ZW1wLm1heCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NQVhdLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSwKJiM0MzsJCQkJCSAgRkJOSUNfU0VOU09SX05PX0RBVEEpOwomIzQzOwlmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiA9CiYjNDM7CQlmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLAomIzQzOwkJCQkJICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7CiYjNDM7CWZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4ID0KJiM0MzsJCWZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWF0sCiYjNDM7CQkJCQkgIEZCTklDX1NFTlNPUl9OT19EQVRBKTsKJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTYxOCw2ICYjNDM7MTYzOSw1NyBAQCBmYm5pY19md19wYXJzZXJfdGVzdCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cykKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXhbXSA9IHsKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKSwKJiM0MzsJRkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNQUwpLAomIzQzOwlGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksCiYjNDM7CUZCTklDX1RMVl9BVFRSX0xBU1QKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3Aodm9pZCAqb3BhcXVlLAomIzQzOwkJCQkJCSAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKQomIzQzO3sKJiM0MzsJYm9vbCB0aGVybV9leGNlZWRlZCwgdm9sdF9leGNlZWRlZDsKJiM0MzsJc3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlOwomIzQzOwlzMzIgdmFsdWU7CiYjNDM7CiYjNDM7CXRoZXJtX2V4Y2VlZGVkID0KJiM0MzsJCWZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHKTsKJiM0MzsJdm9sdF9leGNlZWRlZCA9CiYjNDM7CQlmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTsKJiM0MzsKJiM0MzsJaWYgKCF0aGVybV9leGNlZWRlZCAmYW1wOyZhbXA7ICF2b2x0X2V4Y2VlZGVkKSB7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7VGhyZXNob2xkIGV4Y2VlZGVkIG1lc3NhZ2Ugd2l0aCBubyBmbGFnIHNldFxuJiMzNDspOwomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHRoZXJtX2V4Y2VlZGVkKSB7CiYjNDM7CQlpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHsKJiM0MzsJCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxuJiMzNDspOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwkJdmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0O1RoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xuJiMzNDssIHZhbHVlKTsKJiM0MzsJCWZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHZvbHRfZXhjZWVkZWQpIHsKJiM0MzsJCWlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9WT0xUQUdFXSkgewomIzQzOwkJCWRldl9lcnIoZmJkLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXG4mIzM0Oyk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CQl2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTsKJiM0MzsJCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7Vm9sdGFnZSB0aHJlc2hvbGQgZXhjZWVkZWQ6ICVkIG1WXG4mIzM0OywgdmFsdWUpOwomIzQzOwkJZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1ZPTFRBR0UsIHZhbHVlKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0gewogCUZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSwKIAlGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCwKQEAgLTE2NDYsNiAmIzQzOzE3MTgsOSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9wYXJzZXIgZmJuaWNfZndfdGx2X3BhcnNlcltdID0gewogCUZCTklDX1RMVl9QQVJTRVIoVFNFTkVfUkVBRF9SRVNQLAogCQkJIGZibmljX3RzZW5lX3JlYWRfcmVzcF9pbmRleCwKIAkJCSBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLAomIzQzOwlGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCwKJiM0MzsJCQkgZmJuaWNfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3BfaW5kZXgsCiYjNDM7CQkJIGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKSwKIAlGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLAogCQkJIGZibmljX2Z3X2xvZ19yZXFfaW5kZXgsCiAJCQkgZmJuaWNfZndfcGFyc2VfbG9nX3JlcSksCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmgKaW5kZXggZDg0NzIzZTRjZmEzNi4uODczMDFlNjA4MjU1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaApAQCAtNiw2ICYjNDM7Niw3IEBACiAKICNpbmNsdWRlICZsdDtsaW51eC9jb21wbGV0aW9uLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbGltaXRzLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdHlwZXMuaCZndDsKIAogc3RydWN0IGZibmljX2RldjsKQEAgLTQ0LDYgJiM0Mzs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHsKIAljaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdOwogfTsKIAomIzQzOy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZQomIzQzOyAqIGZpcm13YXJlIG5ldmVyIHBvcHVsYXRlZCAob2xkZXIgZmlybXdhcmUpIG9yIGEgY2FjaGUgZW50cnkgbm90IHlldAomIzQzOyAqIHJlZnJlc2hlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEZCTklDX1NFTlNPUl9OT19EQVRBCQkJUzMyX01JTgomIzQzOwomIzQzO3N0cnVjdCBmYm5pY190aHJlc2hvbGQgewomIzQzOwlzMzIgbWluOwomIzQzOwlzMzIgbWF4OwomIzQzOwlzMzIgY3JpdDsKJiM0Mzt9OwomIzQzOwogc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJc3RydWN0IHsKIAkJc3RydWN0IGZibmljX2Z3X3ZlciBtZ210LCBib290bG9hZGVyOwpAQCAtNjAsNiAmIzQzOzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7CiAJdTgJbGlua19zcGVlZDsKIAl1OAlsaW5rX2ZlYzsKIAl1MzIJYW50aV9yb2xsYmFja192ZXJzaW9uOwomIzQzOwlzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7CiYjNDM7CXN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDsKIH07CiAKIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHsKQEAgLTIxMiw2ICYjNDM7MjI3LDcgQEAgZW51bSB7CiAJRkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUAkJCT0gMHgzOSwKIAlGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRCQkJPSAweDNDLAogCUZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQCQk9IDB4M0QsCiYjNDM7CUZCTklDX1RMVl9NU0dfSURfU0VOU09SX1RIUkVTSE9MRF9FWENFRURFRF9SRVNQID0gMHg0MCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRCQk9IDB4NDMsCiAJRkJOSUNfVExWX01TR19JRF9MT0dfTVNHX1JFUQkJCT0gMHg0NCwKIAlGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUAkJCT0gMHg0NSwKQEAgLTI0Miw2ICYjNDM7MjU4LDEyIEBAIGVudW0gewogCUZCTklDX0ZXX0NBUF9SRVNQX1VFRklfVkVSU0lPTgkJCT0gMHgxMSwKIAlGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIJCT0gMHgxMiwKIAlGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04JCT0gMHgxNSwKJiM0MzsJLyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi8KJiM0MzsJRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU4JCQk9IDB4MTgsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYCQkJPSAweDE5LAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVQJCQk9IDB4MWEsCiYjNDM7CUZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOCQkJPSAweDFiLAomIzQzOwlGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWAkJCT0gMHgxYywKIAlGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYCiB9OwogCkBAIC0yNzUsNiAmIzQzOzI5NywxNCBAQCBlbnVtIHsKIAlGQk5JQ19GV19UU0VORV9NU0dfTUFYCiB9OwogCiYjNDM7ZW51bSB7CiYjNDM7CUZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcJPSAweDAsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRwk9IDB4MSwKJiM0MzsJRkJOSUNfRldfVFNFTkVfVEhFUk1BTAkJCT0gMHgyLAomIzQzOwlGQk5JQ19GV19UU0VORV9WT0xUQUdFCQkJPSAweDMsCiYjNDM7CUZCTklDX0ZXX1RTRU5FX0VYQ0VFREVEX01TR19NQVgsCiYjNDM7fTsKJiM0MzsKIGVudW0gewogCUZCTklDX0ZXX09XTkVSU0hJUF9GTEFHCQkJPSAweDAsCiAJRkJOSUNfRldfT1dORVJTSElQX1RJTUUJCQk9IDB4MSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYwppbmRleCBkZWY4NTk4YWNlZWNmLi4zZjMzNTIyZmNmZDJiIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jCkBAIC0yLDQxICYjNDM7MiwxODQgQEAKIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovCiAKICNpbmNsdWRlICZsdDtsaW51eC9od21vbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9qaWZmaWVzLmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7ZmJuaWMuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O2ZibmljX21hYy5oJiMzNDsKIAotc3RhdGljIGludCBmYm5pY19od21vbl9zZW5zb3JfaWQoZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSkKJiM0MztzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsCiYjNDM7CQkJCSAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsCiYjNDM7CQkJCSAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkKIHsKLQlpZiAodHlwZSA9PSBod21vbl90ZW1wKQotCQlyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7Ci0JaWYgKHR5cGUgPT0gaHdtb25faW4pCi0JCXJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTsKJiM0MzsJcmV0dXJuIDA0NDQ7CiYjNDM7fQogCi0JcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBmYm5pY19od21vbl9jYWNoZSAqY2FjaGUgPSAmYW1wO2ZiZC0mZ3Q7aHdtb25fY2FjaGU7CiYjNDM7CXN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsJczMyICpjYWNoZWQ7CiYjNDM7CiYjNDM7CXN3aXRjaCAoaWQpIHsKJiM0MzsJY2FzZSBGQk5JQ19TRU5TT1JfVEVNUDoKJiM0MzsJCWNhY2hlZCA9ICZhbXA7Y2FjaGUtJmd0O3RlbXBfbWRlZzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgomIzQzOwkJY2FjaGVkID0gJmFtcDtjYWNoZS0mZ3Q7dm9sdF9tdjsKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgJmFtcDsmYW1wOwomIzQzOwkgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLSZndDtsYXN0X3JlYWQpKSB7CiYjNDM7CQkqdmFsID0gKmNhY2hlZDsKJiM0MzsJCXJldHVybiAwOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTsKJiM0MzsJaWYgKCFmd19jbXBsKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTsKJiM0MzsJaWYgKGVycikgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwKJiM0MzsJCQkmIzM0O0ZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXG4mIzM0OywKJiM0MzsJCQllcnIpOwomIzQzOwkJZ290byBleGl0X2ZyZWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtmd19jbXBsLSZndDtkb25lLCAxMCAqIEhaKSkgewomIzQzOwkJZGV2X2VycihmYmQtJmd0O2RldiwgJiMzNDtUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxuJiMzNDspOwomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCWdvdG8gZXhpdF9jbGVhbnVwOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqLwomIzQzOwlpZiAoZndfY21wbC0mZ3Q7cmVzdWx0KSB7CiYjNDM7CQllcnIgPSBmd19jbXBsLSZndDtyZXN1bHQ7CiYjNDM7CQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LCAmIzM0OyVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxuJiMzNDssCiYjNDM7CQkJX19mdW5jX18sIGVycik7CiYjNDM7CQlnb3RvIGV4aXRfY2xlYW51cDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBGVyByZXR1cm5zIGJvdGggcmVhZGluZ3MgaW4gb25lIHJlc3BvbnNlLCBjYWNoZSBib3RoLiAqLwomIzQzOwljYWNoZS0mZ3Q7dGVtcF9tZGVnID0gZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaWRlZ3JlZXM7CiYjNDM7CWNhY2hlLSZndDt2b2x0X212ID0gZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaXZvbHRzOwomIzQzOwljYWNoZS0mZ3Q7bGFzdF9yZWFkID0gamlmZmllczsKJiM0MzsKJiM0MzsJKnZhbCA9ICpjYWNoZWQ7CiYjNDM7ZXhpdF9jbGVhbnVwOgomIzQzOwlmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpOwomIzQzO2V4aXRfZnJlZToKJiM0MzsJZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSwKLQkJCQkgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLAotCQkJCSAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCkKJiM0MztzdGF0aWMgaW50IGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGxvbmcgdGhyLCBsb25nICp2YWwpCiB7Ci0JaWYgKHR5cGUgPT0gaHdtb25fdGVtcCAmYW1wOyZhbXA7IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dCkKLQkJcmV0dXJuIDA0NDQ7Ci0JaWYgKHR5cGUgPT0gaHdtb25faW4gJmFtcDsmYW1wOyBhdHRyID09IGh3bW9uX2luX2lucHV0KQotCQlyZXR1cm4gMDQ0NDsKJiM0MzsJaWYgKHRociA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSkKJiM0MzsJCXJldHVybiAtRU5PREFUQTsKIAomIzQzOwkqdmFsID0gdGhyOwogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpZiAoYSA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSB8fCBiID09IEZCTklDX1NFTlNPUl9OT19EQVRBKQomIzQzOwkJcmV0dXJuIC1FTk9EQVRBOwomIzQzOwomIzQzOwkqdmFsID0gYSAmZ3Q7PSBiOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBmYm5pY19od21vbl90ZW1wX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCB1MzIgYXR0ciwgbG9uZyAqdmFsKQomIzQzO3sKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5taW4sIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9tYXg6CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudGVtcC5tYXgsIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9jcml0OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2lucHV0OgomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOgomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybToKJiM0MzsJCWJyZWFrOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl90ZW1wX2lucHV0OgomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWNhc2UgaHdtb25fdGVtcF9taW5fYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtJmd0O2Z3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl90ZW1wX21heF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybToKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCwgdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpCiYjNDM7ewomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlzd2l0Y2ggKGF0dHIpIHsKJiM0MzsJY2FzZSBod21vbl9pbl9taW46CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLSZndDtmd19jYXAudm9sdC5taW4sIHZhbCk7CiYjNDM7CWNhc2UgaHdtb25faW5fbWF4OgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4LCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luX2lucHV0OgomIzQzOwljYXNlIGh3bW9uX2luX21pbl9hbGFybToKJiM0MzsJY2FzZSBod21vbl9pbl9tYXhfYWxhcm06CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybiAtRU9QTk9UU1VQUDsKJiM0MzsJfQomIzQzOwomIzQzOwllcnIgPSBmYm5pY19od21vbl9zZW5zb3JfcmVhZChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWwpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJcmV0dXJuIGVycjsKJiM0MzsKJiM0MzsJc3dpdGNoIChhdHRyKSB7CiYjNDM7CWNhc2UgaHdtb25faW5faW5wdXQ6CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJY2FzZSBod21vbl9pbl9taW5fYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbiwgKnZhbCwgdmFsKTsKJiM0MzsJY2FzZSBod21vbl9pbl9tYXhfYWxhcm06CiYjNDM7CQlyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1heCwgdmFsKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKIAkJCSAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwsIGxvbmcgKnZhbCkKIHsKIAlzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKLQljb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtJmd0O21hYzsKLQlpbnQgaWQ7CiAKLQlpZCA9IGZibmljX2h3bW9uX3NlbnNvcl9pZCh0eXBlKTsKLQlyZXR1cm4gaWQgJmx0OyAwID8gaWQgOiBtYWMtJmd0O2dldF9zZW5zb3IoZmJkLCBpZCwgdmFsKTsKJiM0MzsJc3dpdGNoICh0eXBlKSB7CiYjNDM7CWNhc2UgaHdtb25fdGVtcDoKJiM0MzsJCXJldHVybiBmYm5pY19od21vbl90ZW1wX3JlYWQoZmJkLCBhdHRyLCB2YWwpOwomIzQzOwljYXNlIGh3bW9uX2luOgomIzQzOwkJcmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpOwomIzQzOwlkZWZhdWx0OgomIzQzOwkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwl9CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHsKQEAgLTQ1LDggJiM0MzsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0gewogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHsKLQlIV01PTl9DSEFOTkVMX0lORk8odGVtcCwgSFdNT05fVF9JTlBVVCksCi0JSFdNT05fQ0hBTk5FTF9JTkZPKGluLCBIV01PTl9JX0lOUFVUKSwKJiM0MzsJSFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsCiYjNDM7CQkJICAgSFdNT05fVF9JTlBVVCB8CiYjNDM7CQkJICAgSFdNT05fVF9NSU4gfCBIV01PTl9UX01JTl9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fVF9NQVggfCBIV01PTl9UX01BWF9BTEFSTSB8CiYjNDM7CQkJICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSwKJiM0MzsJSFdNT05fQ0hBTk5FTF9JTkZPKGluLAomIzQzOwkJCSAgIEhXTU9OX0lfSU5QVVQgfAomIzQzOwkJCSAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfAomIzQzOwkJCSAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLAogCU5VTEwKIH07CiAKQEAgLTU3LDI1ICYjNDM7MjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHsKIAogdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpCiB7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwogCWlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikpCiAJCXJldHVybjsKIAotCWZiZC0mZ3Q7aHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC0mZ3Q7ZGV2LCAmIzM0O2ZibmljJiMzNDssCi0JCQkJCQkgICAgIGZiZCwgJmFtcDtmYm5pY19jaGlwX2luZm8sCi0JCQkJCQkgICAgIE5VTEwpOwotCWlmIChJU19FUlIoZmJkLSZndDtod21vbikpIHsKJiM0MzsJLyogU2VlZCBjYWNoZSB3aXRoIHNlbnRpbmVsIHNvIHRoZSBmaXJzdCByZWFkIGFsd2F5cyByZWZyZXNoZXMuICovCiYjNDM7CWZiZC0mZ3Q7aHdtb25fY2FjaGUudGVtcF9tZGVnID0gRkJOSUNfU0VOU09SX05PX0RBVEE7CiYjNDM7CWZiZC0mZ3Q7aHdtb25fY2FjaGUudm9sdF9tdiA9IEZCTklDX1NFTlNPUl9OT19EQVRBOwomIzQzOwomIzQzOwlod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLSZndDtkZXYsICYjMzQ7ZmJuaWMmIzM0OywgZmJkLAomIzQzOwkJCQkJCSZhbXA7ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihod21vbikpIHsKIAkJZGV2X25vdGljZShmYmQtJmd0O2RldiwKIAkJCSAgICYjMzQ7RmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcbiYjMzQ7LAotCQkJICAgZmJkLSZndDtod21vbik7Ci0JCWZiZC0mZ3Q7aHdtb24gPSBOVUxMOwomIzQzOwkJCSAgIGh3bW9uKTsKJiM0MzsJCXJldHVybjsKIAl9CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0UoZmJkLSZndDtod21vbiwgaHdtb24pOwogfQogCiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKQogewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpod21vbjsKJiM0MzsKIAlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pIHx8ICFmYmQtJmd0O2h3bW9uKQogCQlyZXR1cm47CiAKLQlod21vbl9kZXZpY2VfdW5yZWdpc3RlcihmYmQtJmd0O2h3bW9uKTsKLQlmYmQtJmd0O2h3bW9uID0gTlVMTDsKJiM0MzsJaHdtb24gPSBmYmQtJmd0O2h3bW9uOwomIzQzOwkvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTAomIzQzOwkgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdAomIzQzOwkgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LgomIzQzOwkgKi8KJiM0MzsJV1JJVEVfT05DRShmYmQtJmd0O2h3bW9uLCBOVUxMKTsKJiM0MzsJc3luY2hyb25pemVfaXJxKGZiZC0mZ3Q7ZndfbXNpeF92ZWN0b3IpOwomIzQzOwomIzQzOwlod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbCkKJiM0Mzt7CiYjNDM7CWVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGU7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmh3bW9uOwomIzQzOwlzMzIgYXR0ciA9IC0xOwomIzQzOwomIzQzOwlpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzd2l0Y2ggKGlkKSB7CiYjNDM7CWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6CiYjNDM7CQl0eXBlID0gaHdtb25fdGVtcDsKJiM0MzsKJiM0MzsJCWlmICh2YWwgJmx0Oz0gZmJkLSZndDtmd19jYXAudGVtcC5taW4pCiYjNDM7CQkJYXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAuY3JpdCkKJiM0MzsJCQlhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnRlbXAubWF4KQomIzQzOwkJCWF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTsKJiM0MzsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOgomIzQzOwkJdHlwZSA9IGh3bW9uX2luOwomIzQzOwomIzQzOwkJaWYgKHZhbCAmbHQ7PSBmYmQtJmd0O2Z3X2NhcC52b2x0Lm1pbikKJiM0MzsJCQlhdHRyID0gaHdtb25faW5fbWluX2FsYXJtOwomIzQzOwkJZWxzZSBpZiAodmFsICZndDs9IGZiZC0mZ3Q7ZndfY2FwLnZvbHQubWF4KQomIzQzOwkJCWF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07CiYjNDM7CiYjNDM7CQlicmVhazsKJiM0MzsJZGVmYXVsdDoKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGUKJiM0MzsJICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm4KJiM0MzsJICogZG93bi4KJiM0MzsJICovCiYjNDM7CWh3bW9uID0gUkVBRF9PTkNFKGZiZC0mZ3Q7aHdtb24pOwomIzQzOwlpZiAoYXR0ciAmZ3Q7PSAwICZhbXA7JmFtcDsgaHdtb24pCiYjNDM7CQlod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMKaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jCkBAIC04OTksNjAgJiM0Mzs4OTksNiBAQCBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHJlc2V0LAogCQkJICAgIFRNSV9TVEFUX1RYX1BBQ0tFVF85MjE3X01BWF9CWVRFUyk7CiB9CiAKLXN0YXRpYyBpbnQgZmJuaWNfbWFjX2dldF9zZW5zb3JfYXNpYyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwKLQkJCQkgICAgIGxvbmcgKnZhbCkKLXsKLQlzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiAqZndfY21wbDsKLQlpbnQgZXJyID0gMDsKLQlzMzIgKnNlbnNvcjsKLQotCWZ3X2NtcGwgPSBmYm5pY19md19hbGxvY19jbXBsKEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVNQKTsKLQlpZiAoIWZ3X2NtcGwpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jc3dpdGNoIChpZCkgewotCWNhc2UgRkJOSUNfU0VOU09SX1RFTVA6Ci0JCXNlbnNvciA9ICZhbXA7ZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaWRlZ3JlZXM7Ci0JCWJyZWFrOwotCWNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6Ci0JCXNlbnNvciA9ICZhbXA7ZndfY21wbC0mZ3Q7dS50c2VuZS5taWxsaXZvbHRzOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQllcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7Ci0JaWYgKGVycikgewotCQlkZXZfZXJyKGZiZC0mZ3Q7ZGV2LAotCQkJJiMzNDtGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxuJiMzNDssCi0JCQllcnIpOwotCQlnb3RvIGV4aXRfZnJlZTsKLQl9Ci0KLQlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmYW1wO2Z3X2NtcGwtJmd0O2RvbmUsIDEwICogSFopKSB7Ci0JCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7VGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcbiYjMzQ7KTsKLQkJZXJyID0gLUVUSU1FRE9VVDsKLQkJZ290byBleGl0X2NsZWFudXA7Ci0JfQotCi0JLyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovCi0JaWYgKGZ3X2NtcGwtJmd0O3Jlc3VsdCkgewotCQllcnIgPSBmd19jbXBsLSZndDtyZXN1bHQ7Ci0JCWRldl9lcnIoZmJkLSZndDtkZXYsICYjMzQ7JXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXG4mIzM0OywKLQkJCV9fZnVuY19fLCBlcnIpOwotCQlnb3RvIGV4aXRfY2xlYW51cDsKLQl9Ci0KLQkqdmFsID0gKnNlbnNvcjsKLWV4aXRfY2xlYW51cDoKLQlmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpOwotZXhpdF9mcmVlOgotCWZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpOwotCi0JcmV0dXJuIGVycjsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY19tYWMgZmJuaWNfbWFjX2FzaWMgPSB7CiAJLmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsCiAJLmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLApAQCAtOTY2LDcgJiM0Mzs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHsKIAkuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsCiAJLmxpbmtfZG93biA9IGZibmljX21hY19saW5rX2Rvd25fYXNpYywKIAkubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsCi0JLmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLAogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaAppbmRleCAxMGYzMGUwZThmNjkxLi5iZGUyZGFhNjU2NDU3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmgKQEAgLTEzNyw4ICYjNDM7MTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7CiAKIAl2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpOwogCXZvaWQgKCpsaW5rX3VwKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpOwotCi0JaW50ICgqZ2V0X3NlbnNvcikoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbCk7CiB9OwogCiBpbnQgZmJuaWNfbWFjX2luaXQoc3RydWN0IGZibmljX2RldiAqZmJkKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMTMKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgZmJuaWMgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyIOKAkyBNZXRhJiMzOTtzIE5JQyBkcml2ZXIsIGlmIEkgcmVjYWxsIGNvcnJlY3RseS4gSXQgc2VlbXMgbGlrZSB3ZSYjMzk7cmUgYWRkaW5nIGhhcmR3YXJlIG1vbml0b3JpbmcgY2FwYWJpbGl0aWVzOiB0ZW1wZXJhdHVyZSwgdm9sdGFnZSwgcmVhZGluZyB0aHJlc2hvbGRzIGZyb20gZmlybXdhcmUsIGFuZCBoYW5kbGluZyB0aG9zZSB0aHJlc2hvbGQtZXhjZWVkZWQgZXZlbnRzLiBBIGdvb2Qgc3RlcCwgZ2VuZXJhbGx5LgoKTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/JiMzNDsuIE5JQyBkcml2ZXJzLCBlc3BlY2lhbGx5IHNwZWNpYWxpemVkIG9uZXMgbGlrZSB0aGlzLCBvZnRlbiBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBgZmJuaWNgIGlzIHByb2JhYmx5IHRoZSBzYW1lIHVubGVzcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRvciBvciBzb21lIG90aGVyIHZpcnR1YWxpemF0aW9uIHN1cHBvcnQuIFN0YW5kYXJkIFFFTVUgZW11bGF0aW9uIG9mIHZlbmRvci1zcGVjaWZpYyBOSUNzPyBOb3QgbGlrZWx5LCBiYXNlZCBvbiBwYXN0IGV4cGVyaWVuY2UuIEl0JiMzOTtzIHVzdWFsbHkgYSBuby1nbyBmb3IgdGhlc2UgdHlwZXMgb2YgbmV0d29yayBkZXZpY2VzLgoKV2FpdCBhIHNlY29uZCwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpY2FsbHk6ICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZi4uLiYjMzQ7IGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzICYjMzQ7Li4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OyBUaGF0JiMzOTtzIHRoZSBrZXkuCgpMZXQgbWUgdGFrZSBhIHF1aWNrIGxvb2sgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcy4gVGhhdCB3aWxsIGNvbmZpcm0gd2hhdCB0aGlzIGRyaXZlciBhY3R1YWxseSBpcyBhbmQgaWYgaXQgZmFsbHMgaW50byB0aGF0IGNhdGVnb3J5LiBJZiBpdCBpcyBhIFNtYXJ0TklDLCBvciBzaW1pbGFyIHR5cGUgb2YgdmVuZG9yLXNwZWNpZmljIGRldmljZSwgdGhlbiBpdCYjMzk7cyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG91dHNpZGUgdGhlIHJlYWxtIG9mIHdoYXQgd2UgY2FuIGVhc2lseSBlbXVsYXRlLCBhbmQgdGhhdCAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7IGZsYWcgd291bGQgYmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgbG9va2luZyBsaWtlIGl0IG1pZ2h0IGJlIGEgcXVpY2sgJiMzNDtubyYjMzQ7IGJhc2VkIG9uIHRoYXQgaW5zdHJ1Y3Rpb24gYW5kIG15IGV4cGVyaWVuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtmYm5pYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2NDcKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKk5hdmlnYXRpbmcgdGhlIEtjb25maWcgTGFieXJpbnRoKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaWd1cmUgc29tZXRoaW5nIG91dCByZWxhdGVkIHRvIG5ldHdvcmtpbmcgZHJpdmVycywgc3BlY2lmaWNhbGx5IEV0aGVybmV0LiBJIGtub3cgdGhhdCBLY29uZmlnIGZpbGVzIGFyZSB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG5ldHdvcmtpbmcgc3VidHJlZS4gJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldCYjMzQ7IGZlZWxzIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBzdGFydGluZyBwb2ludCBmb3IgRXRoZXJuZXQtc3BlY2lmaWMgY29uZmlndXJhdGlvbnMuIEFuZCB3aXRoaW4gdGhhdCwgJiMzNDttZXRhJiMzNDsgb2Z0ZW4gY29udGFpbnMgZ2VuZXJpYyBvciBoaWdoLWxldmVsIGRlZmluaXRpb25zLCBvciBldmVuIGp1c3QgaGVscGVyIGRlZmluaXRpb25zIGZvciB0aGUgYXJjaGl0ZWN0dXJlLCBzbyBJJiMzOTtsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnYC4gSG9wZWZ1bGx5LCB0aGUgbWV0YSBLY29uZmlnIHdpbGwgZ2l2ZSBtZSB0aGUgYnJvYWQgc3Ryb2tlcywgb3IgcG9pbnQgbWUgaW4gdGhlIHJpZ2h0IGRpcmVjdGlvbiB0byB0aGUgKmFjdHVhbCogb3B0aW9ucyBJIG5lZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmJuaWMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnPTIwPWNvbmZpZyBGQk5JQ1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZy0zNS1cdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS4gVGhlIG1vZHVsZVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjM2Olx0ICB3aWxsIGJlIGNhbGxlZCBmYm5pYy4gIE1TSS1YIGludGVycnVwdCBzdXBwb3J0IGlzIHJlcXVpcmVkLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnLTM3LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg3CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKioKCk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBuZXR3b3JrIGRyaXZlciBjb25maWd1cmF0aW9uLCBhbmQgdGhlIEtjb25maWcgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSYjMzk7dmUgZ290IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgaGlnaGVyLWxldmVsIEV0aGVybmV0IHNldHRpbmdzLCB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IG9yY2hlc3RyYXRlIG9yIGFmZmVjdCBzZXZlcmFsIGxvd2VyLWxldmVsIGRyaXZlcnMuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgb3B0aW9ucyBkZWZpbmluZyB0aGUgb3ZlcmFsbCBFdGhlcm5ldCBzdWJzeXN0ZW0gZmVhdHVyZXMsIG1heWJlIHNvbWUgZ2xvYmFsIHBhcmFtZXRlcnMgdGhhdCBhcHBseSBhY3Jvc3MgZGlmZmVyZW50IGRyaXZlciBpbXBsZW1lbnRhdGlvbnMsIG9yIHBlcmhhcHMgc2VsZWN0aW9uIHN0YXRlbWVudHMgdG8gdHVybiBvbiBvciBvZmYgbWFqb3IgZHJpdmVyIGdyb3Vwcy4gSXQmIzM5O3MgYWxzbyBwb3NzaWJsZSB0aGlzIGZpbGUganVzdCBpbXBvcnRzIG90aGVyIEtjb25maWcgZmlsZXMgdGhhdCBhcmUgbW9yZSBzcGVjaWZpYyB0byBjZXJ0YWluIGRyaXZlciBmYW1pbGllcy4gTXkgZ29hbCBpcyB0byBxdWlja2x5IGdyYXNwIHRoZSBsb2dpY2FsIHN0cnVjdHVyZSBvZiB0aGVzZSBjb25maWd1cmF0aW9ucywgdG8gdW5kZXJzdGFuZCBob3cgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYW5kIGhvdyBkZXBlbmRlbmNpZXMgYXJlIGhhbmRsZWQuIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEV0aGVybmV0IGFyY2hpdGVjdHVyZS4gTGV0JiMzOTtzIHN0YXJ0IHJlYWRpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHQjXG4gICAzOlx0IyBNZXRhIFBsYXRmb3JtcyBuZXR3b3JrIGRldmljZSBjb25maWd1cmF0aW9uXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBORVRfVkVORE9SX01FVEFcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRoZWxwXG4gIDEwOlx0XHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXG4gIDExOlx0XHQgIFRoYXQmIzM5O3MgTWV0YSBhcyBpbiB0aGUgcGFyZW50IGNvbXBhbnkgb2YgRmFjZWJvb2suXG4gIDEyOlx0XG4gIDEzOlx0XHQgIE5vdGUgdGhhdCB0aGUgYW5zd2VyIHRvIHRoaXMgcXVlc3Rpb24gZG9lc24mIzM5O3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxuICAxNDpcdFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXG4gIDE1Olx0XHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcbiAgMTY6XHRcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxuICAxNzpcdFxuICAxODpcdGlmIE5FVF9WRU5ET1JfTUVUQVxuICAxOTpcdFxuICAyMDpcdGNvbmZpZyBGQk5JQ1xuICAyMTpcdFx0dHJpc3RhdGUgXCYjMzQ7TWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVwmIzM0O1xuICAyMjpcdFx0ZGVwZW5kcyBvbiA2NEJJVCB8fCBDT01QSUxFX1RFU1RcbiAgMjM6XHRcdGRlcGVuZHMgb24gIVMzOTBcbiAgMjQ6XHRcdGRlcGVuZHMgb24gTUFYX1NLQl9GUkFHUyBcdTAwM2MgMjJcbiAgMjU6XHRcdGRlcGVuZHMgb24gUENJX01TSVxuICAyNjpcdFx0ZGVwZW5kcyBvbiBQVFBfMTU4OF9DTE9DS19PUFRJT05BTFxuICAyNzpcdFx0c2VsZWN0IE5FVF9ERVZMSU5LXG4gIDI4Olx0XHRzZWxlY3QgUEFHRV9QT09MXG4gIDI5Olx0XHRzZWxlY3QgUENTX1hQQ1NcbiAgMzA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDMxOlx0XHRzZWxlY3QgUExETUZXXG4gIDMyOlx0XHRoZWxwXG4gIDMzOlx0XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UuXG4gIDM0Olx0XG4gIDM1Olx0XHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuIFRoZSBtb2R1bGVcbiAgMzY6XHRcdCAgd2lsbCBiZSBjYWxsZWQgZmJuaWMuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZC5cbiAgMzc6XHRcbiAgMzg6XHRlbmRpZiAjIE5FVF9WRU5ET1JfTUVUQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzc5CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiBgZmJuaWNgIGFuZCBRRU1VIENvbXBhdGliaWxpdHkqKgoKT2theSwgc28gYGZibmljYCwgdGhhdCYjMzk7cyB0aGUgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSDigJMgdGhlaXIgY3VzdG9tIFNtYXJ0TklDLCBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIGNhcmQuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGRvZXMgUUVNVSwgdGhlIHN0YW5kYXJkIGltcGxlbWVudGF0aW9uLCBlbXVsYXRlIGl0PyBBbmQgdGhlIGFuc3dlciBpcyBhIGZpcm0gbm8uIFRoaXMgbWVhbnMgdGhhdCBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCB0aGlzIGRyaXZlciwgSSYjMzk7bSBnb2luZyB0byBuZWVkIHRoZSBhY3R1YWwgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkczsgc3RhbmRhcmQgUUVNVSB3b24mIzM5O3QgY3V0IGl0LiBUaGlzIGlzIGEgYml0IG9mIGEgcm9hZGJsb2NrLgoKR2l2ZW4gdGhhdCBkZXBlbmRlbmN5IG9uIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGUgaW5hYmlsaXR5IHRvIHRlc3QgaXQgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudCwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCYjMzk7cyBqdXN0IG5vdCBwcmFjdGljYWwgb3IgZWZmaWNpZW50IHRvIHRyeSBmdXp6aW5nIHRoaXMgd2l0aG91dCBhY2Nlc3MgdG8gdGhlIGFjdHVhbCBjYXJkcy4KCkJlZm9yZSBJIGxvY2sgdGhhdCBpbiwgdGhvdWdoLCBsZXQgbWUganVzdCBxdWlja2x5IGRvdWJsZS1jaGVjayDigJMgSSYjMzk7bGwgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYW55IG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZmJuaWNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQmIzM5O3MgcmFyZSwgYnV0IHNvbWV0aW1lcyB0aGVyZSBhcmUgaGlkZGVuIGdlbXMuIEkgd2FudCB0byBydWxlIG91dCB0aGUgcG9zc2liaWxpdHkgdGhhdCAqc29tZSogZW11bGF0aW9uLCBldmVuIGlmIGxpbWl0ZWQsIGV4aXN0cy4gQnV0IEkgYW0gYWxtb3N0IGNlcnRhaW4gaXQgaXMgbm90IGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZibmljX3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz0yMTQ9c3RhdGljIHZvaWQgZmJuaWNfc2VydmljZV90YXNrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI0OC0vKipcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MjQ5OiAqIGZibmljX3Byb2JlIC0gRGV2aWNlIEluaXRpYWxpemF0aW9uIFJvdXRpbmVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjUwLSAqIEBwZGV2OiBQQ0kgZGV2aWNlIGluZm9ybWF0aW9uIHN0cnVjdFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtMjU4LSAqKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6MjU5OnN0YXRpYyBpbnQgZmJuaWNfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI2MC17XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYz02MjY9c3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGZibmljX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTYyOC1cdC5pZF90YWJsZVx0PSBmYm5pY19wY2lfdGJsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzo2Mjk6XHQucHJvYmVcdFx0PSBmYm5pY19wcm9iZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmMtNjMwLVx0LnJlbW92ZVx0XHQ9IGZibmljX3JlbW92ZSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMjI6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI1NzAKCQkJCQkJCW91dHB1dDogODMKCQkJCQkJCXRob3VnaHRzOiAxMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgUENJIERyaXZlcioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIGNvZGUsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBhIHN0YW5kYXJkIFBDSSBkcml2ZXIgc2V0dXAuIE5vdGhpbmcgcGFydGljdWxhcmx5IGdyb3VuZGJyZWFraW5nIHRoZXJlLiBUaGUgYGZibmljX3BjaV90YmxgIHRhYmxlIGlkZW50aWZpZXMgdGhlIGRldmljZSBieSBpdHMgdmVuZG9yIGFuZCBkZXZpY2UgSUQg4oCTIGEgYE1FVEFgIHZlbmRvciBJRCBhbmQgYSBzcGVjaWZpYyBgUENJX0RFVklDRV9JRF9NRVRBX0ZCTklDYCBkZXZpY2UgSUQuCgpUaGUgaW1tZWRpYXRlIHRha2Vhd2F5IGhlcmUsIGhvd2V2ZXIsIGlzIHRoYXQgdGhpcyBkZXZpY2UgaXNuJiMzOTt0IHNvbWV0aGluZyB0aGF0JiMzOTtzIGxpa2VseSBlbXVsYXRlZCBpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdmVuZG9yLXNwZWNpZmljLCB3aGljaCBtZWFucyBpdCBwcm9iYWJseSBuZWVkcyBhY3R1YWwgaGFyZHdhcmUgdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBUaGlzIGluc3RhbnRseSBydWxlcyBvdXQgc3RhbmRhcmQgZnV6emluZyB0ZWNobmlxdWVzIHVzaW5nIHNvbWV0aGluZyBsaWtlIHN5emthbGxlciBpbiBhIHZpcnR1YWwgbWFjaGluZS4KClRoZXJlZm9yZSwgZm9yIG15IGFzc2Vzc21lbnQsIEkmIzM5O20gZ29pbmcgdG8gc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBUaGUgcmF0aW9uYWxlIGlzIHNpbXBsZTogdGhpcyBkcml2ZXIgY29udHJvbHMgYSBQQ0llIE5JQyB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIGhhcmR3YXJlIGZvciBpbnRlcmFjdGlvbi4gQW55IGZ1enppbmcgYXR0ZW1wdHMgaW4gYSB2aXJ0dWFsIGVudmlyb25tZW50IGFyZSBnb2luZyB0byBiZSBhIHdhc3RlIG9mIHRpbWUsIGFzIHRoZSBkZXZpY2Ugd29uJiMzOTt0IGJlIGFjY2Vzc2libGUsIGFuZCB0aGUgZnV6emVyIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjb250ZXh0LiBJJiMzOTttIGdvaW5nIHRvIG1hcmsgdGhpcyBhcyBhICYjMzQ7cmVxdWlyZSBoYXJkd2FyZSYjMzQ7IHVzZSBjYXNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAyMjo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDIyOjU0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1Mzo1OC4yMzA5ODE5ODlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzYxMzI0NDI4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjUzOjU4LjIzMDk4NzU2OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyNzUxNjc3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDM3NDE4YmE1ODc3Yzk0MzA5NGNmMDlkZjk0YzYxZjAwZjMyYzQ2MmRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjI6NTM6NTYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pYy5oXFxuaW5kZXggZDA3MTU2OTVjNDNlNy4uNGE0OWMyMGU0YTAxNCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcXG5AQCAtMjIsMTEgKzIyLDE4IEBAIHN0cnVjdCBmYm5pY19uYXBpX3ZlY3RvcjtcXG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXFx0XFx0MTI4dVxcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXFx0XFx0NFxcbiBcXG4rc3RydWN0IGZibmljX2h3bW9uX2NhY2hlIHtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XFxuK1xcdHMzMiB0ZW1wX21kZWc7XFxuK1xcdHMzMiB2b2x0X212O1xcbit9O1xcbitcXG4gc3RydWN0IGZibmljX2RldiB7XFxuIFxcdHN0cnVjdCBkZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldjtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGJnX2ZiZDtcXG4gXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHN0cnVjdCBmYm5pY19od21vbl9jYWNoZSBod21vbl9jYWNoZTtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpmd19yZXBvcnRlcjtcXG4gXFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XFxuIFxcbkBAIC0xODUsNiArMTkyLDcgQEAgdm9pZCBmYm5pY19md19mcmVlX21ieChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiB2b2lkIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcXG4gXFxuIGludCBmYm5pY19tYWNfcmVxdWVzdF9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19mdy5jXFxuaW5kZXggMjgzZDI1ZmFlNzllNy4uNmRjYTM4MDc2ZDdiOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcXG5AQCAtNTc1LDYgKzU3NSwxMSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY19md19jYXBfcmVzcF9pbmRleFtdID0ge1xcbiBcXHRGQk5JQ19UTFZfQVRUUl9TVFJJTkcoRkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSLFxcbiBcXHRcXHRcXHQgICAgICBGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkUpLFxcbiBcXHRGQk5JQ19UTFZfQVRUUl9VMzIoRkJOSUNfRldfQ0FQX1JFU1BfQU5USV9ST0xMQkFDS19WRVJTSU9OKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWCksXFxuIFxcdEZCTklDX1RMVl9BVFRSX0xBU1RcXG4gfTtcXG4gXFxuQEAgLTcwMiw2ICs3MDcsMjIgQEAgc3RhdGljIGludCBmYm5pY19md19wYXJzZV9jYXBfcmVzcCh2b2lkICpvcGFxdWUsIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcXG4gXFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xcbiBcXHRmYmQtXFx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XFxuIFxcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01JTl0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1heCA9XFxuK1xcdFxcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWF0sXFxuK1xcdFxcdFxcdFxcdFxcdCAgRkJOSUNfU0VOU09SX05PX0RBVEEpO1xcbitcXHRmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQgPVxcbitcXHRcXHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcdGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWF4ID1cXG4rXFx0XFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUFYXSxcXG4rXFx0XFx0XFx0XFx0XFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTYxOCw2ICsxNjM5LDU3IEBAIGZibmljX2Z3X3BhcnNlcl90ZXN0KHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUX0VYQ0VFREVEX0ZMQUcpLFxcbitcXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXFxuK1xcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19UU0VORV9WT0xUQUdFKSxcXG4rXFx0RkJOSUNfVExWX0FUVFJfTEFTVFxcbit9O1xcbitcXG4rc3RhdGljIGludCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCh2b2lkICpvcGFxdWUsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxcbit7XFxuK1xcdGJvb2wgdGhlcm1fZXhjZWVkZWQsIHZvbHRfZXhjZWVkZWQ7XFxuK1xcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IG9wYXF1ZTtcXG4rXFx0czMyIHZhbHVlO1xcbitcXG4rXFx0dGhlcm1fZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XFxuK1xcdHZvbHRfZXhjZWVkZWQgPVxcbitcXHRcXHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHKTtcXG4rXFxuK1xcdGlmICghdGhlcm1fZXhjZWVkZWQgXFx1MDAyNlxcdTAwMjYgIXZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIlRocmVzaG9sZCBleGNlZWRlZCBtZXNzYWdlIHdpdGggbm8gZmxhZyBzZXRcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHRoZXJtX2V4Y2VlZGVkKSB7XFxuK1xcdFxcdGlmICghcmVzdWx0c1tGQk5JQ19GV19UU0VORV9USEVSTUFMXSkge1xcbitcXHRcXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiVGhlcm1hbCB0aHJlc2hvbGQgZXhjZWVkZWQgYnV0IG5vIHZhbHVlIHJlY2VpdmVkXFxcXG5cXFwiKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdH1cXG4rXFx0XFx0dmFsdWUgPSBmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1BTCk7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaGVybWFsIHRocmVzaG9sZCBleGNlZWRlZDogJWQgbUNcXFxcblxcXCIsIHZhbHVlKTtcXG4rXFx0XFx0ZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbHVlKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHZvbHRfZXhjZWVkZWQpIHtcXG4rXFx0XFx0aWYgKCFyZXN1bHRzW0ZCTklDX0ZXX1RTRU5FX1ZPTFRBR0VdKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJWb2x0YWdlIHRocmVzaG9sZCBleGNlZWRlZCBidXQgbm8gdmFsdWUgcmVjZWl2ZWRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHRcXHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldiwgXFxcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcXFxuXFxcIiwgdmFsdWUpO1xcbitcXHRcXHRmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsdWUpO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihURVNULCBmYm5pY190bHZfdGVzdF9pbmRleCwgZmJuaWNfZndfcGFyc2VyX3Rlc3QpLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKEZXX0NBUF9SRVNQLCBmYm5pY19md19jYXBfcmVzcF9pbmRleCxcXG5AQCAtMTY0Niw2ICsxNzE4LDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcXG4gXFx0RkJOSUNfVExWX1BBUlNFUihUU0VORV9SRUFEX1JFU1AsXFxuIFxcdFxcdFxcdCBmYm5pY190c2VuZV9yZWFkX3Jlc3BfaW5kZXgsXFxuIFxcdFxcdFxcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxcbitcXHRGQk5JQ19UTFZfUEFSU0VSKFNFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCxcXG4rXFx0XFx0XFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxcbitcXHRcXHRcXHQgZmJuaWNfZndfcGFyc2VfdGhyZXNob2xkX2V4Y2VlZGVkX3Jlc3ApLFxcbiBcXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxcbiBcXHRcXHRcXHQgZmJuaWNfZndfbG9nX3JlcV9pbmRleCxcXG4gXFx0XFx0XFx0IGZibmljX2Z3X3BhcnNlX2xvZ19yZXEpLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcXG5pbmRleCBkODQ3MjNlNGNmYTM2Li44NzMwMWU2MDgyNTU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxcbkBAIC02LDYgKzYsNyBAQFxcbiBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBsZXRpb24uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuIFxcbiBzdHJ1Y3QgZmJuaWNfZGV2O1xcbkBAIC00NCw2ICs0NSwxOCBAQCBzdHJ1Y3QgZmJuaWNfZndfdmVyIHtcXG4gXFx0Y2hhciBjb21taXRbRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFXTtcXG4gfTtcXG4gXFxuKy8qIFNlbnRpbmVsIGZvciBhIHNlbnNvciB2YWx1ZSB0aGUgZHJpdmVyIGRvZXMgbm90IGhhdmU6IGEgdGhyZXNob2xkIHRoZVxcbisgKiBmaXJtd2FyZSBuZXZlciBwb3B1bGF0ZWQgKG9sZGVyIGZpcm13YXJlKSBvciBhIGNhY2hlIGVudHJ5IG5vdCB5ZXRcXG4rICogcmVmcmVzaGVkLlxcbisgKi9cXG4rI2RlZmluZSBGQk5JQ19TRU5TT1JfTk9fREFUQVxcdFxcdFxcdFMzMl9NSU5cXG4rXFxuK3N0cnVjdCBmYm5pY190aHJlc2hvbGQge1xcbitcXHRzMzIgbWluO1xcbitcXHRzMzIgbWF4O1xcbitcXHRzMzIgY3JpdDtcXG4rfTtcXG4rXFxuIHN0cnVjdCBmYm5pY19md19jYXAge1xcbiBcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XFxuQEAgLTYwLDYgKzczLDggQEAgc3RydWN0IGZibmljX2Z3X2NhcCB7XFxuIFxcdHU4XFx0bGlua19zcGVlZDtcXG4gXFx0dThcXHRsaW5rX2ZlYztcXG4gXFx0dTMyXFx0YW50aV9yb2xsYmFja192ZXJzaW9uO1xcbitcXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XFxuK1xcdHN0cnVjdCBmYm5pY190aHJlc2hvbGQgdm9sdDtcXG4gfTtcXG4gXFxuIHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uIHtcXG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1FTRlBfUkVBRF9SRVNQXFx0XFx0XFx0PSAweDM5LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVRXFx0XFx0XFx0PSAweDNDLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFxcdFxcdD0gMHgzRCxcXG4rXFx0RkJOSUNfVExWX01TR19JRF9TRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AgPSAweDQwLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXFx0XFx0PSAweDQzLFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVRXFx0XFx0XFx0PSAweDQ0LFxcbiBcXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFxcdFxcdFxcdD0gMHg0NSxcXG5AQCAtMjQyLDYgKzI1OCwxMiBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXFx0XFx0XFx0PSAweDExLFxcbiBcXHRGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFJcXHRcXHQ9IDB4MTIsXFxuIFxcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlxcdFxcdD0gMHgxNSxcXG4rXFx0LyogMHgxNiBhbmQgMHgxNyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cXHRcXHRcXHQ9IDB4MTgsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXFx0XFx0XFx0PSAweDE5LFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRcXHRcXHRcXHQ9IDB4MWEsXFxuK1xcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXFx0XFx0XFx0PSAweDFiLFxcbitcXHRGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01BWFxcdFxcdFxcdD0gMHgxYyxcXG4gXFx0RkJOSUNfRldfQ0FQX1JFU1BfTVNHX01BWFxcbiB9O1xcbiBcXG5AQCAtMjc1LDYgKzI5NywxNCBAQCBlbnVtIHtcXG4gXFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxcbiB9O1xcbiBcXG4rZW51bSB7XFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUdcXHQ9IDB4MCxcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVF9FWENFRURFRF9GTEFHXFx0PSAweDEsXFxuK1xcdEZCTklDX0ZXX1RTRU5FX1RIRVJNQUxcXHRcXHRcXHQ9IDB4MixcXG4rXFx0RkJOSUNfRldfVFNFTkVfVk9MVEFHRVxcdFxcdFxcdD0gMHgzLFxcbitcXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxcbit9O1xcbitcXG4gZW51bSB7XFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9GTEFHXFx0XFx0XFx0PSAweDAsXFxuIFxcdEZCTklDX0ZXX09XTkVSU0hJUF9USU1FXFx0XFx0XFx0PSAweDEsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19od21vbi5jXFxuQEAgLTIsNDEgKzIsMTg0IEBAXFxuIC8qIENvcHlyaWdodCAoYykgTWV0YSBQbGF0Zm9ybXMsIEluYy4gYW5kIGFmZmlsaWF0ZXMuICovXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaHdtb24uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ppZmZpZXMuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJmYm5pYy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiZmJuaWNfbWFjLmhcXFwiXFxuIFxcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxcbitzdGF0aWMgdW1vZGVfdCBmYm5pY19od21vbl9pc192aXNpYmxlKGNvbnN0IHZvaWQgKmRydmRhdGEsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1RFTVA7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luKVxcbi1cXHRcXHRyZXR1cm4gRkJOSUNfU0VOU09SX1ZPTFRBR0U7XFxuK1xcdHJldHVybiAwNDQ0O1xcbit9XFxuIFxcbi1cXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgKnZhbClcXG4re1xcbitcXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgKmNhY2hlID0gXFx1MDAyNmZiZC1cXHUwMDNlaHdtb25fY2FjaGU7XFxuK1xcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbitcXHRpbnQgZXJyID0gMDtcXG4rXFx0czMyICpjYWNoZWQ7XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdGNhY2hlZCA9IFxcdTAwMjZjYWNoZS1cXHUwMDNldGVtcF9tZGVnO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcXG4rXFx0XFx0Y2FjaGVkID0gXFx1MDAyNmNhY2hlLVxcdTAwM2V2b2x0X212O1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICgqY2FjaGVkICE9IEZCTklDX1NFTlNPUl9OT19EQVRBIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICB0aW1lX2lzX2FmdGVyX2VxX2ppZmZpZXMoY2FjaGUtXFx1MDAzZWxhc3RfcmVhZCkpIHtcXG4rXFx0XFx0KnZhbCA9ICpjYWNoZWQ7XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHR9XFxuK1xcbitcXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuK1xcdGlmICghZndfY21wbClcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0ZGV2X2VycihmYmQtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmZ3X2NtcGwtXFx1MDAzZWRvbmUsIDEwICogSFopKSB7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcXFxuXFxcIik7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gZXhpdF9jbGVhbnVwO1xcbitcXHR9XFxuK1xcbitcXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cXG4rXFx0aWYgKGZ3X2NtcGwtXFx1MDAzZXJlc3VsdCkge1xcbitcXHRcXHRlcnIgPSBmd19jbXBsLVxcdTAwM2VyZXN1bHQ7XFxuK1xcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsIFxcXCIlczogRmlybXdhcmUgcmV0dXJuZWQgZXJyb3IgJWRcXFxcblxcXCIsXFxuK1xcdFxcdFxcdF9fZnVuY19fLCBlcnIpO1xcbitcXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4rXFx0fVxcbitcXG4rXFx0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cXG4rXFx0Y2FjaGUtXFx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGlkZWdyZWVzO1xcbitcXHRjYWNoZS1cXHUwMDNldm9sdF9tdiA9IGZ3X2NtcGwtXFx1MDAzZXUudHNlbmUubWlsbGl2b2x0cztcXG4rXFx0Y2FjaGUtXFx1MDAzZWxhc3RfcmVhZCA9IGppZmZpZXM7XFxuK1xcbitcXHQqdmFsID0gKmNhY2hlZDtcXG4rZXhpdF9jbGVhbnVwOlxcbitcXHRmYm5pY19tYnhfY2xlYXJfY21wbChmYmQsIGZ3X2NtcGwpO1xcbitleGl0X2ZyZWU6XFxuK1xcdGZibmljX2Z3X3B1dF9jbXBsKGZ3X2NtcGwpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIHVtb2RlX3QgZmJuaWNfaHdtb25faXNfdmlzaWJsZShjb25zdCB2b2lkICpkcnZkYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgICBlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlLFxcbi1cXHRcXHRcXHRcXHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQobG9uZyB0aHIsIGxvbmcgKnZhbClcXG4ge1xcbi1cXHRpZiAodHlwZSA9PSBod21vbl90ZW1wIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcXG4tXFx0XFx0cmV0dXJuIDA0NDQ7XFxuLVxcdGlmICh0eXBlID09IGh3bW9uX2luIFxcdTAwMjZcXHUwMDI2IGF0dHIgPT0gaHdtb25faW5faW5wdXQpXFxuLVxcdFxcdHJldHVybiAwNDQ0O1xcbitcXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RBVEE7XFxuIFxcbitcXHQqdmFsID0gdGhyO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX2FsYXJtKGxvbmcgYSwgbG9uZyBiLCBsb25nICp2YWwpXFxuK3tcXG4rXFx0aWYgKGEgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEgfHwgYiA9PSBGQk5JQ19TRU5TT1JfTk9fREFUQSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9EQVRBO1xcbitcXG4rXFx0KnZhbCA9IGEgXFx1MDAzZT0gYjtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fdGVtcF9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9taW46XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAubWF4LCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdDpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cXHUwMDNlZndfY2FwLnRlbXAuY3JpdCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX2lucHV0OlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWF4X2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVEVNUCwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybShmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF9hbGFybSgqdmFsLCBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBmYm5pY19od21vbl9pbl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgdTMyIGF0dHIsIGxvbmcgKnZhbClcXG4re1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3dpdGNoIChhdHRyKSB7XFxuK1xcdGNhc2UgaHdtb25faW5fbWluOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5taW4sIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5fbWF4OlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdGNhc2UgaHdtb25faW5faW5wdXQ6XFxuK1xcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGRlZmF1bHQ6XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIGVycjtcXG4rXFxuK1xcdHN3aXRjaCAoYXR0cikge1xcbitcXHRjYXNlIGh3bW9uX2luX2lucHV0OlxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XFxuK1xcdFxcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluLCAqdmFsLCB2YWwpO1xcbitcXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgsIHZhbCk7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rfVxcbitcXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcXG4gXFx0XFx0XFx0ICAgIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwgbG9uZyAqdmFsKVxcbiB7XFxuIFxcdHN0cnVjdCBmYm5pY19kZXYgKmZiZCA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpO1xcbi1cXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXFx1MDAzZW1hYztcXG4tXFx0aW50IGlkO1xcbiBcXG4tXFx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XFxuLVxcdHJldHVybiBpZCBcXHUwMDNjIDAgPyBpZCA6IG1hYy1cXHUwMDNlZ2V0X3NlbnNvcihmYmQsIGlkLCB2YWwpO1xcbitcXHRzd2l0Y2ggKHR5cGUpIHtcXG4rXFx0Y2FzZSBod21vbl90ZW1wOlxcbitcXHRcXHRyZXR1cm4gZmJuaWNfaHdtb25fdGVtcF9yZWFkKGZiZCwgYXR0ciwgdmFsKTtcXG4rXFx0Y2FzZSBod21vbl9pbjpcXG4rXFx0XFx0cmV0dXJuIGZibmljX2h3bW9uX2luX3JlYWQoZmJkLCBhdHRyLCB2YWwpO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcdH1cXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xcbiB9O1xcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcXG4tXFx0SFdNT05fQ0hBTk5FTF9JTkZPKHRlbXAsIEhXTU9OX1RfSU5QVVQpLFxcbi1cXHRIV01PTl9DSEFOTkVMX0lORk8oaW4sIEhXTU9OX0lfSU5QVVQpLFxcbitcXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9JTlBVVCB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX1RfTUlOIHwgSFdNT05fVF9NSU5fQUxBUk0gfFxcbitcXHRcXHRcXHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fVF9DUklUIHwgSFdNT05fVF9DUklUX0FMQVJNKSxcXG4rXFx0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxcbitcXHRcXHRcXHQgICBIV01PTl9JX0lOUFVUIHxcXG4rXFx0XFx0XFx0ICAgSFdNT05fSV9NSU4gfCBIV01PTl9JX01JTl9BTEFSTSB8XFxuK1xcdFxcdFxcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxcbiBcXHROVUxMXFxuIH07XFxuIFxcbkBAIC01NywyNSArMjA3LDg0IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGZibmljX2NoaXBfaW5mbyA9IHtcXG4gXFxuIHZvaWQgZmJuaWNfaHdtb25fcmVnaXN0ZXIoc3RydWN0IGZibmljX2RldiAqZmJkKVxcbiB7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmh3bW9uO1xcbitcXG4gXFx0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0ZmJkLVxcdTAwM2Vod21vbiA9IGh3bW9uX2RldmljZV9yZWdpc3Rlcl93aXRoX2luZm8oZmJkLVxcdTAwM2VkZXYsIFxcXCJmYm5pY1xcXCIsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmJkLCBcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIE5VTEwpO1xcbi1cXHRpZiAoSVNfRVJSKGZiZC1cXHUwMDNlaHdtb24pKSB7XFxuK1xcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xcbitcXHRmYmQtXFx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcXG4rXFxuK1xcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXFx1MDAzZWRldiwgXFxcImZibmljXFxcIiwgZmJkLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLCBOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihod21vbikpIHtcXG4gXFx0XFx0ZGV2X25vdGljZShmYmQtXFx1MDAzZWRldixcXG4gXFx0XFx0XFx0ICAgXFxcIkZhaWxlZCB0byByZWdpc3RlciBod21vbiBkZXZpY2UgJXBlXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHQgICBmYmQtXFx1MDAzZWh3bW9uKTtcXG4tXFx0XFx0ZmJkLVxcdTAwM2Vod21vbiA9IE5VTEw7XFxuK1xcdFxcdFxcdCAgIGh3bW9uKTtcXG4rXFx0XFx0cmV0dXJuO1xcbiBcXHR9XFxuK1xcbitcXHRXUklURV9PTkNFKGZiZC1cXHUwMDNlaHdtb24sIGh3bW9uKTtcXG4gfVxcbiBcXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcXG4ge1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcXG4rXFxuIFxcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cXHUwMDNlaHdtb24pXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGZiZC1cXHUwMDNlaHdtb24pO1xcbi1cXHRmYmQtXFx1MDAzZWh3bW9uID0gTlVMTDtcXG4rXFx0aHdtb24gPSBmYmQtXFx1MDAzZWh3bW9uO1xcbitcXHQvKiBQYWlyIHdpdGggUkVBRF9PTkNFKCkgaW4gZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KCkuIFB1Ymxpc2ggTlVMTFxcbitcXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxcbitcXHQgKiBjYW5ub3QgZGVyZWZlcmVuY2UgdGhlIGh3bW9uIGRldmljZSBhZnRlciB3ZSB1bnJlZ2lzdGVyIGl0LlxcbitcXHQgKi9cXG4rXFx0V1JJVEVfT05DRShmYmQtXFx1MDAzZWh3bW9uLCBOVUxMKTtcXG4rXFx0c3luY2hyb25pemVfaXJxKGZiZC1cXHUwMDNlZndfbXNpeF92ZWN0b3IpO1xcbitcXG4rXFx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoaHdtb24pO1xcbit9XFxuK1xcbit2b2lkIGZibmljX2h3bW9uX25vdGlmeV9ldmVudChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyB2YWwpXFxuK3tcXG4rXFx0ZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZTtcXG4rXFx0c3RydWN0IGRldmljZSAqaHdtb247XFxuK1xcdHMzMiBhdHRyID0gLTE7XFxuK1xcbitcXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRzd2l0Y2ggKGlkKSB7XFxuK1xcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuK1xcdFxcdHR5cGUgPSBod21vbl90ZW1wO1xcbitcXG4rXFx0XFx0aWYgKHZhbCBcXHUwMDNjPSBmYmQtXFx1MDAzZWZ3X2NhcC50ZW1wLm1pbilcXG4rXFx0XFx0XFx0YXR0ciA9IGh3bW9uX3RlbXBfbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5jcml0KVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25fdGVtcF9jcml0X2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudGVtcC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl90ZW1wX21heF9hbGFybTtcXG4rXFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxcbitcXHRcXHR0eXBlID0gaHdtb25faW47XFxuK1xcbitcXHRcXHRpZiAodmFsIFxcdTAwM2M9IGZiZC1cXHUwMDNlZndfY2FwLnZvbHQubWluKVxcbitcXHRcXHRcXHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xcbitcXHRcXHRlbHNlIGlmICh2YWwgXFx1MDAzZT0gZmJkLVxcdTAwM2Vmd19jYXAudm9sdC5tYXgpXFxuK1xcdFxcdFxcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XFxuK1xcbitcXHRcXHRicmVhaztcXG4rXFx0ZGVmYXVsdDpcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQYWlyIHdpdGggV1JJVEVfT05DRSgpIGluIGZibmljX2h3bW9uX3VucmVnaXN0ZXIoKS4gU2tpcCB0aGVcXG4rXFx0ICogbm90aWZpY2F0aW9uIGlmIGh3bW9uIGZhaWxlZCB0byByZWdpc3RlciBvciBoYXMgYWxyZWFkeSBiZWVuIHRvcm5cXG4rXFx0ICogZG93bi5cXG4rXFx0ICovXFxuK1xcdGh3bW9uID0gUkVBRF9PTkNFKGZiZC1cXHUwMDNlaHdtb24pO1xcbitcXHRpZiAoYXR0ciBcXHUwMDNlPSAwIFxcdTAwMjZcXHUwMDI2IGh3bW9uKVxcbitcXHRcXHRod21vbl9ub3RpZnlfZXZlbnQoaHdtb24sIHR5cGUsIGF0dHIsIDApO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuaW5kZXggNTNiN2E5MzhiNGMyNy4uZmJhMmUyZWZhZWI4YyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xcbkBAIC04OTksNjAgKzg5OSw2IEBAIGZibmljX21hY19nZXRfcm1vbl9zdGF0cyhzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGJvb2wgcmVzZXQsXFxuIFxcdFxcdFxcdCAgICBUTUlfU1RBVF9UWF9QQUNLRVRfOTIxN19NQVhfQllURVMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbG9uZyAqdmFsKVxcbi17XFxuLVxcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xcbi1cXHRpbnQgZXJyID0gMDtcXG4tXFx0czMyICpzZW5zb3I7XFxuLVxcbi1cXHRmd19jbXBsID0gZmJuaWNfZndfYWxsb2NfY21wbChGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUCk7XFxuLVxcdGlmICghZndfY21wbClcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbi1cXHRzd2l0Y2ggKGlkKSB7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpZGVncmVlcztcXG4tXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgRkJOSUNfU0VOU09SX1ZPTFRBR0U6XFxuLVxcdFxcdHNlbnNvciA9IFxcdTAwMjZmd19jbXBsLVxcdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRkZWZhdWx0Olxcbi1cXHRcXHRlcnIgPSAtRUlOVkFMO1xcbi1cXHRcXHRnb3RvIGV4aXRfZnJlZTtcXG4tXFx0fVxcbi1cXG4tXFx0ZXJyID0gZmJuaWNfZndfeG1pdF90c2VuZV9yZWFkX21zZyhmYmQsIGZ3X2NtcGwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRldl9lcnIoZmJkLVxcdTAwM2VkZXYsXFxuLVxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdHJhbnNtaXQgVFNFTkUgcmVhZCBtc2csIGVyciAlZFxcXFxuXFxcIixcXG4tXFx0XFx0XFx0ZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2ZyZWU7XFxuLVxcdH1cXG4tXFxuLVxcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFxcdTAwMjZmd19jbXBsLVxcdTAwM2Vkb25lLCAxMCAqIEhaKSkge1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiVGltZWQgb3V0IHdhaXRpbmcgZm9yIFRTRU5FIHJlYWRcXFxcblxcXCIpO1xcbi1cXHRcXHRlcnIgPSAtRVRJTUVET1VUO1xcbi1cXHRcXHRnb3RvIGV4aXRfY2xlYW51cDtcXG4tXFx0fVxcbi1cXG4tXFx0LyogSGFuZGxlIGVycm9yIHJldHVybmVkIGJ5IGZpcm13YXJlICovXFxuLVxcdGlmIChmd19jbXBsLVxcdTAwM2VyZXN1bHQpIHtcXG4tXFx0XFx0ZXJyID0gZndfY21wbC1cXHUwMDNlcmVzdWx0O1xcbi1cXHRcXHRkZXZfZXJyKGZiZC1cXHUwMDNlZGV2LCBcXFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxcXG5cXFwiLFxcbi1cXHRcXHRcXHRfX2Z1bmNfXywgZXJyKTtcXG4tXFx0XFx0Z290byBleGl0X2NsZWFudXA7XFxuLVxcdH1cXG4tXFxuLVxcdCp2YWwgPSAqc2Vuc29yO1xcbi1leGl0X2NsZWFudXA6XFxuLVxcdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XFxuLWV4aXRfZnJlZTpcXG4tXFx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XFxuLVxcbi1cXHRyZXR1cm4gZXJyO1xcbi19XFxuLVxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcXG4gXFx0LmluaXRfcmVncyA9IGZibmljX21hY19pbml0X3JlZ3MsXFxuIFxcdC5nZXRfbGluayA9IGZibmljX21hY19nZXRfbGluayxcXG5AQCAtOTY2LDcgKzkxMiw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjIGZibmljX21hY19hc2ljID0ge1xcbiBcXHQuZ2V0X3Jtb25fc3RhdHMgPSBmYm5pY19tYWNfZ2V0X3Jtb25fc3RhdHMsXFxuIFxcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXFxuIFxcdC5saW5rX3VwID0gZmJuaWNfbWFjX2xpbmtfdXBfYXNpYyxcXG4tXFx0LmdldF9zZW5zb3IgPSBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljLFxcbiB9O1xcbiBcXG4gLyoqXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XFxuIFxcbiBcXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xcbiBcXHR2b2lkICgqbGlua191cCkoc3RydWN0IGZibmljX2RldiAqZmJkLCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKTtcXG4tXFxuLVxcdGludCAoKmdldF9zZW5zb3IpKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpO1xcbiB9O1xcbiBcXG4gaW50IGZibmljX21hY19pbml0KHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjUzOjU5LjY1OTIxOTczN1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjI2MTg0OTc0NjQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgZmJuaWMgZHJpdmVyLCB3aGljaCBpcyBhIHZlbmRvci1zcGVjaWZpYyBQQ0llIG5ldHdvcmsgaW50ZXJmYWNlIGNhcmQgKE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2UpLiBUaGlzIGhhcmR3YXJlIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIG9yIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgbWFraW5nIHRoZSBjb2RlIHVucmVhY2hhYmxlIGZvciBmdXp6aW5nIHdpdGhvdXQgcGh5c2ljYWwgaGFyZHdhcmUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAzNzQxOGJhNTg3N2M5NDMwOTRjZjA5ZGY5NGM2MWYwMGYzMmM0NjJkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMjI6NTM6NTYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbmluZGV4IGQwNzE1Njk1YzQzZTcuLjRhNDljMjBlNGEwMTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWMuaFxuQEAgLTIyLDExICsyMiwxOCBAQCBzdHJ1Y3QgZmJuaWNfbmFwaV92ZWN0b3I7XG4gI2RlZmluZSBGQk5JQ19NQVhfTkFQSV9WRUNUT1JTXHRcdDEyOHVcbiAjZGVmaW5lIEZCTklDX01CWF9DTVBMX1NMT1RTXHRcdDRcbiBcbitzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUge1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3JlYWQ7XG4rXHRzMzIgdGVtcF9tZGVnO1xuK1x0czMyIHZvbHRfbXY7XG4rfTtcbitcbiBzdHJ1Y3QgZmJuaWNfZGV2IHtcbiBcdHN0cnVjdCBkZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXY7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkYmdfZmJkO1xuIFx0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzdHJ1Y3QgZmJuaWNfaHdtb25fY2FjaGUgaHdtb25fY2FjaGU7XG4gXHRzdHJ1Y3QgZGV2bGlua19oZWFsdGhfcmVwb3J0ZXIgKmZ3X3JlcG9ydGVyO1xuIFx0c3RydWN0IGRldmxpbmtfaGVhbHRoX3JlcG9ydGVyICpvdHBfcmVwb3J0ZXI7XG4gXG5AQCAtMTg1LDYgKzE5Miw3IEBAIHZvaWQgZmJuaWNfZndfZnJlZV9tYngoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbiBcbiB2b2lkIGZibmljX2h3bW9uX3JlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4rdm9pZCBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoc3RydWN0IGZibmljX2RldiAqZmJkLCBpbnQgaWQsIGxvbmcgdmFsKTtcbiBcbiBpbnQgZmJuaWNfbWFjX3JlcXVlc3RfaXJxKHN0cnVjdCBmYm5pY19kZXYgKmZiZCk7XG4gdm9pZCBmYm5pY19tYWNfZnJlZV9pcnEoc3RydWN0IGZibmljX2RldiAqZmJkKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbmluZGV4IDI4M2QyNWZhZTc5ZTcuLjZkY2EzODA3NmQ3YjkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuY1xuQEAgLTU3NSw2ICs1NzUsMTEgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfaW5kZXggZmJuaWNfZndfY2FwX3Jlc3BfaW5kZXhbXSA9IHtcbiBcdEZCTklDX1RMVl9BVFRSX1NUUklORyhGQk5JQ19GV19DQVBfUkVTUF9VRUZJX0NPTU1JVF9TVFIsXG4gXHRcdFx0ICAgICAgRkJOSUNfRldfQ0FQX1JFU1BfQ09NTUlUX01BWF9TSVpFKSxcbiBcdEZCTklDX1RMVl9BVFRSX1UzMihGQk5JQ19GV19DQVBfUkVTUF9BTlRJX1JPTExCQUNLX1ZFUlNJT04pLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9DUklUKSxcbitcdEZCTklDX1RMVl9BVFRSX1MzMihGQk5JQ19GV19DQVBfUkVTUF9WT0xUX01JTiksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVgpLFxuIFx0RkJOSUNfVExWX0FUVFJfTEFTVFxuIH07XG4gXG5AQCAtNzAyLDYgKzcwNywyMiBAQCBzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX2NhcF9yZXNwKHZvaWQgKm9wYXF1ZSwgc3RydWN0IGZibmljX3Rsdl9tc2cgKipyZXN1bHRzKVxuIFx0LyogQWx3YXlzIGFzc3VtZSB3ZSBuZWVkIGEgQk1DIHJlaW5pdCAqL1xuIFx0ZmJkLVx1MDAzZWZ3X2NhcC5uZWVkX2JtY190Y2FtX3JlaW5pdCA9IHRydWU7XG4gXG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUlOXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAubWF4ID1cbitcdFx0ZmJuaWNfdGx2X2F0dHJfZ2V0X3NpZ25lZChyZXN1bHRzW0ZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfTUFYXSxcbitcdFx0XHRcdFx0ICBGQk5JQ19TRU5TT1JfTk9fREFUQSk7XG4rXHRmYmQtXHUwMDNlZndfY2FwLnRlbXAuY3JpdCA9XG4rXHRcdGZibmljX3Rsdl9hdHRyX2dldF9zaWduZWQocmVzdWx0c1tGQk5JQ19GV19DQVBfUkVTUF9URU1QX0NSSVRdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4gPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NSU5dLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcdGZiZC1cdTAwM2Vmd19jYXAudm9sdC5tYXggPVxuK1x0XHRmYm5pY190bHZfYXR0cl9nZXRfc2lnbmVkKHJlc3VsdHNbRkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhdLFxuK1x0XHRcdFx0XHQgIEZCTklDX1NFTlNPUl9OT19EQVRBKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0xNjE4LDYgKzE2MzksNTcgQEAgZmJuaWNfZndfcGFyc2VyX3Rlc3Qodm9pZCAqb3BhcXVlLCBzdHJ1Y3QgZmJuaWNfdGx2X21zZyAqKnJlc3VsdHMpXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbitzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX3Rsdl9pbmRleCBmYm5pY190aHJlc2hvbGRfZXhjZWVkZWRfcmVzcF9pbmRleFtdID0ge1xuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1RIRVJNX0VYQ0VFREVEX0ZMQUcpLFxuK1x0RkJOSUNfVExWX0FUVFJfUzMyKEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVEhFUk1BTCksXG4rXHRGQk5JQ19UTFZfQVRUUl9TMzIoRkJOSUNfRldfVFNFTkVfVk9MVEFHRSksXG4rXHRGQk5JQ19UTFZfQVRUUl9MQVNUXG4rfTtcbitcbitzdGF0aWMgaW50IGZibmljX2Z3X3BhcnNlX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwKHZvaWQgKm9wYXF1ZSxcbitcdFx0XHRcdFx0XHQgIHN0cnVjdCBmYm5pY190bHZfbXNnICoqcmVzdWx0cylcbit7XG4rXHRib29sIHRoZXJtX2V4Y2VlZGVkLCB2b2x0X2V4Y2VlZGVkO1xuK1x0c3RydWN0IGZibmljX2RldiAqZmJkID0gb3BhcXVlO1xuK1x0czMyIHZhbHVlO1xuK1xuK1x0dGhlcm1fZXhjZWVkZWQgPVxuK1x0XHRmdGFfZ2V0X3NpbnQocmVzdWx0cywgRkJOSUNfRldfVFNFTkVfVEhFUk1fRVhDRUVERURfRkxBRyk7XG4rXHR2b2x0X2V4Y2VlZGVkID1cbitcdFx0ZnRhX2dldF9zaW50KHJlc3VsdHMsIEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBRyk7XG4rXG4rXHRpZiAoIXRoZXJtX2V4Y2VlZGVkIFx1MDAyNlx1MDAyNiAhdm9sdF9leGNlZWRlZCkge1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XCJUaHJlc2hvbGQgZXhjZWVkZWQgbWVzc2FnZSB3aXRoIG5vIGZsYWcgc2V0XFxuXCIpO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdGlmICh0aGVybV9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVEhFUk1BTF0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9USEVSTUFMKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRoZXJtYWwgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtQ1xcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9URU1QLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRpZiAodm9sdF9leGNlZWRlZCkge1xuK1x0XHRpZiAoIXJlc3VsdHNbRkJOSUNfRldfVFNFTkVfVk9MVEFHRV0pIHtcbitcdFx0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkIGJ1dCBubyB2YWx1ZSByZWNlaXZlZFxcblwiKTtcbitcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcdFx0fVxuK1x0XHR2YWx1ZSA9IGZ0YV9nZXRfc2ludChyZXN1bHRzLCBGQk5JQ19GV19UU0VORV9WT0xUQUdFKTtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlZvbHRhZ2UgdGhyZXNob2xkIGV4Y2VlZGVkOiAlZCBtVlxcblwiLCB2YWx1ZSk7XG4rXHRcdGZibmljX2h3bW9uX25vdGlmeV9ldmVudChmYmQsIEZCTklDX1NFTlNPUl9WT0xUQUdFLCB2YWx1ZSk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBmYm5pY190bHZfcGFyc2VyIGZibmljX2Z3X3Rsdl9wYXJzZXJbXSA9IHtcbiBcdEZCTklDX1RMVl9QQVJTRVIoVEVTVCwgZmJuaWNfdGx2X3Rlc3RfaW5kZXgsIGZibmljX2Z3X3BhcnNlcl90ZXN0KSxcbiBcdEZCTklDX1RMVl9QQVJTRVIoRldfQ0FQX1JFU1AsIGZibmljX2Z3X2NhcF9yZXNwX2luZGV4LFxuQEAgLTE2NDYsNiArMTcxOCw5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZmJuaWNfdGx2X3BhcnNlciBmYm5pY19md190bHZfcGFyc2VyW10gPSB7XG4gXHRGQk5JQ19UTFZfUEFSU0VSKFRTRU5FX1JFQURfUkVTUCxcbiBcdFx0XHQgZmJuaWNfdHNlbmVfcmVhZF9yZXNwX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV90c2VuZV9yZWFkX3Jlc3ApLFxuK1x0RkJOSUNfVExWX1BBUlNFUihTRU5TT1JfVEhSRVNIT0xEX0VYQ0VFREVEX1JFU1AsXG4rXHRcdFx0IGZibmljX3RocmVzaG9sZF9leGNlZWRlZF9yZXNwX2luZGV4LFxuK1x0XHRcdCBmYm5pY19md19wYXJzZV90aHJlc2hvbGRfZXhjZWVkZWRfcmVzcCksXG4gXHRGQk5JQ19UTFZfUEFSU0VSKExPR19NU0dfUkVRLFxuIFx0XHRcdCBmYm5pY19md19sb2dfcmVxX2luZGV4LFxuIFx0XHRcdCBmYm5pY19md19wYXJzZV9sb2dfcmVxKSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbmluZGV4IGQ4NDcyM2U0Y2ZhMzYuLjg3MzAxZTYwODI1NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2Z3LmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfZncuaFxuQEAgLTYsNiArNiw3IEBAXG4gXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGxldGlvbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfZXRoZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuIFxuIHN0cnVjdCBmYm5pY19kZXY7XG5AQCAtNDQsNiArNDUsMTggQEAgc3RydWN0IGZibmljX2Z3X3ZlciB7XG4gXHRjaGFyIGNvbW1pdFtGQk5JQ19GV19DQVBfUkVTUF9DT01NSVRfTUFYX1NJWkVdO1xuIH07XG4gXG4rLyogU2VudGluZWwgZm9yIGEgc2Vuc29yIHZhbHVlIHRoZSBkcml2ZXIgZG9lcyBub3QgaGF2ZTogYSB0aHJlc2hvbGQgdGhlXG4rICogZmlybXdhcmUgbmV2ZXIgcG9wdWxhdGVkIChvbGRlciBmaXJtd2FyZSkgb3IgYSBjYWNoZSBlbnRyeSBub3QgeWV0XG4rICogcmVmcmVzaGVkLlxuKyAqL1xuKyNkZWZpbmUgRkJOSUNfU0VOU09SX05PX0RBVEFcdFx0XHRTMzJfTUlOXG4rXG4rc3RydWN0IGZibmljX3RocmVzaG9sZCB7XG4rXHRzMzIgbWluO1xuK1x0czMyIG1heDtcbitcdHMzMiBjcml0O1xuK307XG4rXG4gc3RydWN0IGZibmljX2Z3X2NhcCB7XG4gXHRzdHJ1Y3Qge1xuIFx0XHRzdHJ1Y3QgZmJuaWNfZndfdmVyIG1nbXQsIGJvb3Rsb2FkZXI7XG5AQCAtNjAsNiArNzMsOCBAQCBzdHJ1Y3QgZmJuaWNfZndfY2FwIHtcbiBcdHU4XHRsaW5rX3NwZWVkO1xuIFx0dThcdGxpbmtfZmVjO1xuIFx0dTMyXHRhbnRpX3JvbGxiYWNrX3ZlcnNpb247XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHRlbXA7XG4rXHRzdHJ1Y3QgZmJuaWNfdGhyZXNob2xkIHZvbHQ7XG4gfTtcbiBcbiBzdHJ1Y3QgZmJuaWNfZndfY29tcGxldGlvbiB7XG5AQCAtMjEyLDYgKzIyNyw3IEBAIGVudW0ge1xuIFx0RkJOSUNfVExWX01TR19JRF9RU0ZQX1JFQURfUkVTUFx0XHRcdD0gMHgzOSxcbiBcdEZCTklDX1RMVl9NU0dfSURfVFNFTkVfUkVBRF9SRVFcdFx0XHQ9IDB4M0MsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX1RTRU5FX1JFQURfUkVTUFx0XHQ9IDB4M0QsXG4rXHRGQk5JQ19UTFZfTVNHX0lEX1NFTlNPUl9USFJFU0hPTERfRVhDRUVERURfUkVTUCA9IDB4NDAsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19TRU5EX0xPR1NfUkVRXHRcdD0gMHg0MyxcbiBcdEZCTklDX1RMVl9NU0dfSURfTE9HX01TR19SRVFcdFx0XHQ9IDB4NDQsXG4gXHRGQk5JQ19UTFZfTVNHX0lEX0xPR19NU0dfUkVTUFx0XHRcdD0gMHg0NSxcbkBAIC0yNDIsNiArMjU4LDEyIEBAIGVudW0ge1xuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9WRVJTSU9OXHRcdFx0PSAweDExLFxuIFx0RkJOSUNfRldfQ0FQX1JFU1BfVUVGSV9DT01NSVRfU1RSXHRcdD0gMHgxMixcbiBcdEZCTklDX0ZXX0NBUF9SRVNQX0FOVElfUk9MTEJBQ0tfVkVSU0lPTlx0XHQ9IDB4MTUsXG4rXHQvKiAweDE2IGFuZCAweDE3IGFyZSByZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSAqL1xuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVEVNUF9NSU5cdFx0XHQ9IDB4MTgsXG4rXHRGQk5JQ19GV19DQVBfUkVTUF9URU1QX01BWFx0XHRcdD0gMHgxOSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1RFTVBfQ1JJVFx0XHRcdD0gMHgxYSxcbitcdEZCTklDX0ZXX0NBUF9SRVNQX1ZPTFRfTUlOXHRcdFx0PSAweDFiLFxuK1x0RkJOSUNfRldfQ0FQX1JFU1BfVk9MVF9NQVhcdFx0XHQ9IDB4MWMsXG4gXHRGQk5JQ19GV19DQVBfUkVTUF9NU0dfTUFYXG4gfTtcbiBcbkBAIC0yNzUsNiArMjk3LDE0IEBAIGVudW0ge1xuIFx0RkJOSUNfRldfVFNFTkVfTVNHX01BWFxuIH07XG4gXG4rZW51bSB7XG4rXHRGQk5JQ19GV19UU0VORV9USEVSTV9FWENFRURFRF9GTEFHXHQ9IDB4MCxcbitcdEZCTklDX0ZXX1RTRU5FX1ZPTFRfRVhDRUVERURfRkxBR1x0PSAweDEsXG4rXHRGQk5JQ19GV19UU0VORV9USEVSTUFMXHRcdFx0PSAweDIsXG4rXHRGQk5JQ19GV19UU0VORV9WT0xUQUdFXHRcdFx0PSAweDMsXG4rXHRGQk5JQ19GV19UU0VORV9FWENFRURFRF9NU0dfTUFYLFxuK307XG4rXG4gZW51bSB7XG4gXHRGQk5JQ19GV19PV05FUlNISVBfRkxBR1x0XHRcdD0gMHgwLFxuIFx0RkJOSUNfRldfT1dORVJTSElQX1RJTUVcdFx0XHQ9IDB4MSxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbmluZGV4IGRlZjg1OThhY2VlY2YuLjNmMzM1MjJmY2ZkMmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX2h3bW9uLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfaHdtb24uY1xuQEAgLTIsNDEgKzIsMTg0IEBAXG4gLyogQ29weXJpZ2h0IChjKSBNZXRhIFBsYXRmb3JtcywgSW5jLiBhbmQgYWZmaWxpYXRlcy4gKi9cbiBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9od21vbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvamlmZmllcy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJmYm5pYy5oXCJcbiAjaW5jbHVkZSBcImZibmljX21hYy5oXCJcbiBcbi1zdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9pZChlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlKVxuK3N0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbitcdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4rXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4ge1xuLVx0aWYgKHR5cGUgPT0gaHdtb25fdGVtcClcbi1cdFx0cmV0dXJuIEZCTklDX1NFTlNPUl9URU1QO1xuLVx0aWYgKHR5cGUgPT0gaHdtb25faW4pXG4tXHRcdHJldHVybiBGQk5JQ19TRU5TT1JfVk9MVEFHRTtcbitcdHJldHVybiAwNDQ0O1xuK31cbiBcbi1cdHJldHVybiAtRU9QTk9UU1VQUDtcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nICp2YWwpXG4re1xuK1x0c3RydWN0IGZibmljX2h3bW9uX2NhY2hlICpjYWNoZSA9IFx1MDAyNmZiZC1cdTAwM2Vod21vbl9jYWNoZTtcbitcdHN0cnVjdCBmYm5pY19md19jb21wbGV0aW9uICpmd19jbXBsO1xuK1x0aW50IGVyciA9IDA7XG4rXHRzMzIgKmNhY2hlZDtcbitcbitcdHN3aXRjaCAoaWQpIHtcbitcdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4rXHRcdGNhY2hlZCA9IFx1MDAyNmNhY2hlLVx1MDAzZXRlbXBfbWRlZztcbitcdFx0YnJlYWs7XG4rXHRjYXNlIEZCTklDX1NFTlNPUl9WT0xUQUdFOlxuK1x0XHRjYWNoZWQgPSBcdTAwMjZjYWNoZS1cdTAwM2V2b2x0X212O1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCpjYWNoZWQgIT0gRkJOSUNfU0VOU09SX05PX0RBVEEgXHUwMDI2XHUwMDI2XG4rXHQgICAgdGltZV9pc19hZnRlcl9lcV9qaWZmaWVzKGNhY2hlLVx1MDAzZWxhc3RfcmVhZCkpIHtcbitcdFx0KnZhbCA9ICpjYWNoZWQ7XG4rXHRcdHJldHVybiAwO1xuK1x0fVxuK1xuK1x0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuK1x0aWYgKCFmd19jbXBsKVxuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcbitcdGVyciA9IGZibmljX2Z3X3htaXRfdHNlbmVfcmVhZF9tc2coZmJkLCBmd19jbXBsKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LFxuK1x0XHRcdFwiRmFpbGVkIHRvIHRyYW5zbWl0IFRTRU5FIHJlYWQgbXNnLCBlcnIgJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIGV4aXRfZnJlZTtcbitcdH1cbitcbitcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmZ3X2NtcGwtXHUwMDNlZG9uZSwgMTAgKiBIWikpIHtcbitcdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIlRpbWVkIG91dCB3YWl0aW5nIGZvciBUU0VORSByZWFkXFxuXCIpO1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIGV4aXRfY2xlYW51cDtcbitcdH1cbitcbitcdC8qIEhhbmRsZSBlcnJvciByZXR1cm5lZCBieSBmaXJtd2FyZSAqL1xuK1x0aWYgKGZ3X2NtcGwtXHUwMDNlcmVzdWx0KSB7XG4rXHRcdGVyciA9IGZ3X2NtcGwtXHUwMDNlcmVzdWx0O1xuK1x0XHRkZXZfZXJyKGZiZC1cdTAwM2VkZXYsIFwiJXM6IEZpcm13YXJlIHJldHVybmVkIGVycm9yICVkXFxuXCIsXG4rXHRcdFx0X19mdW5jX18sIGVycik7XG4rXHRcdGdvdG8gZXhpdF9jbGVhbnVwO1xuK1x0fVxuK1xuK1x0LyogRlcgcmV0dXJucyBib3RoIHJlYWRpbmdzIGluIG9uZSByZXNwb25zZSwgY2FjaGUgYm90aC4gKi9cbitcdGNhY2hlLVx1MDAzZXRlbXBfbWRlZyA9IGZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4rXHRjYWNoZS1cdTAwM2V2b2x0X212ID0gZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4rXHRjYWNoZS1cdTAwM2VsYXN0X3JlYWQgPSBqaWZmaWVzO1xuK1xuK1x0KnZhbCA9ICpjYWNoZWQ7XG4rZXhpdF9jbGVhbnVwOlxuK1x0ZmJuaWNfbWJ4X2NsZWFyX2NtcGwoZmJkLCBmd19jbXBsKTtcbitleGl0X2ZyZWU6XG4rXHRmYm5pY19md19wdXRfY21wbChmd19jbXBsKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyB1bW9kZV90IGZibmljX2h3bW9uX2lzX3Zpc2libGUoY29uc3Qgdm9pZCAqZHJ2ZGF0YSxcbi1cdFx0XHRcdCAgICAgIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUsXG4tXHRcdFx0XHQgICAgICB1MzIgYXR0ciwgaW50IGNoYW5uZWwpXG4rc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChsb25nIHRociwgbG9uZyAqdmFsKVxuIHtcbi1cdGlmICh0eXBlID09IGh3bW9uX3RlbXAgXHUwMDI2XHUwMDI2IGF0dHIgPT0gaHdtb25fdGVtcF9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4tXHRpZiAodHlwZSA9PSBod21vbl9pbiBcdTAwMjZcdTAwMjYgYXR0ciA9PSBod21vbl9pbl9pbnB1dClcbi1cdFx0cmV0dXJuIDA0NDQ7XG4rXHRpZiAodGhyID09IEZCTklDX1NFTlNPUl9OT19EQVRBKVxuK1x0XHRyZXR1cm4gLUVOT0RBVEE7XG4gXG4rXHQqdmFsID0gdGhyO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25fcmVhZF9hbGFybShsb25nIGEsIGxvbmcgYiwgbG9uZyAqdmFsKVxuK3tcbitcdGlmIChhID09IEZCTklDX1NFTlNPUl9OT19EQVRBIHx8IGIgPT0gRkJOSUNfU0VOU09SX05PX0RBVEEpXG4rXHRcdHJldHVybiAtRU5PREFUQTtcbitcbitcdCp2YWwgPSBhIFx1MDAzZT0gYjtcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGZibmljX2h3bW9uX3RlbXBfcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbjpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfdGhyZXNob2xkKGZiZC1cdTAwM2Vmd19jYXAudGVtcC5taW4sIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWF4OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0OlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25fcmVhZF90aHJlc2hvbGQoZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRjYXNlIGh3bW9uX3RlbXBfbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl90ZW1wX21heF9hbGFybTpcbitcdGNhc2UgaHdtb25fdGVtcF9jcml0X2FsYXJtOlxuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbitcdH1cbitcbitcdGVyciA9IGZibmljX2h3bW9uX3NlbnNvcl9yZWFkKGZiZCwgRkJOSUNfU0VOU09SX1RFTVAsIHZhbCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gZXJyO1xuK1xuK1x0c3dpdGNoIChhdHRyKSB7XG4rXHRjYXNlIGh3bW9uX3RlbXBfaW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl90ZW1wX21pbl9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1pbiwgKnZhbCwgdmFsKTtcbitcdGNhc2UgaHdtb25fdGVtcF9tYXhfYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKCp2YWwsIGZiZC1cdTAwM2Vmd19jYXAudGVtcC5tYXgsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX3RlbXBfY3JpdF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQsIHZhbCk7XG4rXHR9XG4rXG4rXHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgZmJuaWNfaHdtb25faW5fcmVhZChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIHUzMiBhdHRyLCBsb25nICp2YWwpXG4re1xuK1x0aW50IGVycjtcbitcbitcdHN3aXRjaCAoYXR0cikge1xuK1x0Y2FzZSBod21vbl9pbl9taW46XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWluLCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9tYXg6XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX3RocmVzaG9sZChmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4LCB2YWwpO1xuK1x0Y2FzZSBod21vbl9pbl9pbnB1dDpcbitcdGNhc2UgaHdtb25faW5fbWluX2FsYXJtOlxuK1x0Y2FzZSBod21vbl9pbl9tYXhfYWxhcm06XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0ZXJyID0gZmJuaWNfaHdtb25fc2Vuc29yX3JlYWQoZmJkLCBGQk5JQ19TRU5TT1JfVk9MVEFHRSwgdmFsKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzd2l0Y2ggKGF0dHIpIHtcbitcdGNhc2UgaHdtb25faW5faW5wdXQ6XG4rXHRcdHJldHVybiAwO1xuK1x0Y2FzZSBod21vbl9pbl9taW5fYWxhcm06XG4rXHRcdHJldHVybiBmYm5pY19od21vbl9yZWFkX2FsYXJtKGZiZC1cdTAwM2Vmd19jYXAudm9sdC5taW4sICp2YWwsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luX21heF9hbGFybTpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3JlYWRfYWxhcm0oKnZhbCwgZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1heCwgdmFsKTtcbitcdH1cbitcbitcdHJldHVybiAtRU9QTk9UU1VQUDtcbit9XG4rXG4gc3RhdGljIGludCBmYm5pY19od21vbl9yZWFkKHN0cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSxcbiBcdFx0XHQgICAgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwpXG4ge1xuIFx0c3RydWN0IGZibmljX2RldiAqZmJkID0gZGV2X2dldF9kcnZkYXRhKGRldik7XG4tXHRjb25zdCBzdHJ1Y3QgZmJuaWNfbWFjICptYWMgPSBmYmQtXHUwMDNlbWFjO1xuLVx0aW50IGlkO1xuIFxuLVx0aWQgPSBmYm5pY19od21vbl9zZW5zb3JfaWQodHlwZSk7XG4tXHRyZXR1cm4gaWQgXHUwMDNjIDAgPyBpZCA6IG1hYy1cdTAwM2VnZXRfc2Vuc29yKGZiZCwgaWQsIHZhbCk7XG4rXHRzd2l0Y2ggKHR5cGUpIHtcbitcdGNhc2UgaHdtb25fdGVtcDpcbitcdFx0cmV0dXJuIGZibmljX2h3bW9uX3RlbXBfcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRjYXNlIGh3bW9uX2luOlxuK1x0XHRyZXR1cm4gZmJuaWNfaHdtb25faW5fcmVhZChmYmQsIGF0dHIsIHZhbCk7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHR9XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGZibmljX2h3bW9uX29wcyA9IHtcbkBAIC00NSw4ICsxODgsMTUgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9vcHMgZmJuaWNfaHdtb25fb3BzID0ge1xuIH07XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBod21vbl9jaGFubmVsX2luZm8gKmZibmljX2h3bW9uX2luZm9bXSA9IHtcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyh0ZW1wLCBIV01PTl9UX0lOUFVUKSxcbi1cdEhXTU9OX0NIQU5ORUxfSU5GTyhpbiwgSFdNT05fSV9JTlBVVCksXG4rXHRIV01PTl9DSEFOTkVMX0lORk8odGVtcCxcbitcdFx0XHQgICBIV01PTl9UX0lOUFVUIHxcbitcdFx0XHQgICBIV01PTl9UX01JTiB8IEhXTU9OX1RfTUlOX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX01BWCB8IEhXTU9OX1RfTUFYX0FMQVJNIHxcbitcdFx0XHQgICBIV01PTl9UX0NSSVQgfCBIV01PTl9UX0NSSVRfQUxBUk0pLFxuK1x0SFdNT05fQ0hBTk5FTF9JTkZPKGluLFxuK1x0XHRcdCAgIEhXTU9OX0lfSU5QVVQgfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUlOIHwgSFdNT05fSV9NSU5fQUxBUk0gfFxuK1x0XHRcdCAgIEhXTU9OX0lfTUFYIHwgSFdNT05fSV9NQVhfQUxBUk0pLFxuIFx0TlVMTFxuIH07XG4gXG5AQCAtNTcsMjUgKzIwNyw4NCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGh3bW9uX2NoaXBfaW5mbyBmYm5pY19jaGlwX2luZm8gPSB7XG4gXG4gdm9pZCBmYm5pY19od21vbl9yZWdpc3RlcihzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpXG4ge1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXG4gXHRpZiAoIUlTX1JFQUNIQUJMRShDT05GSUdfSFdNT04pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRmYmQtXHUwMDNlaHdtb24gPSBod21vbl9kZXZpY2VfcmVnaXN0ZXJfd2l0aF9pbmZvKGZiZC1cdTAwM2VkZXYsIFwiZmJuaWNcIixcbi1cdFx0XHRcdFx0XHQgICAgIGZiZCwgXHUwMDI2ZmJuaWNfY2hpcF9pbmZvLFxuLVx0XHRcdFx0XHRcdCAgICAgTlVMTCk7XG4tXHRpZiAoSVNfRVJSKGZiZC1cdTAwM2Vod21vbikpIHtcbitcdC8qIFNlZWQgY2FjaGUgd2l0aCBzZW50aW5lbCBzbyB0aGUgZmlyc3QgcmVhZCBhbHdheXMgcmVmcmVzaGVzLiAqL1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnRlbXBfbWRlZyA9IEZCTklDX1NFTlNPUl9OT19EQVRBO1xuK1x0ZmJkLVx1MDAzZWh3bW9uX2NhY2hlLnZvbHRfbXYgPSBGQk5JQ19TRU5TT1JfTk9fREFUQTtcbitcbitcdGh3bW9uID0gaHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbyhmYmQtXHUwMDNlZGV2LCBcImZibmljXCIsIGZiZCxcbitcdFx0XHRcdFx0XHRcdTAwMjZmYm5pY19jaGlwX2luZm8sIE5VTEwpO1xuK1x0aWYgKElTX0VSUihod21vbikpIHtcbiBcdFx0ZGV2X25vdGljZShmYmQtXHUwMDNlZGV2LFxuIFx0XHRcdCAgIFwiRmFpbGVkIHRvIHJlZ2lzdGVyIGh3bW9uIGRldmljZSAlcGVcXG5cIixcbi1cdFx0XHQgICBmYmQtXHUwMDNlaHdtb24pO1xuLVx0XHRmYmQtXHUwMDNlaHdtb24gPSBOVUxMO1xuK1x0XHRcdCAgIGh3bW9uKTtcbitcdFx0cmV0dXJuO1xuIFx0fVxuK1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIGh3bW9uKTtcbiB9XG4gXG4gdm9pZCBmYm5pY19od21vbl91bnJlZ2lzdGVyKHN0cnVjdCBmYm5pY19kZXYgKmZiZClcbiB7XG4rXHRzdHJ1Y3QgZGV2aWNlICpod21vbjtcbitcbiBcdGlmICghSVNfUkVBQ0hBQkxFKENPTkZJR19IV01PTikgfHwgIWZiZC1cdTAwM2Vod21vbilcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aHdtb25fZGV2aWNlX3VucmVnaXN0ZXIoZmJkLVx1MDAzZWh3bW9uKTtcbi1cdGZiZC1cdTAwM2Vod21vbiA9IE5VTEw7XG4rXHRod21vbiA9IGZiZC1cdTAwM2Vod21vbjtcbitcdC8qIFBhaXIgd2l0aCBSRUFEX09OQ0UoKSBpbiBmYm5pY19od21vbl9ub3RpZnlfZXZlbnQoKS4gUHVibGlzaCBOVUxMXG4rXHQgKiBhbmQgd2FpdCBmb3IgYW55IGluLWZsaWdodCBGVyBtYWlsYm94IElSUSBoYW5kbGVyIHRvIGZpbmlzaCBzbyBpdFxuK1x0ICogY2Fubm90IGRlcmVmZXJlbmNlIHRoZSBod21vbiBkZXZpY2UgYWZ0ZXIgd2UgdW5yZWdpc3RlciBpdC5cbitcdCAqL1xuK1x0V1JJVEVfT05DRShmYmQtXHUwMDNlaHdtb24sIE5VTEwpO1xuK1x0c3luY2hyb25pemVfaXJxKGZiZC1cdTAwM2Vmd19tc2l4X3ZlY3Rvcik7XG4rXG4rXHRod21vbl9kZXZpY2VfdW5yZWdpc3Rlcihod21vbik7XG4rfVxuK1xuK3ZvaWQgZmJuaWNfaHdtb25fbm90aWZ5X2V2ZW50KHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLCBsb25nIHZhbClcbit7XG4rXHRlbnVtIGh3bW9uX3NlbnNvcl90eXBlcyB0eXBlO1xuK1x0c3RydWN0IGRldmljZSAqaHdtb247XG4rXHRzMzIgYXR0ciA9IC0xO1xuK1xuK1x0aWYgKCFJU19SRUFDSEFCTEUoQ09ORklHX0hXTU9OKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0c3dpdGNoIChpZCkge1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVEVNUDpcbitcdFx0dHlwZSA9IGh3bW9uX3RlbXA7XG4rXG4rXHRcdGlmICh2YWwgXHUwMDNjPSBmYmQtXHUwMDNlZndfY2FwLnRlbXAubWluKVxuK1x0XHRcdGF0dHIgPSBod21vbl90ZW1wX21pbl9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLmNyaXQpXG4rXHRcdFx0YXR0ciA9IGh3bW9uX3RlbXBfY3JpdF9hbGFybTtcbitcdFx0ZWxzZSBpZiAodmFsIFx1MDAzZT0gZmJkLVx1MDAzZWZ3X2NhcC50ZW1wLm1heClcbitcdFx0XHRhdHRyID0gaHdtb25fdGVtcF9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbitcdFx0dHlwZSA9IGh3bW9uX2luO1xuK1xuK1x0XHRpZiAodmFsIFx1MDAzYz0gZmJkLVx1MDAzZWZ3X2NhcC52b2x0Lm1pbilcbitcdFx0XHRhdHRyID0gaHdtb25faW5fbWluX2FsYXJtO1xuK1x0XHRlbHNlIGlmICh2YWwgXHUwMDNlPSBmYmQtXHUwMDNlZndfY2FwLnZvbHQubWF4KVxuK1x0XHRcdGF0dHIgPSBod21vbl9pbl9tYXhfYWxhcm07XG4rXG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuK1x0LyogUGFpciB3aXRoIFdSSVRFX09OQ0UoKSBpbiBmYm5pY19od21vbl91bnJlZ2lzdGVyKCkuIFNraXAgdGhlXG4rXHQgKiBub3RpZmljYXRpb24gaWYgaHdtb24gZmFpbGVkIHRvIHJlZ2lzdGVyIG9yIGhhcyBhbHJlYWR5IGJlZW4gdG9yblxuK1x0ICogZG93bi5cbitcdCAqL1xuK1x0aHdtb24gPSBSRUFEX09OQ0UoZmJkLVx1MDAzZWh3bW9uKTtcbitcdGlmIChhdHRyIFx1MDAzZT0gMCBcdTAwMjZcdTAwMjYgaHdtb24pXG4rXHRcdGh3bW9uX25vdGlmeV9ldmVudChod21vbiwgdHlwZSwgYXR0ciwgMCk7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5jXG5pbmRleCA1M2I3YTkzOGI0YzI3Li5mYmEyZTJlZmFlYjhjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuY1xuQEAgLTg5OSw2MCArODk5LDYgQEAgZmJuaWNfbWFjX2dldF9ybW9uX3N0YXRzKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCByZXNldCxcbiBcdFx0XHQgICAgVE1JX1NUQVRfVFhfUEFDS0VUXzkyMTdfTUFYX0JZVEVTKTtcbiB9XG4gXG4tc3RhdGljIGludCBmYm5pY19tYWNfZ2V0X3NlbnNvcl9hc2ljKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgaW50IGlkLFxuLVx0XHRcdFx0ICAgICBsb25nICp2YWwpXG4te1xuLVx0c3RydWN0IGZibmljX2Z3X2NvbXBsZXRpb24gKmZ3X2NtcGw7XG4tXHRpbnQgZXJyID0gMDtcbi1cdHMzMiAqc2Vuc29yO1xuLVxuLVx0ZndfY21wbCA9IGZibmljX2Z3X2FsbG9jX2NtcGwoRkJOSUNfVExWX01TR19JRF9UU0VORV9SRUFEX1JFU1ApO1xuLVx0aWYgKCFmd19jbXBsKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbi1cdHN3aXRjaCAoaWQpIHtcbi1cdGNhc2UgRkJOSUNfU0VOU09SX1RFTVA6XG4tXHRcdHNlbnNvciA9IFx1MDAyNmZ3X2NtcGwtXHUwMDNldS50c2VuZS5taWxsaWRlZ3JlZXM7XG4tXHRcdGJyZWFrO1xuLVx0Y2FzZSBGQk5JQ19TRU5TT1JfVk9MVEFHRTpcbi1cdFx0c2Vuc29yID0gXHUwMDI2ZndfY21wbC1cdTAwM2V1LnRzZW5lLm1pbGxpdm9sdHM7XG4tXHRcdGJyZWFrO1xuLVx0ZGVmYXVsdDpcbi1cdFx0ZXJyID0gLUVJTlZBTDtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRlcnIgPSBmYm5pY19md194bWl0X3RzZW5lX3JlYWRfbXNnKGZiZCwgZndfY21wbCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldixcbi1cdFx0XHRcIkZhaWxlZCB0byB0cmFuc21pdCBUU0VORSByZWFkIG1zZywgZXJyICVkXFxuXCIsXG4tXHRcdFx0ZXJyKTtcbi1cdFx0Z290byBleGl0X2ZyZWU7XG4tXHR9XG4tXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZmd19jbXBsLVx1MDAzZWRvbmUsIDEwICogSFopKSB7XG4tXHRcdGRldl9lcnIoZmJkLVx1MDAzZWRldiwgXCJUaW1lZCBvdXQgd2FpdGluZyBmb3IgVFNFTkUgcmVhZFxcblwiKTtcbi1cdFx0ZXJyID0gLUVUSU1FRE9VVDtcbi1cdFx0Z290byBleGl0X2NsZWFudXA7XG4tXHR9XG4tXG4tXHQvKiBIYW5kbGUgZXJyb3IgcmV0dXJuZWQgYnkgZmlybXdhcmUgKi9cbi1cdGlmIChmd19jbXBsLVx1MDAzZXJlc3VsdCkge1xuLVx0XHRlcnIgPSBmd19jbXBsLVx1MDAzZXJlc3VsdDtcbi1cdFx0ZGV2X2VycihmYmQtXHUwMDNlZGV2LCBcIiVzOiBGaXJtd2FyZSByZXR1cm5lZCBlcnJvciAlZFxcblwiLFxuLVx0XHRcdF9fZnVuY19fLCBlcnIpO1xuLVx0XHRnb3RvIGV4aXRfY2xlYW51cDtcbi1cdH1cbi1cbi1cdCp2YWwgPSAqc2Vuc29yO1xuLWV4aXRfY2xlYW51cDpcbi1cdGZibmljX21ieF9jbGVhcl9jbXBsKGZiZCwgZndfY21wbCk7XG4tZXhpdF9mcmVlOlxuLVx0ZmJuaWNfZndfcHV0X2NtcGwoZndfY21wbCk7XG4tXG4tXHRyZXR1cm4gZXJyO1xuLX1cbi1cbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5pbml0X3JlZ3MgPSBmYm5pY19tYWNfaW5pdF9yZWdzLFxuIFx0LmdldF9saW5rID0gZmJuaWNfbWFjX2dldF9saW5rLFxuQEAgLTk2Niw3ICs5MTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGZibmljX21hYyBmYm5pY19tYWNfYXNpYyA9IHtcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IGZibmljX21hY19nZXRfcm1vbl9zdGF0cyxcbiBcdC5saW5rX2Rvd24gPSBmYm5pY19tYWNfbGlua19kb3duX2FzaWMsXG4gXHQubGlua191cCA9IGZibmljX21hY19saW5rX3VwX2FzaWMsXG4tXHQuZ2V0X3NlbnNvciA9IGZibmljX21hY19nZXRfc2Vuc29yX2FzaWMsXG4gfTtcbiBcbiAvKipcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX21hYy5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19tYWMuaFxuaW5kZXggMTBmMzBlMGU4ZjY5MS4uYmRlMmRhYTY1NjQ1NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfbWFjLmhcbkBAIC0xMzcsOCArMTM3LDYgQEAgc3RydWN0IGZibmljX21hYyB7XG4gXG4gXHR2b2lkICgqbGlua19kb3duKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIFx0dm9pZCAoKmxpbmtfdXApKHN0cnVjdCBmYm5pY19kZXYgKmZiZCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSk7XG4tXG4tXHRpbnQgKCpnZXRfc2Vuc29yKShzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQsIGludCBpZCwgbG9uZyAqdmFsKTtcbiB9O1xuIFxuIGludCBmYm5pY19tYWNfaW5pdChzdHJ1Y3QgZmJuaWNfZGV2ICpmYmQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjI6NTM6NTkuNjU5MjIwOTY3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk4MjU1OTcwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBmYm5pYyBEcml2ZXIgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHNlcmllcyBmb3IgdGhlIGBmYm5pY2AgZHJpdmVyIOKAkyBNZXRhJ3MgTklDIGRyaXZlciwgaWYgSSByZWNhbGwgY29ycmVjdGx5LiBJdCBzZWVtcyBsaWtlIHdlJ3JlIGFkZGluZyBoYXJkd2FyZSBtb25pdG9yaW5nIGNhcGFiaWxpdGllczogdGVtcGVyYXR1cmUsIHZvbHRhZ2UsIHJlYWRpbmcgdGhyZXNob2xkcyBmcm9tIGZpcm13YXJlLCBhbmQgaGFuZGxpbmcgdGhvc2UgdGhyZXNob2xkLWV4Y2VlZGVkIGV2ZW50cy4gQSBnb29kIHN0ZXAsIGdlbmVyYWxseS5cblxuTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGV2ZW4gdGVzdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/XCIuIE5JQyBkcml2ZXJzLCBlc3BlY2lhbGx5IHNwZWNpYWxpemVkIG9uZXMgbGlrZSB0aGlzLCBvZnRlbiBuZWVkIGRpcmVjdCBhY2Nlc3MgdG8gdGhlIGhhcmR3YXJlLiBgZmJuaWNgIGlzIHByb2JhYmx5IHRoZSBzYW1lIHVubGVzcyB0aGVyZSdzIGFuIGVtdWxhdG9yIG9yIHNvbWUgb3RoZXIgdmlydHVhbGl6YXRpb24gc3VwcG9ydC4gU3RhbmRhcmQgUUVNVSBlbXVsYXRpb24gb2YgdmVuZG9yLXNwZWNpZmljIE5JQ3M/IE5vdCBsaWtlbHksIGJhc2VkIG9uIHBhc3QgZXhwZXJpZW5jZS4gSXQncyB1c3VhbGx5IGEgbm8tZ28gZm9yIHRoZXNlIHR5cGVzIG9mIG5ldHdvcmsgZGV2aWNlcy5cblxuV2FpdCBhIHNlY29uZCwgdGhlIGluc3RydWN0aW9ucyBtZW50aW9uIHNvbWV0aGluZyBzcGVjaWZpY2FsbHk6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZi4uLlwiIGFuZCB0aGUgY3J1Y2lhbCBwYXJ0IGlzIFwiLi4uQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycy4uLiB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBUaGF0J3MgdGhlIGtleS5cblxuTGV0IG1lIHRha2UgYSBxdWljayBsb29rIGF0IGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL0tjb25maWdgIG9yIHNpbWlsYXIgZmlsZXMuIFRoYXQgd2lsbCBjb25maXJtIHdoYXQgdGhpcyBkcml2ZXIgYWN0dWFsbHkgaXMgYW5kIGlmIGl0IGZhbGxzIGludG8gdGhhdCBjYXRlZ29yeS4gSWYgaXQgaXMgYSBTbWFydE5JQywgb3Igc2ltaWxhciB0eXBlIG9mIHZlbmRvci1zcGVjaWZpYyBkZXZpY2UsIHRoZW4gaXQncyBhbG1vc3QgY2VydGFpbmx5IGdvaW5nIHRvIGJlIG91dHNpZGUgdGhlIHJlYWxtIG9mIHdoYXQgd2UgY2FuIGVhc2lseSBlbXVsYXRlLCBhbmQgdGhhdCBcIldvcnRoRnV6emluZz1mYWxzZVwiIGZsYWcgd291bGQgYmUgYXBwcm9wcmlhdGUuIFRoaXMgaXMgbG9va2luZyBsaWtlIGl0IG1pZ2h0IGJlIGEgcXVpY2sgXCJub1wiIGJhc2VkIG9uIHRoYXQgaW5zdHJ1Y3Rpb24gYW5kIG15IGV4cGVyaWVuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDEzLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMjI6NTQ6MDUuNjQxNzgyNjkzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTYwMzM5LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmYm5pY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA1LjY4NDc0ODU4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MzQxNDg4NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyB0aGUgS2NvbmZpZyBMYWJ5cmludGgqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIHNvbWV0aGluZyBvdXQgcmVsYXRlZCB0byBuZXR3b3JraW5nIGRyaXZlcnMsIHNwZWNpZmljYWxseSBFdGhlcm5ldC4gSSBrbm93IHRoYXQgS2NvbmZpZyBmaWxlcyBhcmUgdGhlIGhlYXJ0IG9mIHRoZSBrZXJuZWwncyBjb25maWd1cmF0aW9uIHN5c3RlbSwgc28gdGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgbmV0d29ya2luZyBzdWJ0cmVlLiBcImRyaXZlcnMvbmV0L2V0aGVybmV0XCIgZmVlbHMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGZvciBFdGhlcm5ldC1zcGVjaWZpYyBjb25maWd1cmF0aW9ucy4gQW5kIHdpdGhpbiB0aGF0LCBcIm1ldGFcIiBvZnRlbiBjb250YWlucyBnZW5lcmljIG9yIGhpZ2gtbGV2ZWwgZGVmaW5pdGlvbnMsIG9yIGV2ZW4ganVzdCBoZWxwZXIgZGVmaW5pdGlvbnMgZm9yIHRoZSBhcmNoaXRlY3R1cmUsIHNvIEknbGwgY2hlY2sgYGRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ2AuIEhvcGVmdWxseSwgdGhlIG1ldGEgS2NvbmZpZyB3aWxsIGdpdmUgbWUgdGhlIGJyb2FkIHN0cm9rZXMsIG9yIHBvaW50IG1lIGluIHRoZSByaWdodCBkaXJlY3Rpb24gdG8gdGhlICphY3R1YWwqIG9wdGlvbnMgSSBuZWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDY0NywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA5LjYxODkwMDI1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzOTc1MzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWc9MjA9Y29uZmlnIEZCTklDXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMzUtXFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9LY29uZmlnOjM2OlxcdCAgd2lsbCBiZSBjYWxsZWQgZmJuaWMuICBNU0ktWCBpbnRlcnJ1cHQgc3VwcG9ydCBpcyByZXF1aXJlZC5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWctMzctXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjA5LjY2Mjg3OTc2OVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjYyNDY2NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBOZXR3b3JrIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIG5ldHdvcmsgZHJpdmVyIGNvbmZpZ3VyYXRpb24sIGFuZCB0aGUgS2NvbmZpZyBmaWxlIGlzIHRoZSBwbGFjZSB0byBzdGFydC4gTGV0J3Mgc2VlIHdoYXQgd2UndmUgZ290IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdgLiBUaGlzIGZpbGUgc2hvdWxkIGJlIHRoZSBjZW50cmFsIHBvaW50IGZvciBjb25maWd1cmluZyB0aGUgaGlnaGVyLWxldmVsIEV0aGVybmV0IHNldHRpbmdzLCB0aGUgb25lcyB0aGF0IHBvdGVudGlhbGx5IG9yY2hlc3RyYXRlIG9yIGFmZmVjdCBzZXZlcmFsIGxvd2VyLWxldmVsIGRyaXZlcnMuIEknbSBleHBlY3RpbmcgdG8gZmluZCBvcHRpb25zIGRlZmluaW5nIHRoZSBvdmVyYWxsIEV0aGVybmV0IHN1YnN5c3RlbSBmZWF0dXJlcywgbWF5YmUgc29tZSBnbG9iYWwgcGFyYW1ldGVycyB0aGF0IGFwcGx5IGFjcm9zcyBkaWZmZXJlbnQgZHJpdmVyIGltcGxlbWVudGF0aW9ucywgb3IgcGVyaGFwcyBzZWxlY3Rpb24gc3RhdGVtZW50cyB0byB0dXJuIG9uIG9yIG9mZiBtYWpvciBkcml2ZXIgZ3JvdXBzLiBJdCdzIGFsc28gcG9zc2libGUgdGhpcyBmaWxlIGp1c3QgaW1wb3J0cyBvdGhlciBLY29uZmlnIGZpbGVzIHRoYXQgYXJlIG1vcmUgc3BlY2lmaWMgdG8gY2VydGFpbiBkcml2ZXIgZmFtaWxpZXMuIE15IGdvYWwgaXMgdG8gcXVpY2tseSBncmFzcCB0aGUgbG9naWNhbCBzdHJ1Y3R1cmUgb2YgdGhlc2UgY29uZmlndXJhdGlvbnMsIHRvIHVuZGVyc3RhbmQgaG93IGZlYXR1cmVzIGFyZSBlbmFibGVkIGFuZCBob3cgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgc3ltYm9scywgdGhlaXIgZGVmYXVsdHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSByZWxhdGlvbnNoaXBzIHRvIG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbiBmaWxlcy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIEV0aGVybmV0IGFyY2hpdGVjdHVyZS4gTGV0J3Mgc3RhcnQgcmVhZGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA5ODcsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1NDoxMy41ODkxMjgzODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODAxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgTWV0YSBQbGF0Zm9ybXMgbmV0d29yayBkZXZpY2UgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjb25maWcgTkVUX1ZFTkRPUl9NRVRBXFxuICAgNzpcXHRcXHRib29sIFxcXCJNZXRhIFBsYXRmb3JtcyBkZXZpY2VzXFxcIlxcbiAgIDg6XFx0XFx0ZGVmYXVsdCB5XFxuICAgOTpcXHRcXHRoZWxwXFxuICAxMDpcXHRcXHQgIElmIHlvdSBoYXZlIGEgbmV0d29yayAoRXRoZXJuZXQpIGNhcmQgZGVzaWduZWQgYnkgTWV0YSwgc2F5IFkuXFxuICAxMTpcXHRcXHQgIFRoYXQncyBNZXRhIGFzIGluIHRoZSBwYXJlbnQgY29tcGFueSBvZiBGYWNlYm9vay5cXG4gIDEyOlxcdFxcbiAgMTM6XFx0XFx0ICBOb3RlIHRoYXQgdGhlIGFuc3dlciB0byB0aGlzIHF1ZXN0aW9uIGRvZXNuJ3QgZGlyZWN0bHkgYWZmZWN0IHRoZVxcbiAgMTQ6XFx0XFx0ICBrZXJuZWw6IHNheWluZyBOIHdpbGwganVzdCBjYXVzZSB0aGUgY29uZmlndXJhdG9yIHRvIHNraXAgYWxsXFxuICAxNTpcXHRcXHQgIHRoZSBxdWVzdGlvbnMgYWJvdXQgTWV0YSBjYXJkcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX01FVEFcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIEZCTklDXFxuICAyMTpcXHRcXHR0cmlzdGF0ZSBcXFwiTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZVxcXCJcXG4gIDIyOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgQ09NUElMRV9URVNUXFxuICAyMzpcXHRcXHRkZXBlbmRzIG9uICFTMzkwXFxuICAyNDpcXHRcXHRkZXBlbmRzIG9uIE1BWF9TS0JfRlJBR1MgXFx1MDAzYyAyMlxcbiAgMjU6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lfTVNJXFxuICAyNjpcXHRcXHRkZXBlbmRzIG9uIFBUUF8xNTg4X0NMT0NLX09QVElPTkFMXFxuICAyNzpcXHRcXHRzZWxlY3QgTkVUX0RFVkxJTktcXG4gIDI4OlxcdFxcdHNlbGVjdCBQQUdFX1BPT0xcXG4gIDI5OlxcdFxcdHNlbGVjdCBQQ1NfWFBDU1xcbiAgMzA6XFx0XFx0c2VsZWN0IFBIWUxJTktcXG4gIDMxOlxcdFxcdHNlbGVjdCBQTERNRldcXG4gIDMyOlxcdFxcdGhlbHBcXG4gIDMzOlxcdFxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZS5cXG4gIDM0OlxcdFxcbiAgMzU6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlLiBUaGUgbW9kdWxlXFxuICAzNjpcXHRcXHQgIHdpbGwgYmUgY2FsbGVkIGZibmljLiAgTVNJLVggaW50ZXJydXB0IHN1cHBvcnQgaXMgcmVxdWlyZWQuXFxuICAzNzpcXHRcXG4gIDM4OlxcdGVuZGlmICMgTkVUX1ZFTkRPUl9NRVRBXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjEzLjU4OTE4NzM2OFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MzY4NjcwMDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiBgZmJuaWNgIGFuZCBRRU1VIENvbXBhdGliaWxpdHkqKlxuXG5Pa2F5LCBzbyBgZmJuaWNgLCB0aGF0J3MgdGhlIE1ldGEgUGxhdGZvcm1zIEhvc3QgTmV0d29yayBJbnRlcmZhY2Ug4oCTIHRoZWlyIGN1c3RvbSBTbWFydE5JQywgYSB2ZW5kb3Itc3BlY2lmaWMgUENJZSBjYXJkLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBkb2VzIFFFTVUsIHRoZSBzdGFuZGFyZCBpbXBsZW1lbnRhdGlvbiwgZW11bGF0ZSBpdD8gQW5kIHRoZSBhbnN3ZXIgaXMgYSBmaXJtIG5vLiBUaGlzIG1lYW5zIHRoYXQgaWYgSSdtIHdvcmtpbmcgd2l0aCB0aGlzIGRyaXZlciwgSSdtIGdvaW5nIHRvIG5lZWQgdGhlIGFjdHVhbCBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzOyBzdGFuZGFyZCBRRU1VIHdvbid0IGN1dCBpdC4gVGhpcyBpcyBhIGJpdCBvZiBhIHJvYWRibG9jay5cblxuR2l2ZW4gdGhhdCBkZXBlbmRlbmN5IG9uIHJlYWwgaGFyZHdhcmUsIGFuZCB0aGUgaW5hYmlsaXR5IHRvIHRlc3QgaXQgd2l0aGluIGEgc3RhbmRhcmQgdmlydHVhbGl6ZWQgUUVNVSBlbnZpcm9ubWVudCwgSSBzaG91bGQgc2V0IGBXb3J0aEZ1enppbmc9ZmFsc2VgLiBJdCdzIGp1c3Qgbm90IHByYWN0aWNhbCBvciBlZmZpY2llbnQgdG8gdHJ5IGZ1enppbmcgdGhpcyB3aXRob3V0IGFjY2VzcyB0byB0aGUgYWN0dWFsIGNhcmRzLlxuXG5CZWZvcmUgSSBsb2NrIHRoYXQgaW4sIHRob3VnaCwgbGV0IG1lIGp1c3QgcXVpY2tseSBkb3VibGUtY2hlY2sg4oCTIEknbGwgc2NhbiB0aGUga2VybmVsIHNvdXJjZSBmb3IgYW55IG1lbnRpb24gb2Ygc29mdHdhcmUgZW11bGF0aW9uIGZvciBgZmJuaWNgLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgY2VydGFpbi4gSXQncyByYXJlLCBidXQgc29tZXRpbWVzIHRoZXJlIGFyZSBoaWRkZW4gZ2Vtcy4gSSB3YW50IHRvIHJ1bGUgb3V0IHRoZSBwb3NzaWJpbGl0eSB0aGF0ICpzb21lKiBlbXVsYXRpb24sIGV2ZW4gaWYgbGltaXRlZCwgZXhpc3RzLiBCdXQgSSBhbSBhbG1vc3QgY2VydGFpbiBpdCBpcyBub3QgaW4gdGhlIGtlcm5lbC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3NzksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5OCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjE5LjAyNjA1NjIyMloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDgzOTc5NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZibmljX3Byb2JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM9MjE0PXN0YXRpYyB2b2lkIGZibmljX3NlcnZpY2VfdGFzayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI0OC0vKipcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jOjI0OTogKiBmYm5pY19wcm9iZSAtIERldmljZSBJbml0aWFsaXphdGlvbiBSb3V0aW5lXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy0yNTAtICogQHBkZXY6IFBDSSBkZXZpY2UgaW5mb3JtYXRpb24gc3RydWN0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI1OC0gKiovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYzoyNTk6c3RhdGljIGludCBmYm5pY19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jLTI2MC17XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZXRhL2ZibmljL2ZibmljX3BjaS5jPTYyNj1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZmJuaWNfZHJpdmVyID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MjgtXFx0LmlkX3RhYmxlXFx0PSBmYm5pY19wY2lfdGJsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21ldGEvZmJuaWMvZmJuaWNfcGNpLmM6NjI5OlxcdC5wcm9iZVxcdFxcdD0gZmJuaWNfcHJvYmUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWV0YS9mYm5pYy9mYm5pY19wY2kuYy02MzAtXFx0LnJlbW92ZVxcdFxcdD0gZmJuaWNfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQyMjo1NDoxOS41MTAwMzkyNTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjMzNDExODk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQQ0kgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBQQ0kgZHJpdmVyIGNvZGUsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGEgc3RhbmRhcmQgUENJIGRyaXZlciBzZXR1cC4gTm90aGluZyBwYXJ0aWN1bGFybHkgZ3JvdW5kYnJlYWtpbmcgdGhlcmUuIFRoZSBgZmJuaWNfcGNpX3RibGAgdGFibGUgaWRlbnRpZmllcyB0aGUgZGV2aWNlIGJ5IGl0cyB2ZW5kb3IgYW5kIGRldmljZSBJRCDigJMgYSBgTUVUQWAgdmVuZG9yIElEIGFuZCBhIHNwZWNpZmljIGBQQ0lfREVWSUNFX0lEX01FVEFfRkJOSUNgIGRldmljZSBJRC5cblxuVGhlIGltbWVkaWF0ZSB0YWtlYXdheSBoZXJlLCBob3dldmVyLCBpcyB0aGF0IHRoaXMgZGV2aWNlIGlzbid0IHNvbWV0aGluZyB0aGF0J3MgbGlrZWx5IGVtdWxhdGVkIGluIGEgc3RhbmRhcmQgUUVNVSBlbnZpcm9ubWVudC4gSXQgbG9va3MgbGlrZSBpdCdzIHZlbmRvci1zcGVjaWZpYywgd2hpY2ggbWVhbnMgaXQgcHJvYmFibHkgbmVlZHMgYWN0dWFsIGhhcmR3YXJlIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gVGhpcyBpbnN0YW50bHkgcnVsZXMgb3V0IHN0YW5kYXJkIGZ1enppbmcgdGVjaG5pcXVlcyB1c2luZyBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXIgaW4gYSB2aXJ0dWFsIG1hY2hpbmUuXG5cblRoZXJlZm9yZSwgZm9yIG15IGFzc2Vzc21lbnQsIEknbSBnb2luZyB0byBzZXQgYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByYXRpb25hbGUgaXMgc2ltcGxlOiB0aGlzIGRyaXZlciBjb250cm9scyBhIFBDSWUgTklDIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgaGFyZHdhcmUgZm9yIGludGVyYWN0aW9uLiBBbnkgZnV6emluZyBhdHRlbXB0cyBpbiBhIHZpcnR1YWwgZW52aXJvbm1lbnQgYXJlIGdvaW5nIHRvIGJlIGEgd2FzdGUgb2YgdGltZSwgYXMgdGhlIGRldmljZSB3b24ndCBiZSBhY2Nlc3NpYmxlLCBhbmQgdGhlIGZ1enplciB3b3VsZG4ndCBiZSBhYmxlIHRvIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBoYXJkd2FyZSBjb250ZXh0LiBJJ20gZ29pbmcgdG8gbWFyayB0aGlzIGFzIGEgXCJyZXF1aXJlIGhhcmR3YXJlXCIgdXNlIGNhc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNTcwLCJPdXRwdXRUb2tlbnMiOjgzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjI1Ljg0NDE2MDUwNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMzIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBmYm5pYyBkcml2ZXIsIHdoaWNoIGlzIGEgdmVuZG9yLXNwZWNpZmljIFBDSWUgbmV0d29yayBpbnRlcmZhY2UgY2FyZCAoTWV0YSBQbGF0Zm9ybXMgSG9zdCBOZXR3b3JrIEludGVyZmFjZSkuIFRoaXMgaGFyZHdhcmUgaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgb3IgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLCBtYWtpbmcgdGhlIGNvZGUgdW5yZWFjaGFibGUgZm9yIGZ1enppbmcgd2l0aG91dCBwaHlzaWNhbCBoYXJkd2FyZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDIyOjU0OjI1Ljg0NDE5Njk4NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzE5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowz4b8j[1] Phase: Running StartedAt: 2026-08-24 22:54:36 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowz4b8j[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-24 22:54:36 +0000 UTC FinishedAt: 2026-08-24 22:54:41 +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,}