Name: series-workflowzc8sv Phase: Succeeded StartedAt: 2026-07-31 16:19:39 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[0] Phase: Succeeded StartedAt: 2026-07-31 16:19:39 +0000 UTC FinishedAt: 2026-07-31 16:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 16:19:39 +0000 UTC FinishedAt: 2026-07-31 16:41:55 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169", "NET_VENDOR_REALTEK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169", "NET_VENDOR_REALTEK" ], "series_id": "d36b2e53-46bd-45d1-b169-8b3ea93c936b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8169_change_mtu", "rtl8169_ioctl", "rtl8169_get_link_ksettings", "rtl8169_set_link_ksettings", "rtl8169_nway_reset", "phylink_update_mac_pause_capabilities", "phylink_ethtool_set_pauseparam" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfUkVBTFRFSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3BoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgbmV0ZGV2IGFuZCBldGh0b29sIGNhbGxiYWNrcyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzZhZmY1YjFhMmFmNTQwYWZmMDA2YWE4ZjIwNTRmZjhhNWQ2YzJlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE2OjQwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5AQCAtODYsOCAmIzQzOzg2LDggQEAgY29uZmlnIFI4MTY5XG4gXHRkZXBlbmRzIG9uIFBDSVxuIFx0c2VsZWN0IEZXX0xPQURFUlxuIFx0c2VsZWN0IENSQzMyXG4tXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbiYjNDM7XHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3I4MTY5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5AQCAtOTYsNiAmIzQzOzk2LDI2IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSXHRcdDB4MjM0YVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTURfRVhFQ1x0QklUKDApXG4mIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4ZWIwZVxuJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4mIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIFJUTF9QTV9DVFJMX0QzSE9UXHQweDAzXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4gXHR1MzIgbWFzaztcbiBcdHUzMiB2YWw7XG5AQCAtMzM0LDExICYjNDM7MzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuJiM0MztcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOXHRcdFx0QklUKDApXG4gfTtcbiBcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xuQEAgLTcyOCw2ICYjNDM7NzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuJiM0MztlbnVtIHJ0bF9zZnBfbW9kZSB7XG4mIzQzO1x0UlRMX1NGUF9OT05FLFxuJiM0MztcdFJUTF9TRlBfODE2OF9BRixcbiYjNDM7XHRSVExfU0ZQXzgxMjdfQVRGLFxuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiAmIzQzOzc2NCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xuIFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcbiYjNDM7XHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcbiBcdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG5AQCAtNzUwLDYgJiM0Mzs3NzksNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHNwZWVkO1xuIFxuIFx0c3RydWN0IHtcbiBcdFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG5AQCAtNzYyLDcgJiM0Mzs3OTIsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcbiBcdHVuc2lnbmVkIGFzcG1fbWFuYWdlYWJsZToxO1xuIFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XG4tXHRib29sIHNmcF9tb2RlOjE7XG4gXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcbiBcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcbiBcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xuQEAgLTc3NCw2ICYjNDM7ODAzLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCAmIzQzOzExNjAsNiBAQCBzdGF0aWMgaW50IHI4MTY4X3BoeV9vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcbiBcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgXHUwMDI2XHUwMDI2IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKVxuLVx0XHRyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgXHUwMDI2IDB4ZmZmZjtcbi1cbiBcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXHUwMDNjXHUwMDNjIDE1KTtcbiBcbiBcdHJldHVybiBydGxfbG9vcF93YWl0X2hpZ2godHAsIFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cbkBAIC0xMTk5LDYgJiM0MzsxMjI3LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuJiM0MztERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIgPSAoaW5kZXggXHUwMDNjXHUwMDNjIDExKSB8IChwYWdlIFx1MDAzY1x1MDAzYyA1KSB8IHJlZztcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyk7XG4mIzQzO1xuJiM0MztcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfREFUQV9PVVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXG4mIzQzO1x0XHRcdCAgIHUxNiByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciA9IChpbmRleCBcdTAwM2NcdTAwM2MgMTEpIHwgKHBhZ2UgXHUwMDNjXHUwMDNjIDUpIHwgcmVnO1xuJiM0MztcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDIHwgUjgxMjdfU0RTX0NNRF9XRSk7XG4mIzQzO1xuJiM0MztcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcjgxMjdfc2RzX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbiYjNDM7XHRcdFx0ICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSByODEyN19zZHNfcmVhZCh0cCwgaW5kZXgsIHBhZ2UsIHJlZyk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbiYjNDM7XHRyODEyN19zZHNfd3JpdGUodHAsIGluZGV4LCBwYWdlLCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQodHApO1xuJiM0MztcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAxLCAzMSwgMCwgQklUKDMpKTtcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpO1xuJiM0MztcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuJiM0MztcbiYjNDM7XHRSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7XG4mIzQzO1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuJiM0MztcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuJiM0MztcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwOCwgMHgwMDAwKTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0aW50IHZhbDtcbkBAIC0xMjE3LDEyICYjNDM7MTMxMiw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4te1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4tXHRcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG5AQCAtMTI4Myw2ICYjNDM7MTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSAmIzQzOyByZWcsIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9QS0dfREVURUNUKSBcdTAwMjYgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT1cbiYjNDM7XHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XG4mIzQzO1x0XHRSVExfSU5UX0hXX0lEXzgxMTZBRjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcbiB7XG4gXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSAmIzQzOyByZWcpO1xuQEAgLTE1NzgsNiAmIzQzOzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbiYjNDM7XHRcdFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XG4mIzQzO1x0fSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkge1xuJiM0MztcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBSVExfU0ZQX05PTkU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5AQCAtMTY3MywxNiAmIzQzOzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuLVx0XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDApIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICYjNDM7MTgwMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xuIFx0fSBlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XG4gXHRcdCAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE3MDAsNyAmIzQzOzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTIwNzQsMTEgJiM0MzsyMTg0LDExIEBAIHJ0bF9jb2FsZXNjZV9pbmZvKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRjaSA9IHJ0bF9jb2FsZXNjZV9pbmZvXzgxNjhfODEzNjtcbiBcbiBcdC8qIGlmIHNwZWVkIGlzIHVua25vd24gYXNzdW1lIGhpZ2hlc3Qgb25lICovXG4tXHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2kmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VzcGVlZDtcbiBcdHVuc2lnbmVkIGludCB0aW1lciA9IHRwLVx1MDAzZXR4X2xwaV90aW1lcjtcbiBcbiBcdGlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcbkBAIC0yMjU0LDcgJiM0MzsyMzY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3MCw3ICYjNDM7MjM4MCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlkZXYsIGRhdGEpO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyAmIzQzOzI0MTEsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xuLVxuLVx0cGh5X2dldF9wYXVzZSh0cC1cdTAwM2VwaHlkZXYsIFx1MDAyNnR4X3BhdXNlLCBcdTAwMjZyeF9wYXVzZSk7XG4gXG4tXHRkYXRhLVx1MDAzZWF1dG9uZWcgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYXV0b25lZztcbi1cdGRhdGEtXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xuLVx0ZGF0YS1cdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XG4mIzQzO1x0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzE4LDkgJiM0MzsyNDIzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzg2LDM0ICYjNDM7MjQ4OSwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRsZTMyX3RvX2NwdSh0cC1cdTAwM2Vjb3VudGVycy1cdTAwM2VyeF91bmtub3duX29wY29kZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRpbnQgZHVwbGV4ID0gY21kLVx1MDAzZWJhc2UuZHVwbGV4O1xuLVx0aW50IHNwZWVkID0gY21kLVx1MDAzZWJhc2Uuc3BlZWQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XG4tXG4tXHRpZiAoY21kLVx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuLVx0cnRsX3NmcF9pbml0KHRwKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtXHUwMDNlcGh5bGluaywgY21kKTtcbiYjNDM7fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuQEAgLTI0MzEsMTAgJiM0MzsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4gXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4mIzQzO1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4mIzQzO1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG5AQCAtMjQ5OSw5ICYjNDM7MjU5NSwxMCBAQCB2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHR0cC1cdTAwM2VvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7XG4gXG4gXHRcdC8qIFBIWSBzb2Z0IHJlc2V0IG1heSBzdGlsbCBiZSBpbiBwcm9ncmVzcyAqL1xuLVx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuLVx0XHRcdFx0ICAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuLVx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiAmIzQzOzI2MzUsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuJiM0MztcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICYjNDM7MjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcbiBcdFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRydGxfc2ZwX2luaXQodHApO1xuLVxuIFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xuIFx0cGh5X3NwZWVkX3VwKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtMjY1NywxNSAmIzQzOzI3NTMsNiBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIFx0aWYgKHBjaV9pc19wY2llKHRwLVx1MDAzZXBjaV9kZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuIFx0XHRwY2llX3NldF9yZWFkcnEodHAtXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcbi1cbi1cdC8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgJiM0MzsyODY3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XG4gXG4gXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcbi1cdFx0cGh5X3NwZWVkX2Rvd24odHAtXHUwMDNlcGh5ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXHUwMDNlcGh5bGluaywgZmFsc2UpO1xuIFx0XHRydGxfd29sX2VuYWJsZV9yeCh0cCk7XG4gXHR9XG4gfVxuQEAgLTI4MzIsNiAmIzQzOzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKHRwLVx1MDAzZXBoeWxpbmssIGlmciwgY21kKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcbkBAIC0zMDk4LDggJiM0MzszMTk1LDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiAmIzQzOzMyMzEsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiBcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcbiYjNDM7XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgU0VORF9MVFJfTVNHLCAweDAwMDAsIExUUl9NU0dfRU4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbkBAIC0zMTUyLDYgJiM0MzszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4mIzQzO1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdC8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqL1xuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XG5AQCAtMzE2NCw2ICYjNDM7MzI3OCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4mIzQzO1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICYjNDM7Mzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QocGRldi1cdTAwM2VkZXZmbik7XG4mIzQzO1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBmdW5jLCBwb3M7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbiYjNDM7XG4mIzQzO1x0XHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7XG4mIzQzO1x0XHRpZiAocG9zKSB7XG4mIzQzO1x0XHRcdHBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgfD0gKFBDSV9FWFBfTE5LQ1RMX0FTUE1DIHwgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKTtcbiYjNDM7XHRcdFx0cGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4mIzQzO1x0XHRpZiAocG9zKSB7XG4mIzQzO1x0XHRcdHBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSztcbiYjNDM7XHRcdFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xuJiM0MztcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuJiM0MztcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4mIzQzO1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTQxMzksMTIgJiM0Mzs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuJiM0MztcdGJvb2wganVtYm9fYWZ0ZXIgPSBuZXdfbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4gXG4gXHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG4gXHRydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApO1xuIFxuJiM0MztcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFqdW1ib19hZnRlcilcbiYjNDM7XHRcdFx0Y2FwcyB8PSAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XG4mIzQzO1x0XHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVx1MDAzZXBoeWxpbmssIGNhcHMpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg2OSw4ICYjNDM7NTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpXG4tXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZykge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuJiM0MztcdFx0XHRwaHlsaW5rX21hY19jaGFuZ2UodHAtXHUwMDNlcGh5bGluayxcbiYjNDM7XHRcdFx0XHRcdCAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSBcdTAwMjYgTGlua1N0YXR1cykpO1xuJiM0MztcdH1cbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuQEAgLTQ5MzAsOSAmIzQzOzUwOTgsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIHtcbi1cdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXG5AQCAtNDk2Myw0MCAmIzQzOzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuLVxuLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHtcbi1cdFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwKTtcbi1cdFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VlbmFibGVfdHhfbHBpKTtcbi1cdFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRwbV9ydW50aW1lX2lkbGUoZCk7XG4tXHR9XG4tXG4tXHRwaHlfcHJpbnRfc3RhdHVzKHRwLVx1MDAzZXBoeWRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiBcdGludCByZXQ7XG4gXG4tXHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4tXHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4tXG4tXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QodHAtXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcbi1cdFx0XHRcdCBwaHlfbW9kZSk7XG4tXHRpZiAocmV0KVxuJiM0MztcdHJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluaywgdHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbi1cdFx0cGh5X3NldF9tYXhfc3BlZWQocGh5ZGV2LCBTUEVFRF8xMDApO1xuLVxuLVx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTAwNywxMCAmIzQzOzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xuIFx0Yml0bWFwX3plcm8odHAtXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG4gXG4tXHRwaHlfc3RvcCh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cnRsX3NmcF9yZXNldCh0cCk7XG4gXG4gXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XG5AQCAtNTAzMiwxNCAmIzQzOzUxNzAsMTIgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuJiM0MztcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4tXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtNTA0OSwxMyAmIzQzOzUxODUsMTQgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiYjNDM7XHRwaHlsaW5rX3N0b3AodHAtXHUwMDNlcGh5bGluayk7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuIFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4gXG4gXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiBcbi1cdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiwxMSAmIzQzOzUyNDksMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuLVx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuLVx0aWYgKHJldHZhbClcbi1cdFx0Z290byBlcnJfZnJlZV9pcnE7XG4tXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuJiM0MztcdFx0aWYgKHJldHZhbClcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9pcnE7XG4mIzQzO1x0fVxuIFx0cnRsODE2OV91cCh0cCk7XG4mIzQzO1x0cGh5bGlua19zdGFydCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBvdXQ6XG5AQCAtNTIyMSw2ICYjNDM7NTM2MCw5IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuIFx0LyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqL1xuIFx0cnRsX2luaXRfcnhjZmcodHApO1xuIFxuJiM0MztcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbiYjNDM7XHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuJiM0MztcbiBcdHJldHVybiBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKGRldmljZSk7XG4gfVxuIFxuQEAgLTUyODgsNiAmIzQzOzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXHUwMDNlbGVkcyk7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cdTAwM2VkZXYpO1xuJiM0MztcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG5AQCAtNTMxMCw3ICYjNDM7NTQ1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBydGw4MTY5X2ZpeF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gcnRsX3NldF9tYWNfYWRkcmVzcyxcbi1cdC5uZG9fZXRoX2lvY3RsXHRcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXG4mIzQzO1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQ3NCwxNiAmIzQzOzU2MTcsNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJldHVybiAtRVVOQVRDSDtcbiBcdH1cbiBcbi1cdHRwLVx1MDAzZXBoeWRldi1cdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHBoeV9zdXBwb3J0X2VlZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuLVx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuLVx0XHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cdTAwM2VwaHlkZXYsXG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XG4tXG4gXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXG4gXHRwaHlfc3VzcGVuZCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTU1OTksNiAmIzQzOzU3MzIsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4mIzQzO1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4mIzQzO1x0XHRcdCAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiYjNDM7XHRydGxfbGlua19jaGdfcGF0Y2godHAsIHNwZWVkKTtcbiYjNDM7XG4mIzQzO1x0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0cC1cdTAwM2VwY3Mub3BzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnRwLVx1MDAzZXBjcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTE2IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuJiM0MztcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xuJiM0MztcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XG4mIzQzO1x0XHR1MTYgc3RhdDE7XG4mIzQzO1xuJiM0MztcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxuJiM0MztcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuJiM0MztcdFx0aWYgKCFzdGF0ZS1cdTAwM2VsaW5rKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHUxNiBibXNyLCBscGE7XG4mIzQzO1xuJiM0MztcdFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0JNU1IpO1xuJiM0MztcdFx0bHBhID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfTFBBKTtcbiYjNDM7XHRcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbiYjNDM7XHRcdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4mIzQzO1x0XHRcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgU0ZQIGludGVyZmFjZSBtb2RlOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbiYjNDM7XHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4mIzQzO1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbiYjNDM7XHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4mIzQzO1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuJiM0MztcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4mIzQzO1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjYXBzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuJiM0MztcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbiYjNDM7XHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbiYjNDM7XHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbiYjNDM7XHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbiYjNDM7XHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4mIzQzO1x0XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuJiM0MztcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcbiYjNDM7XHRcdF9fc2V0X2JpdChwaHlfbW9kZSwgdHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbiYjNDM7XHRcdFx0ICAgIHBoeV9tb2RlLCBcdTAwMjZydGxfcGh5bGlua19tYWNfb3BzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgJiM0Mzs2MDQxLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdFx0XHQgICAgIGV4dF94aWRfc3RyLCB4aWQpO1xuIFx0dHAtXHUwMDNlbWFjX3ZlcnNpb24gPSBjaGlwLVx1MDAzZW1hY192ZXJzaW9uO1xuIFx0dHAtXHUwMDNlZndfbmFtZSA9IGNoaXAtXHUwMDNlZndfbmFtZTtcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiAmIzQzOzYwNTQsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4mIzQzO1x0dHAtXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuQEAgLTU3ODgsMTMgJiM0Mzs2MTU4LDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcbiYjNDM7XHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDYgJiM0Mzs2MTk3LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnRsX2lzXzgxMTZhZih0cCkpXG4mIzQzO1x0XHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cdTAwM2VwY2lfZGV2KTtcbiYjNDM7XG4gXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGYuLjM0YTBlNGY5YjNkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTgyOCw2ICYjNDM7MTgyOCwxMjYgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKCkgLSBVcGRhdGUgdGhlIHBoeWxpbmsgcGF1c2UgZnJhbWUgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIGluc3RhbmNlXG4mIzQzOyAqIEBwYXVzZV9zdGF0ZTogYml0bWFzayBpbmRpY2F0aW5nIHRoZSBuZXcgcGF1c2Ugc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIHRoZSBNQUMgcGF1c2UgZnJhbWUgKGZsb3cgY29udHJvbCkgc3RhdGUgZm9yIHRoZSBwaHlsaW5rIGluc3RhbmNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoc3RydWN0IHBoeWxpbmsgKnBsLCBpbnQgcGF1c2Vfc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbiYjNDM7XHRib29sIHR4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9UWCk7XG4mIzQzO1x0Ym9vbCByeF9wYXVzZSA9ICEhKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfUlgpO1xuJiM0MztcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llc1xuJiM0MztcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbiYjNDM7XHQgKiBiZTpcbiYjNDM7XHQgKiBldGh0b29sICBMb2NhbCBkZXZpY2VcbiYjNDM7XHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4mIzQzO1x0ICogIDAgICAwICAgMCAgICAgMFxuJiM0MztcdCAqICAxICAgMCAgIDEgICAgIDFcbiYjNDM7XHQgKiAgMCAgIDEgICAwICAgICAxXG4mIzQzO1x0ICogIDEgICAxICAgMSAgICAgMVxuJiM0MztcdCAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZVxuJiM0MztcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZywgdHhfcGF1c2UsXG4mIzQzO1x0XHRcdCAgIHJ4X3BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0bWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfQU4gfHxcbiYjNDM7XHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBvdXIgaW4tYmFuZCBhZHZlcnRpc2VtZW50LCB0cmlnZ2VyaW5nIGEgcmVuZWdvdGlhdGlvbiBpZlxuJiM0MztcdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VwaHlkZXYpXG4mIzQzO1x0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbFxuJiM0MztcdCAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuXG4mIzQzO1x0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4mIzQzO1x0ICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBsLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cdTAwM2VwaHlkZXYsIHJ4X3BhdXNlLCB0eF9wYXVzZSk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYVxuJiM0MztcdCAqIHJlc29sdmUgdG8gdXBkYXRlIHRoZWlyIHN0YXRlOyB3ZSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IHRoZVxuJiM0MztcdCAqIGxpbmsgd2lsbCBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFudWFsX2NoYW5nZWQpIHtcbiYjNDM7XHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHBoeWxpbmtfcnVuX3Jlc29sdmUocGwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4mIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cbiYjNDM7ICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcGF1c2U7XG4mIzQzO1x0aW50IHBhdXNlX3N0YXRlO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWFjX3BhdXNlIFx1MDAyNiB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSkpIHtcbiYjNDM7XHRcdHBoeWxpbmtfZXJyKHBsLCBcJiMzNDtBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZF9wYXVzZSA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNiAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XHRpZiAob2xkX3BhdXNlID09IG1hY19wYXVzZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XG4mIzQzO1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBsLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0ZWxzZSBpZiAocGwtXHUwMDNlc2ZwX2J1cylcbiYjNDM7XHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlc2ZwX3N1cHBvcnQpO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC1cdTAwM2VzdXBwb3J0ZWQsIGNvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHBhdXNlX3N0YXRlID0gY29uZmlnLVx1MDAzZXBhdXNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKSkge1xuJiM0MztcdFx0cGF1c2Vfc3RhdGUgXHUwMDI2PSB+KE1MT19QQVVTRV9SWCB8IE1MT19QQVVTRV9UWCk7XG4mIzQzO1x0fSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkpIHtcbiYjNDM7XHRcdGlmICgocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9UWCkpXG4mIzQzO1x0XHRcdHBhdXNlX3N0YXRlIFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcbkBAIC0zMTkwLDggJiM0MzszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcbiBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuIHtcbi1cdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFx1MDAyNnBsLVx1MDAzZWxpbmtfY29uZmlnO1xuLVx0Ym9vbCBtYW51YWxfY2hhbmdlZDtcbiBcdGludCBwYXVzZV9zdGF0ZTtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG5AQCAtMzIxNSw1NCAmIzQzOzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbiBcdFx0cGF1c2Vfc3RhdGUgfD0gTUxPX1BBVVNFX1RYO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4tXHQvKlxuLVx0ICogU2VlIHRoZSBjb21tZW50cyBmb3IgbGlua21vZGVfc2V0X3BhdXNlKCksIHdydCB0aGUgZGVmaWNpZW5jaWVzXG4tXHQgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkXG4tXHQgKiBiZTpcbi1cdCAqIGV0aHRvb2wgIExvY2FsIGRldmljZVxuLVx0ICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpclxuLVx0ICogIDAgICAwICAgMCAgICAgMFxuLVx0ICogIDEgICAwICAgMSAgICAgMVxuLVx0ICogIDAgICAxICAgMCAgICAgMVxuLVx0ICogIDEgICAxICAgMSAgICAgMVxuLVx0ICogYW5kIHRoZW4gdXNlIHRoZSBldGh0b29sIHJ4L3R4IGVuYWJsZW1lbnQgc3RhdHVzIHRvIG1hc2sgdGhlXG4tXHQgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLlxuLVx0ICovXG4tXHRsaW5rbW9kZV9zZXRfcGF1c2UoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBwYXVzZS1cdTAwM2V0eF9wYXVzZSxcbi1cdFx0XHQgICBwYXVzZS1cdTAwM2VyeF9wYXVzZSk7XG4tXG4tXHRtYW51YWxfY2hhbmdlZCA9IChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9BTiB8fFxuLVx0XHRcdCAoIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX0FOKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcbi1cbi1cdGNvbmZpZy1cdTAwM2VwYXVzZSA9IHBhdXNlX3N0YXRlO1xuLVxuLVx0LyogVXBkYXRlIG91ciBpbi1iYW5kIGFkdmVydGlzZW1lbnQsIHRyaWdnZXJpbmcgYSByZW5lZ290aWF0aW9uIGlmXG4tXHQgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLlxuLVx0ICovXG4tXHRpZiAoIXBsLVx1MDAzZXBoeWRldilcbi1cdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuLVxuLVx0LyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbFxuLVx0ICogY2F1c2UgcGh5bGliIHRvIHJlbmVnb3RpYXRlIChpZiBBTiBpcyBlbmFibGVkKSB3aGljaCB3aWxsIGluIHR1cm5cbi1cdCAqIGNhbGwgb3VyIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCB0cmlnZ2VyIGEgcmVzb2x2ZS4gIE5vdGUgdGhhdFxuLVx0ICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXG4tXHQgKi9cbi1cdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4tXHRcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cdTAwM2VwaHlkZXYsIHBhdXNlLVx1MDAzZXJ4X3BhdXNlLFxuLVx0XHRcdFx0ICAgcGF1c2UtXHUwMDNldHhfcGF1c2UpO1xuLVxuLVx0LyogSWYgdGhlIG1hbnVhbCBwYXVzZSBzZXR0aW5ncyBjaGFuZ2VkLCBtYWtlIHN1cmUgd2UgdHJpZ2dlciBhXG4tXHQgKiByZXNvbHZlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZTsgd2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCB0aGVcbi1cdCAqIGxpbmsgd2lsbCBjeWNsZS5cbi1cdCAqL1xuLVx0aWYgKG1hbnVhbF9jaGFuZ2VkKSB7XG4tXHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbi1cdFx0cGh5bGlua19ydW5fcmVzb2x2ZShwbCk7XG4tXHR9XG4mIzQzO1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxLi40NzIxYmEwNzFjYmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyZWFsdGVrLmhcJiMzNDtcbkBAIC0yNjQ2LDQ1ICYjNDM7MjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgJiM0MzsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4gXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuIFx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuLVx0fSwge1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1JUTF9EVU1NWV9TRlApLFxuLVx0XHQubmFtZVx0XHQ9IFwmIzM0O1JlYWx0ZWsgU0ZQIFBIWSBNb2RlXCYjMzQ7LFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCYjMzQ7UlRMODIyNCAyLjVHYnBzIFBIWVwmIzM0OyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5pbmRleCAyYmMwZGIzZDUyYWM4Li5lM2M3ODIyMTAwYWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5AQCAtODQyLDQgJiM0Mzs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbiB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTtcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkNjgzYmMxYjA2NTljLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNyAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1JFQUxURUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X253YXlfcmVzZXQmIzM0OywKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIHI4MTY5IEV0aGVybmV0IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgcGh5bGliIGRpcmVjdGx5LCBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyAoODExNmFmLCA4MTI3X0FURikgYW5kIGludHJvZHVjaW5nIGEgbmV3IHBoeWxpbmsgY29yZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AuIFRoZSByODE2OSBkcml2ZXIgaXMgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxNjo0MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhLi41ODE4YTlhNTAwYTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnCkBAIC04Niw4ICYjNDM7ODYsOCBAQCBjb25maWcgUjgxNjkKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDMzIKLQlzZWxlY3QgUEhZTElCCiAJc2VsZWN0IFJFQUxURUtfUEhZCiYjNDM7CXNlbGVjdCBQSFlMSU5LCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG8KIAkgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X3F1ZXVlcy5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9waHkvcmVhbHRla19waHkuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyODE2OS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cjgxNjlfZmlybXdhcmUuaCYjMzQ7CkBAIC05Niw2ICYjNDM7OTYsMjYgQEAKICNkZWZpbmUgSlVNQk9fOUsJKDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTikKICNkZWZpbmUgSlVNQk9fMTZLCShTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTUQJCTB4MjM0OAomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0FERFIJCTB4MjM0YQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfSU4JMHgyMzRjCiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVQJMHgyMzRlCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUMJQklUKDApCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EX1dFCUJJVCgxKQomIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFRwkweGViMTAKJiM0MzsjZGVmaW5lIE9DUF9TRFNfQ01EX1JFRwkJMHhlYjBlCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHCTB4ZWIxNAomIzQzOyNkZWZpbmUgU0RTX0NNRF9SRUFECQkweDAwMDEKJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0UJMHg0MAomIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRQkweDAwODAKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUCQkweGRjMDAKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0sJMHgwMDc4CiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUYJMHgwMDMwCiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lECQkweGQwMDYKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTSwkweDAwZmYKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGCTB4MDAwMAomIzQzOyNkZWZpbmUgUlRMX1BNX0NUUkxfRDNIT1QJMHgwMwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHsKIAl1MzIgbWFzazsKIAl1MzIgdmFsOwpAQCAtMzM0LDExICYjNDM7MzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7CiAJQUxEUFNfTFRSCT0gMHhlMGEyLAogCUxUUl9PQkZGX0xPQ0sJPSAweGUwMzIsCiAJTFRSX1NOT09QCT0gMHhlMDM0LAomIzQzOwlTRU5EX0xUUl9NU0cJPSAweGUwMzgsCiAKICNkZWZpbmUgQUxEUFNfTFRSX0VOCQkJQklUKDApCiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU4JCUJJVCgwKQogI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTgkJQklUKDE0KQogI2RlZmluZSBMVFJfU05PT1BfRU4JCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIExUUl9NU0dfRU4JCQlCSVQoMCkKIH07CiAKIGVudW0gcnRsODE2OF84MTAxX3JlZ2lzdGVycyB7CkBAIC03MjgsNiAmIzQzOzc1MCwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUgewogCVJUTF9EQVNIXzI1X0JQLAogfTsKIAomIzQzO2VudW0gcnRsX3NmcF9tb2RlIHsKJiM0MzsJUlRMX1NGUF9OT05FLAomIzQzOwlSVExfU0ZQXzgxNjhfQUYsCiYjNDM7CVJUTF9TRlBfODEyN19BVEYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwkvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTczNiw2ICYjNDM7NzY0LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjsKIAllbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlOwomIzQzOwllbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CkBAIC03NTAsNiAmIzQzOzc3OSw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXUzMiBpcnFfbWFzazsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHNwZWVkOwogCiAJc3RydWN0IHsKIAkJREVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7CkBAIC03NjIsNyAmIzQzOzc5Miw2IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTsKIAl1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTsKIAl1bnNpZ25lZCBkYXNoX2VuYWJsZWQ6MTsKLQlib29sIHNmcF9tb2RlOjE7CiAJZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7CiAJc3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzOwogCXN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0OwpAQCAtNzc0LDYgJiM0Mzs4MDMsOSBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAlzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzOwogCiAJdTMyIG9jcF9iYXNlOwomIzQzOwlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKJiM0MzsJc3RydWN0IHBoeWxpbmtfY29uZmlnIHBoeWxpbmtfY29uZmlnOwomIzQzOwlzdHJ1Y3QgcGh5bGlua19wY3MgcGNzOwogfTsKIAogdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7CkBAIC0xMTI4LDEwICYjNDM7MTE2MCw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKQogCWlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpCiAJCXJldHVybiAwOwogCi0JLyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSAmYW1wOyZhbXA7IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKQotCQlyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgJmFtcDsgMHhmZmZmOwotCiAJUlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyAmbHQ7Jmx0OyAxNSk7CiAKIAlyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCAmYW1wO3J0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID8KQEAgLTExOTksNiAmIzQzOzEyMjcsNzMgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CiB9CiAKJiM0MztERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSAmYW1wOyBSODEyN19TRFNfQ01EX0VYRUM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsIHUxNiByZWcpCiYjNDM7ewomIzQzOwl1MTYgYWRkciA9IChpbmRleCAmbHQ7Jmx0OyAxMSkgfCAocGFnZSAmbHQ7Jmx0OyA1KSB8IHJlZzsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpOwomIzQzOwomIzQzOwlpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSkKJiM0MzsJCXJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfREFUQV9PVVQpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsCiYjNDM7CQkJICAgdTE2IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyID0gKGluZGV4ICZsdDsmbHQ7IDExKSB8IChwYWdlICZsdDsmbHQ7IDUpIHwgcmVnOwomIzQzOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMgfCBSODEyN19TRFNfQ01EX1dFKTsKJiM0MzsKJiM0MzsJaWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCAmYW1wO3I4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsCiYjNDM7CQkJICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSByODEyN19zZHNfcmVhZCh0cCwgaW5kZXgsIHBhZ2UsIHJlZyk7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2YWwgPSAodmFsICZhbXA7IH5jbGVhcm1hc2spIHwgc2V0bWFzazsKJiM0MzsJcjgxMjdfc2RzX3dyaXRlKHRwLCBpbmRleCwgcGFnZSwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTsKJiM0MzsKJiM0MzsJcjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMSwgMzEsIDAsIEJJVCgzKSk7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDIsICAwLCBCSVQoMTMpIHwgQklUKDEyKSB8IEJJVCg2KSwgQklUKDEyKSB8IEJJVCg2KSk7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpOwomIzQzOwomIzQzOwlSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7CiYjNDM7CVJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgJmFtcDsgfjB4MzAwMykgfCAweDAwMDIpOwomIzQzOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsICZhbXA7IH4weDAwMGYpIHwgMHgwMDBjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaW50IHZhbDsKQEAgLTEyMTcsMTIgJiM0MzsxMzEyLDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKLXsKLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCi0JCXI4MTI3X3NmcF9pbml0XzEwZyh0cCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQpAQCAtMTI4Myw2ICYjNDM7MTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZywgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgJmFtcDsgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT0KJiM0MzsJCVJUTF9QS0dfREVURUNUXzgxMTZBRiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSAmYW1wOyBSVExfSU5UX0hXX0lEX01BU0spID09CiYjNDM7CQlSVExfSU5UX0hXX0lEXzgxMTZBRjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZykKIHsKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC0mZ3Q7b2NwX2Jhc2UgJiM0MzsgcmVnKTsKQEAgLTE1NzgsNiAmIzQzOzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCXUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTsKJiM0MzsKJiM0MzsJCWlmICgoZGF0YSAmYW1wOyAweGZmKSA9PSAweDA3KQomIzQzOwkJCXJldHVybiBSVExfU0ZQXzgxMjdfQVRGOwomIzQzOwl9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7CiYjNDM7CQlyZXR1cm4gUlRMX1NGUF84MTY4X0FGOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBSVExfU0ZQX05PTkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY3MywxNiAmIzQzOzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9wY2lfY29tbWl0KHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8CiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwotCQl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTAwKSB7CiYjNDM7CQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE2OTIsNyAmIzQzOzE4MDIsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTsKIAl9IGVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8CiAJCSAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwogCQl9IGVsc2UgewpAQCAtMTcwMCw3ICYjNDM7MTgxMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpOwogCQl9CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMCkgewomIzQzOwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7CiAJCX0gZWxzZSB7CkBAIC0yMDc0LDExICYjNDM7MjE4NCwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJY2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7CiAKIAkvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqLwotCWlmICh0cC0mZ3Q7cGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQomIzQzOwlpZiAodHAtJmd0O3NwZWVkID09IFNQRUVEX1VOS05PV04pCiAJCXJldHVybiBjaTsKIAogCWZvciAoOyBjaS0mZ3Q7c3BlZWQ7IGNpJiM0MzsmIzQzOykgewotCQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQomIzQzOwkJaWYgKHRwLSZndDtzcGVlZCA9PSBjaS0mZ3Q7c3BlZWQpCiAJCQlyZXR1cm4gY2k7CiAJfQogCkBAIC0yMjM2LDcgJiM0MzsyMzQ2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdW5zaWduZWQgaW50IHNwZWVkID0gdHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQ7CiYjNDM7CXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtzcGVlZDsKIAl1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC0mZ3Q7dHhfbHBpX3RpbWVyOwogCiAJaWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQpAQCAtMjI1NCw3ICYjNDM7MjM2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiAJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNzAsNyAmIzQzOzIzODAsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlkZXYsIGRhdGEpOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMDEsMTMgJiM0MzsyNDExLDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlOwotCi0JcGh5X2dldF9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCAmYW1wO3R4X3BhdXNlLCAmYW1wO3J4X3BhdXNlKTsKIAotCWRhdGEtJmd0O2F1dG9uZWcgPSB0cC0mZ3Q7cGh5ZGV2LSZndDthdXRvbmVnOwotCWRhdGEtJmd0O3R4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDsKLQlkYXRhLSZndDtyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7CiYjNDM7CXBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjMxOCw5ICYjNDM7MjQyMyw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcGh5X3NldF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYsIGRhdGEtJmd0O3J4X3BhdXNlLCBkYXRhLSZndDt0eF9wYXVzZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzODYsMzQgJiM0MzsyNDg5LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWxlMzJfdG9fY3B1KHRwLSZndDtjb3VudGVycy0mZ3Q7cnhfdW5rbm93bl9vcGNvZGUpOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCWludCBkdXBsZXggPSBjbWQtJmd0O2Jhc2UuZHVwbGV4OwotCWludCBzcGVlZCA9IGNtZC0mZ3Q7YmFzZS5zcGVlZDsKLQotCWlmICghdHAtJmd0O3NmcF9tb2RlKQotCQlyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7Ci0KLQlpZiAoY21kLSZndDtiYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi0mZ3Q7c3VwcG9ydGVkKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCXBoeWRldi0mZ3Q7YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQlwaHlkZXYtJmd0O3NwZWVkID0gc3BlZWQ7Ci0JcGh5ZGV2LSZndDtkdXBsZXggPSBkdXBsZXg7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlydGxfc2ZwX2luaXQodHApOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtJmd0O3BoeWxpbmssIGNtZCk7CiYjNDM7fQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC0mZ3Q7cGh5bGluayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKQEAgLTI0MzEsMTAgJiM0MzsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NzZXRfY291bnQJCT0gcnRsODE2OV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAotCS5ud2F5X3Jlc2V0CQk9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsCiYjNDM7CS5ud2F5X3Jlc2V0CQk9IHJ0bDgxNjlfbndheV9yZXNldCwKIAkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiAJLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfbGlua19rc2V0dGluZ3MJPSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsCiAJLmdldF9yaW5ncGFyYW0JCT0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKQEAgLTI0OTksOSAmIzQzOzI1OTUsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJdHAtJmd0O29jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTsKIAogCQkvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi8KLQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCi0JCQkJICAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCi0JCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CQlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCQlwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtJmd0O3BoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiAJfQogfQogCkBAIC0yNTM4LDYgJiM0MzsyNjM1LDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZykKIAogc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJcGh5X2luaXRfaHcodHAtJmd0O3BoeWRldik7CiYjNDM7CXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtJmd0O3BoeWRldiwgdHAtJmd0O21hY192ZXJzaW9uKTsKIAogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewpAQCAtMjU1Miw5ICYjNDM7MjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDtwY2lfZGV2LSZndDtzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMCkKIAkJcGh5X3dyaXRlX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTsKIAotCWlmICh0cC0mZ3Q7c2ZwX21vZGUpCi0JCXJ0bF9zZnBfaW5pdCh0cCk7Ci0KIAkvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovCiAJcGh5X3NwZWVkX3VwKHRwLSZndDtwaHlkZXYpOwogCkBAIC0yNjU3LDE1ICYjNDM7Mjc1Myw2IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAKIAlpZiAocGNpX2lzX3BjaWUodHAtJmd0O3BjaV9kZXYpICZhbXA7JmFtcDsgdHAtJmd0O3N1cHBvcnRzX2dtaWkpCiAJCXBjaWVfc2V0X3JlYWRycSh0cC0mZ3Q7cGNpX2RldiwgcmVhZHJxKTsKLQotCS8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovCi0JaWYgKGp1bWJvKSB7Ci0JCWxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsCi0JCQkJICAgdHAtJmd0O3BoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpOwotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsCi0JCQkJICAgdHAtJmd0O3BoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpOwotCQlwaHlfc3RhcnRfYW5lZyh0cC0mZ3Q7cGh5ZGV2KTsKLQl9CiB9CiAKIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZCkKQEAgLTI3ODAsNyAmIzQzOzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkgewotCQlwaHlfc3BlZWRfZG93bih0cC0mZ3Q7cGh5ZGV2LCBmYWxzZSk7CiYjNDM7CQlwaHlsaW5rX3NwZWVkX2Rvd24odHAtJmd0O3BoeWxpbmssIGZhbHNlKTsKIAkJcnRsX3dvbF9lbmFibGVfcngodHApOwogCX0KIH0KQEAgLTI4MzIsNiAmIzQzOzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCVJUTF9XMzIodHAsIDB4N2MsIHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC0mZ3Q7cGh5bGluaywgaWZyLCBjbWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0OwpAQCAtMzA5OCw4ICYjNDM7MzE5NSwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpOwogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiAJCWJyZWFrOwotCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiAJCVJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pOwogCQlmYWxsdGhyb3VnaDsKQEAgLTMxMTksNiAmIzQzOzMyMzEsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiAJLyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi8KIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTsKJiM0MzsJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCkBAIC0zMTUyLDYgJiM0MzszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJCXJ0bF9lbmFibGVfbHRyKHRwKTsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCS8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqLwogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTsKQEAgLTMxNjQsNiAmIzQzOzMyNzgsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIAl9IGVsc2UgewogCQlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiYjNDM7CQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOgogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzY1Nyw2ICYjNDM7Mzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtJmd0O2RldmZuKTsKJiM0MzsJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtJmd0O2J1czsKJiM0MzsJaW50IGZ1bmMsIHBvczsKJiM0MzsJdTE2IHZhbDsKJiM0MzsKJiM0MzsJZm9yIChmdW5jID0gMjsgZnVuYyAmbHQ7IDg7IGZ1bmMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7CiYjNDM7CiYjNDM7CQlwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7CiYjNDM7CQlpZiAocG9zKSB7CiYjNDM7CQkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfRVhQX0xOS0NUTCwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwkJCWlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsIHw9IChQQ0lfRVhQX0xOS0NUTF9BU1BNQyB8IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTik7CiYjNDM7CQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIHZhbCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX1BNKTsKJiM0MzsJCWlmIChwb3MpIHsKJiM0MzsJCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCAmYW1wO3ZhbCk7CiYjNDM7CiYjNDM7CQkJaWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQl2YWwgJmFtcDs9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwomIzQzOwkJCXZhbCB8PSAoUlRMX1BNX0NUUkxfRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKTsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7CkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogCXJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7CiAKLQlyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtJmd0O3BoeWRldiwgMHgwYzQyLCAweDEzKSAmYW1wOyAweDNmZmY7Ci0JaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7Ci0JCXUxNiBzd19jbnRfMW1zX2luaTsKJiM0MzsJaWYgKHRwLSZndDtwaHlkZXYpIHsKJiM0MzsJCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKJiM0MzsJCWlmIChyZ19zYXdfY250ICZndDsgMCkgewomIzQzOwkJCXUxNiBzd19jbnRfMW1zX2luaTsKIAotCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKLQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7CiYjNDM7CQkJc3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSAmYW1wOyAweDBmZmY7CiYjNDM7CQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7CiYjNDM7CQl9CiAJfQogCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApOwpAQCAtNDEzOSwxMiAmIzQzOzQyOTEsMjMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cCkKIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJYm9vbCBqdW1ib19iZWZvcmUgPSBkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKJiM0MzsJYm9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgJmd0OyBFVEhfREFUQV9MRU47CiAKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CiAJcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTsKIAomIzQzOwlpZiAoanVtYm9fYmVmb3JlICE9IGp1bWJvX2FmdGVyKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwkJaWYgKCFqdW1ib19hZnRlcikKJiM0MzsJCQljYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwomIzQzOwkJcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC0mZ3Q7cGh5bGluaywgY2Fwcyk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2OSw4ICYjNDM7NTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpCi0JCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwkJCXBoeWxpbmtfbWFjX2NoYW5nZSh0cC0mZ3Q7cGh5bGluaywKJiM0MzsJCQkJCSAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSAmYW1wOyBMaW5rU3RhdHVzKSk7CiYjNDM7CX0KIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7CiAJbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKQEAgLTQ5MzAsOSAmIzQzOzUwOTgsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIHsKLQlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJLyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovCkBAIC00OTYzLDQwICYjNDM7NTEyOCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7Ci0JCXJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7Ci0JCXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC0mZ3Q7cGh5ZGV2LSZndDtlbmFibGVfdHhfbHBpKTsKLQkJcG1fcmVxdWVzdF9yZXN1bWUoZCk7Ci0JfSBlbHNlIHsKLQkJcG1fcnVudGltZV9pZGxlKGQpOwotCX0KLQotCXBoeV9wcmludF9zdGF0dXModHAtJmd0O3BoeWRldik7Ci19Ci0KIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLSZndDtwaHlkZXY7Ci0JcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwogCWludCByZXQ7CiAKLQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgotCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwotCi0JcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLSZndDtkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLAotCQkJCSBwaHlfbW9kZSk7Ci0JaWYgKHJldCkKJiM0MzsJcmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluaywgdHAtJmd0O3BoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIodHAtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKLQotCWlmICghdHAtJmd0O3N1cHBvcnRzX2dtaWkpCi0JCXBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTsKLQotCXBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7CiYjNDM7CX0KIAogCXJldHVybiAwOwogfQpAQCAtNTAwNywxMCAmIzQzOzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJLyogQ2xlYXIgYWxsIHRhc2sgZmxhZ3MgKi8KIAliaXRtYXBfemVybyh0cC0mZ3Q7d2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7CiAKLQlwaHlfc3RvcCh0cC0mZ3Q7cGh5ZGV2KTsKLQogCS8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQogCQlydGxfc2ZwX3Jlc2V0KHRwKTsKIAogCXJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTsKQEAgLTUwMzIsMTQgJiM0Mzs1MTcwLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAogCXBjaV9zZXRfbWFzdGVyKHRwLSZndDtwY2lfZGV2KTsKLQlwaHlfaW5pdF9odyh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwotCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwogCW5hcGlfZW5hYmxlKCZhbXA7dHAtJmd0O25hcGkpOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKLQotCXBoeV9zdGFydCh0cC0mZ3Q7cGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDQ5LDEzICYjNDM7NTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXBoeWxpbmtfc3RvcCh0cC0mZ3Q7cGh5bGluayk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJ0bDgxNjlfZG93bih0cCk7CiAJcnRsODE2OV9yeF9jbGVhcih0cCk7CiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsMTEgJiM0Mzs1MjQ5LDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCi0JcmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOwotCiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAJcnRsODE2OV91cCh0cCk7CiYjNDM7CXBoeWxpbmtfc3RhcnQodHAtJmd0O3BoeWxpbmspOwogCXJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiBvdXQ6CkBAIC01MjIxLDYgJiM0Mzs1MzYwLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiAJLyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqLwogCXJ0bF9pbml0X3J4Y2ZnKHRwKTsKIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJcmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTsKIH0KIApAQCAtNTI4OCw2ICYjNDM7NTQzMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlyODE2OV9yZW1vdmVfbGVkcyh0cC0mZ3Q7bGVkcyk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKJiM0MzsJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAogCWlmICh0cC0mZ3Q7ZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpCiAJCXJ0bDgxNjhfZHJpdmVyX3N0b3AodHApOwpAQCAtNTMxMCw3ICYjNDM7NTQ1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAJLm5kb19maXhfZmVhdHVyZXMJPSBydGw4MTY5X2ZpeF9mZWF0dXJlcywKIAkubmRvX3NldF9mZWF0dXJlcwk9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsX3NldF9tYWNfYWRkcmVzcywKLQkubmRvX2V0aF9pb2N0bAkJPSBwaHlfZG9faW9jdGxfcnVubmluZywKJiM0MzsJLm5kb19ldGhfaW9jdGwJCT0gcnRsODE2OV9pb2N0bCwKIAkubmRvX3NldF9yeF9tb2RlCT0gcnRsX3NldF9yeF9tb2RlLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBydGw4MTY5X25ldHBvbGwsCkBAIC01NDc0LDE2ICYjNDM7NTYxNyw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzMyLDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghdHAtJmd0O3Bjcy5vcHMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8CiYjNDM7CSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKQomIzQzOwkJcmV0dXJuICZhbXA7dHAtJmd0O3BjczsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHAtJmd0O21hY19vY3BfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTsKJiM0MzsJdmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7CiYjNDM7CQl1MTYgc3RhdDE7CiYjNDM7CiYjNDM7CQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlpZiAoIShzdGF0MSAmYW1wOyBNRElPX1NUQVQxX0xTVEFUVVMpKQomIzQzOwkJCXN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtsaW5rID0gISEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKTsKJiM0MzsJCWlmICghc3RhdGUtJmd0O2xpbmspCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwomIzQzOwkJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHsKJiM0MzsJCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjoKJiM0MzsJCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCXI4MTI3X3NmcF9pbml0XzFnKHRwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJbmV0ZGV2X2Vycih0cC0mZ3Q7ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTsKJiM0MzsKJiM0MzsJcnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLAomIzQzOwkubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLAomIzQzOwkubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93biwKJiM0MzsJLm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLAomIzQzOwkubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSwKJiM0MzsJLm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMKJiM0MzsJICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlCiYjNDM7CSAqLwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNjMpCiYjNDM7CQljYXBzIHw9IE1BQ18yNTAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl83MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJY2FwcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNhcHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7CiYjNDM7CS5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSwKJiM0MzsJLnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLAomIzQzOwkucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBsOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7CiYjNDM7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO3RwLSZndDtkZXYtJmd0O2RldjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7c2ZwX21vZGUpIHsKJiM0MzsJY2FzZSBSVExfU0ZQXzgxNjhfQUY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTI3X0FURjoKJiM0MzsJCXRwLSZndDtwY3Mub3BzID0gJmFtcDtyODE2OV9wY3Nfb3BzOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHwKJiM0MzsJCQkJCQkJICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7CiYjNDM7CQllbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpZiAodHAtJmd0O3N1cHBvcnRzX2dtaWkpCiYjNDM7CQkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDsgUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgomIzQzOwkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19zZXRfYml0KHBoeV9tb2RlLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMpCiYjNDM7CQlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwNDEsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNTgsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNiAmIzQzOzYxOTcsOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCA1OWRmZTM1YWZhNTRmLi4zNGEwZTRmOWIzZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTE4MjgsNiAmIzQzOzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoKSAtIFVwZGF0ZSB0aGUgcGh5bGluayBwYXVzZSBmcmFtZSBjb25maWd1cmF0aW9uCiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlsaW5rIGluc3RhbmNlCiYjNDM7ICogQHBhdXNlX3N0YXRlOiBiaXRtYXNrIGluZGljYXRpbmcgdGhlIG5ldyBwYXVzZSBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVXBkYXRlIHRoZSBNQUMgcGF1c2UgZnJhbWUgKGZsb3cgY29udHJvbCkgc3RhdGUgZm9yIHRoZSBwaHlsaW5rIGluc3RhbmNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgaW50IHBhdXNlX3N0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CWJvb2wgdHhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSAmYW1wOyBNTE9fUEFVU0VfVFgpOwomIzQzOwlib29sIHJ4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX1JYKTsKJiM0MzsJYm9vbCBtYW51YWxfY2hhbmdlZDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BsLSZndDtzdGF0ZV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llcwomIzQzOwkgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkCiYjNDM7CSAqIGJlOgomIzQzOwkgKiBldGh0b29sICBMb2NhbCBkZXZpY2UKJiM0MzsJICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpcgomIzQzOwkgKiAgMCAgIDAgICAwICAgICAwCiYjNDM7CSAqICAxICAgMCAgIDEgICAgIDEKJiM0MzsJICogIDAgICAxICAgMCAgICAgMQomIzQzOwkgKiAgMSAgIDEgICAxICAgICAxCiYjNDM7CSAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZQomIzQzOwkgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJbGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLAomIzQzOwkJCSAgIHJ4X3BhdXNlKTsKJiM0MzsKJiM0MzsJbWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLSZndDtwYXVzZSBeIHBhdXNlX3N0YXRlKSAmYW1wOyBNTE9fUEFVU0VfQU4gfHwKJiM0MzsJCQkgKCEocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX0FOKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKGNvbmZpZy0mZ3Q7cGF1c2UgXiBwYXVzZV9zdGF0ZSkgJmFtcDsgTUxPX1BBVVNFX1RYUlhfTUFTSyk7CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7cGF1c2UgPSBwYXVzZV9zdGF0ZTsKJiM0MzsKJiM0MzsJLyogVXBkYXRlIG91ciBpbi1iYW5kIGFkdmVydGlzZW1lbnQsIHRyaWdnZXJpbmcgYSByZW5lZ290aWF0aW9uIGlmCiYjNDM7CSAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXBsLSZndDtwaHlkZXYpCiYjNDM7CQlwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJLyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbAomIzQzOwkgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVybgomIzQzOwkgKiBjYWxsIG91ciBwaHlsaW5rX3BoeV9jaGFuZ2UoKSBhbmQgdHJpZ2dlciBhIHJlc29sdmUuICBOb3RlIHRoYXQKJiM0MzsJICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAocGwtJmd0O3BoeWRldikKJiM0MzsJCXBoeV9zZXRfYXN5bV9wYXVzZShwbC0mZ3Q7cGh5ZGV2LCByeF9wYXVzZSwgdHhfcGF1c2UpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGEKJiM0MzsJICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlCiYjNDM7CSAqIGxpbmsgd2lsbCBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChtYW51YWxfY2hhbmdlZCkgewomIzQzOwkJcGwtJmd0O2xpbmtfZmFpbGVkID0gdHJ1ZTsKJiM0MzsJCXBoeWxpbmtfcnVuX3Jlc29sdmUocGwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UKJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpCiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGEgTUFDIGRyaXZlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgaXRzIHBhdXNlIHN0YXRlLAomIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS4KJiM0MzsgKiBJdCByZWNhbGN1bGF0ZXMgc3VwcG9ydGVkIGxpbmsgbW9kZXMgYW5kIHRyaWdnZXJzIHJlbmVnb3RpYXRpb24gaWYgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlOwomIzQzOwlpbnQgcGF1c2Vfc3RhdGU7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmIChtYWNfcGF1c2UgJmFtcDsgfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpKSB7CiYjNDM7CQlwaHlsaW5rX2VycihwbCwgJiMzNDtBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkX3BhdXNlID0gcGwtJmd0O2NvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyAmYW1wOyAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTsKJiM0MzsJaWYgKG9sZF9wYXVzZSA9PSBtYWNfcGF1c2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwbC0mZ3Q7c3RhdGVfbXV0ZXgpOwomIzQzOwomIzQzOwlwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzICZhbXA7PSB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7CiYjNDM7CXBsLSZndDtjb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlOwomIzQzOwomIzQzOwlwaHlsaW5rX3NldChwbC0mZ3Q7c3VwcG9ydGVkLCBQYXVzZSk7CiYjNDM7CXBoeWxpbmtfc2V0KHBsLSZndDtzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O3BoeWRldikKJiM0MzsJCWxpbmttb2RlX2FuZChwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7cGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwllbHNlIGlmIChwbC0mZ3Q7c2ZwX2J1cykKJiM0MzsJCWxpbmttb2RlX2FuZChwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c2ZwX3N1cHBvcnQpOwomIzQzOwomIzQzOwlwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC0mZ3Q7c3VwcG9ydGVkLCBjb25maWcpOwomIzQzOwomIzQzOwlwYXVzZV9zdGF0ZSA9IGNvbmZpZy0mZ3Q7cGF1c2U7CiYjNDM7CiYjNDM7CWlmICghcGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIFBhdXNlKSkgewomIzQzOwkJcGF1c2Vfc3RhdGUgJmFtcDs9IH4oTUxPX1BBVVNFX1JYIHwgTUxPX1BBVVNFX1RYKTsKJiM0MzsJfSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKSB7CiYjNDM7CQlpZiAoKHBhdXNlX3N0YXRlICZhbXA7IE1MT19QQVVTRV9SWCkgXiAocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX1RYKSkKJiM0MzsJCQlwYXVzZV9zdGF0ZSAmYW1wOz0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BsLSZndDtzdGF0ZV9tdXRleCk7CiYjNDM7CiYjNDM7CXBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpOwomIzQzOwogLyoqCiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZQogICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgJmFtcDtzdHJ1Y3QgcGh5bGlua19jb25maWcKQEAgLTMxOTAsOCAmIzQzOzMzMTAsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0pOwogaW50IHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsCiAJCQkJICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiB7Ci0Jc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7Ci0JYm9vbCBtYW51YWxfY2hhbmdlZDsKIAlpbnQgcGF1c2Vfc3RhdGU7CiAKIAlBU1NFUlRfUlROTCgpOwpAQCAtMzIxNSw1NCAmIzQzOzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCwKIAlpZiAocGF1c2UtJmd0O3R4X3BhdXNlKQogCQlwYXVzZV9zdGF0ZSB8PSBNTE9fUEFVU0VfVFg7CiAKLQltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKLQkvKgotCSAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llcwotCSAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGQKLQkgKiBiZToKLQkgKiBldGh0b29sICBMb2NhbCBkZXZpY2UKLQkgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyCi0JICogIDAgICAwICAgMCAgICAgMAotCSAqICAxICAgMCAgIDEgICAgIDEKLQkgKiAgMCAgIDEgICAwICAgICAxCi0JICogIDEgICAxICAgMSAgICAgMQotCSAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZQotCSAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uCi0JICovCi0JbGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcsIHBhdXNlLSZndDt0eF9wYXVzZSwKLQkJCSAgIHBhdXNlLSZndDtyeF9wYXVzZSk7Ci0KLQltYW51YWxfY2hhbmdlZCA9IChjb25maWctJmd0O3BhdXNlIF4gcGF1c2Vfc3RhdGUpICZhbXA7IE1MT19QQVVTRV9BTiB8fAotCQkJICghKHBhdXNlX3N0YXRlICZhbXA7IE1MT19QQVVTRV9BTikgJmFtcDsmYW1wOwotCQkJICAgKGNvbmZpZy0mZ3Q7cGF1c2UgXiBwYXVzZV9zdGF0ZSkgJmFtcDsgTUxPX1BBVVNFX1RYUlhfTUFTSyk7Ci0KLQljb25maWctJmd0O3BhdXNlID0gcGF1c2Vfc3RhdGU7Ci0KLQkvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWYKLQkgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLgotCSAqLwotCWlmICghcGwtJmd0O3BoeWRldikKLQkJcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDtwbC0mZ3Q7c3RhdGVfbXV0ZXgpOwotCi0JLyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbAotCSAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuCi0JICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0Ci0JICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuCi0JICovCi0JaWYgKHBsLSZndDtwaHlkZXYpCi0JCXBoeV9zZXRfYXN5bV9wYXVzZShwbC0mZ3Q7cGh5ZGV2LCBwYXVzZS0mZ3Q7cnhfcGF1c2UsCi0JCQkJICAgcGF1c2UtJmd0O3R4X3BhdXNlKTsKLQotCS8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYQotCSAqIHJlc29sdmUgdG8gdXBkYXRlIHRoZWlyIHN0YXRlOyB3ZSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IHRoZQotCSAqIGxpbmsgd2lsbCBjeWNsZS4KLQkgKi8KLQlpZiAobWFudWFsX2NoYW5nZWQpIHsKLQkJcGwtJmd0O2xpbmtfZmFpbGVkID0gdHJ1ZTsKLQkJcGh5bGlua19ydW5fcmVzb2x2ZShwbCk7Ci0JfQomIzQzOwlwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IGI2NWQwZjVmYTFhMDEuLjQ3MjFiYTA3MWNiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCkBAIC0xNyw3ICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyZWFsdGVrLmgmIzM0OwpAQCAtMjY0Niw0NSAmIzQzOzI2NDUsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODIyMWJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMDBiYXNlVF9GdWxsX0JJVCwKLQkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7Ci0KLQkvKiBzZXQgZGVmYXVsdCBtb2RlICovCi0JcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwotCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0KLQlwaHlkZXYtJmd0O3BvcnQgPSBQT1JUX0ZJQlJFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWludCB2YWwsIGVycjsKLQotCWVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoIXBoeWRldi0mZ3Q7bGluaykKLQkJcmV0dXJuIDA7Ci0KLQl2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7Ci0JaWYgKHZhbCAmbHQ7IDApCi0JCXJldHVybiB2YWw7Ci0KLQlydGxnZW5fZGVjb2RlX3BoeXNyKHBoeWRldiwgdmFsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0gewogCXsKIAkJUEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLApAQCAtMjkzNCwyMCAmIzQzOzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS53cml0ZV9wYWdlCT0gcnRsODIxeF93cml0ZV9wYWdlLAogCQkucmVhZF9tbWQJPSBydGw4MjJ4X3JlYWRfbW1kLAogCQkud3JpdGVfbW1kCT0gcnRsODIyeF93cml0ZV9tbWQsCi0JfSwgewotCQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1JUTF9EVU1NWV9TRlApLAotCQkubmFtZQkJPSAmIzM0O1JlYWx0ZWsgU0ZQIFBIWSBNb2RlJiMzNDssCi0JCS5mbGFncwkJPSBQSFlfSVNfSU5URVJOQUwsCi0JCS5wcm9iZQkJPSBydGw4MjJ4X3Byb2JlLAotCQkuZ2V0X2ZlYXR1cmVzCT0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsCi0JCS5jb25maWdfYW5lZwk9IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcsCi0JCS5yZWFkX3N0YXR1cwk9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gcnRsZ2VuX3Jlc3VtZSwKLQkJLnJlYWRfcGFnZQk9IHJ0bDgyMXhfcmVhZF9wYWdlLAotCQkud3JpdGVfcGFnZQk9IHJ0bDgyMXhfd3JpdGVfcGFnZSwKLQkJLnJlYWRfbW1kCT0gcnRsODIyeF9yZWFkX21tZCwKLQkJLndyaXRlX21tZAk9IHJ0bDgyMnhfd3JpdGVfbW1kLAogCX0sIHsKIAkJUEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLAogCQkubmFtZQkJPSAmIzM0O1JUTDgyMjQgMi41R2JwcyBQSFkmIzM0OywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7CiAKIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTsKIAomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDcgJiM0MzswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCi0jaWZuZGVmIF9SRUFMVEVLX1BIWV9ICi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9ICi0KLSNkZWZpbmUJUEhZX0lEX1JUTF9EVU1NWV9TRlAJMHgwMDFjY2JmZgotCi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGZ1enogdGhlc2UgY2hhbmdlcz8mIzM0OyBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgcjgxNjlfbWFpbi5jYCwgYHBoeWxpbmsuY2AsIGFuZCBhIGZldyByZWxhdGVkIGluY2x1ZGUgZmlsZXMuIFRoZSBkcml2ZXImIzM5O3MgYmVpbmcgY29udmVydGVkIHRvIHVzZSBwaHlsaW5rLCBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zIGlzIGFkZGVkLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICYjMzQ7Q2FuIHN5emthbGxlciBnZXQgdG8gaXQ/JiMzNDsKClRoZSBgcjgxNjlgIGRyaXZlciBpcyBmb3IgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVycy4gUUVNVSBlbXVsYXRlcyB0aGUgb2xkZXIgYHJ0bDgxMzlgLCBub3QgYHI4MTY5YCwgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kIGZvciBkaXJlY3QgUUVNVSBlbXVsYXRpb24uIEJ1dCwgd2FpdC4uLiBkb2VzIHRoYXQgKnJlYWxseSogbWF0dGVyPyBTeXprYWxsZXIgaGFzIHRoaXMgUENJIGZ1enplciwgcmlnaHQ/IEl0IGNhbiBmdXp6ICphbnkqIFBDSSBkcml2ZXIgYmVjYXVzZSBpdCBjcmVhdGVzIHZpcnR1YWwgUENJIGRldmljZXMgdmlhIGBzeXpfcGNpX3NldHVwYC4gSXQgZG9lc24mIzM5O3QgbmVlZCB0aGUgc3BlY2lmaWMgZGV2aWNlIHRvIGJlIGVtdWxhdGVkIGJ5IHRoZSBWTS4gVGhhdCYjMzk7cyBrZXkuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBwb2tlIGF0IGByODE2OV9tYWluLmNgIG5vIHByb2JsZW0sIEkgdGhpbmsuCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwaHlsaW5rLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBsaW5rIGNvZGUuIFRoZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgZnVuY3Rpb24gaXMgYWRkZWQgYW5kIGV4cG9ydGVkLiBQaHlsaW5rIGlzIHVzZWQgYnkgbG90cyBvZiBuZXR3b3JrIGRyaXZlcnMuIFRoZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAgc28gdGhpcyBpcyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBmYWxscyBpbnRvIHRoZSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIFRoZSBwcm9tcHQgc2F5cyB3ZSBzaG91bGQgc2tpcCBjb2RlIHRoYXQgaXMgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIEl0IGFsc28gc2F5cyB3ZSBzaG91bGQgc2tpcCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgbGlrZSBTbWFydE5JQyBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIGByODE2OWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgb3Igc3dpdGNoPyBObywgaXQmIzM5O3MganVzdCBhIHJlZ3VsYXIgRXRoZXJuZXQgTklDLgoKU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGRlZmluaXRlbHkgZnV6eiB0aGlzIGlmIHRoZSBQQ0kgZHJpdmVyIGNhbiBiZSBmb3VuZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgcjgxNjlgIGlzIGluIHN5emthbGxlciYjMzk7cyBrZXJuZWwgY29uZmlnLCBzbyBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIGZpbGUuIFl1cCwgdGhlcmUgaXMgYW4gYFI4MTY5YCB0aGF0IGlzIGRlcGVuZGVudCBvbiBgUENJYC4gQW5kLCB0aGVyZSBhcmUgYHJ0bDgxNjlfcGNpX3RibGAgc28gd2UgaGF2ZSBzcGVjaWZpYyBQQ0kgSURzLiBFeGNlbGxlbnQhCgpPa2F5LCBzbyBpcyBwaHlsaW5rIHJlYWNoYWJsZT8gSXQgaXMgYmVjYXVzZSB0aGUgZnVuY3Rpb25zIGBwaHlsaW5rLmNgIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB1c2VkIGJ5IFBIWXMuIFRoaXMgY2FuIGJlIHJlYWNoYWJsZSBieSBhbnkgZW11bGF0ZWQgZGV2aWNlIHRoYXQgdXNlcyBgcGh5bGlua2AsIGFuZCB0aGVyZSBhcmUgc29tZS4KClNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXMgaW4gYHI4MTY5X21haW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdGhhdCBjb25maWd1cmUgdGhlIE1BQyAoaW5jbHVkaW5nIG9uZSB0aGF0IGRpc2FibGVzIFRYIExQSSBhbmQgZW5hYmxlcyBpdCksIGFuZCBleGlzdGluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIChsaWtlIGBydGw4MTY5X2NoYW5nZV9tdHVgIGFuZCBgcnRsODE2OV9pb2N0bGApIHNvIHRob3NlIG5lZWQgdG8gYmUgY2hlY2tlZC4gU2luY2UgdGhlIGNoYW5nZXMgaGVyZSBhZGQgbmV3IGNvZGUgYW5kIG1vZGlmeSBleGlzdGluZyBjb2RlLCBhbmQgc2luY2Ugc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuICpkZWZpbml0ZWx5KiBiZSB1c2VkIHRvIHRlc3QgdGhlIGNoYW5nZXMgd2l0aGluIGByODE2OWAsIEkmIzM5O20gZ29pbmcgdG8gc2F5IHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCBldmVuIGlmIHRoZSBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIHNwZWNpZmljIGRldmljZSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgc2ltdWxhdGVzIHRoZSBQQ0kgZGV2aWNlIGFuZCB0aGVuIHJlYWRzIGFuZCB3cml0ZXMgdGhlIE1NSU8vUElPLgoKYHI4MTY5YCBpcyBhIHN0YW5kYXJkIFBDSSBkcml2ZXIsIGFuZCBzeXprYWxsZXIgaGFzIGEgUENJIGZ1enplci4gVGhpcyBzaG91bGQgYmUgZ29vZC4gQWxzbywgYHBoeWxpbmsuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIHNvIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIGFuIGVtdWxhdGVkIGRyaXZlciB1c2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwODY6XHRicC1cdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2YnAtXHUwMDNlcGh5bGlua19jb25maWcsIGJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4Ny1cdFx0XHRcdCAgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSwgXHUwMDI2bWFjYl9waHlsaW5rX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFBIWSBMaW5rcyBhbmQgUmVsZXZhbnQgQ29udHJvbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmV0d29yayBjb250cm9sbGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhpcyBlbWJlZGRlZCBzeXN0ZW1zIGNvbnRleHQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBIWSBsYXllciBpbnRlcmFjdGlvbnMuIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG1hY2JgIGRyaXZlciB1dGlsaXplcyBgcGh5bGlua2AsIHRoYXQgbXVjaCBJIGtub3cuIE5vdywgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBhIGNvbm5lY3Rpb24gcmVnYXJkaW5nIGBmZWNgLCB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciwgYmVjYXVzZSBJIHJlbWVtYmVyIGl0JiMzOTtzIGVtdWxhdGVkIGJ5IFFFTVUgd2hlbiBydW5uaW5nIGkuTVggYm9hcmQgaW1hZ2VzLiBUaGUgcXVlc3Rpb24gdGhhdCBoYXMgcG9wcGVkIGludG8gbXkgaGVhZCBpcywgZG9lcyBgZmVjYCwgd2hlbiBlbXVsYXRlZCwgYWxzbyByZWx5IG9uIGBwaHlsaW5rYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zaXN0ZW50IGFwcHJvYWNoIGFjcm9zcyB0aGVzZSBpbXBsZW1lbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjAxPXN0YXRpYyBpbnQgZHBhYV9uZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI3NC1cdG1hY19kZXYtXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6Mjc1Olx0bWFjX2Rldi1cdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjX2Rldi1cdTAwM2VwaHlsaW5rX2NvbmZpZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVx0XHRcdFx0XHQgIGRldl9md25vZGUobWFjX2Rldi1cdTAwM2VkZXYpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1tYWMuYz01NjA9aW50IGRwYWEyX21hY19jb25uZWN0KHN0cnVjdCBkcGFhMl9tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jOjYyNTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZtYWMtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVx0XHRcdFx0IGRwbWFjX25vZGUsIG1hYy1cdTAwM2VpZl9tb2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYz05MzE9c3RhdGljIGludCBlbmV0YzRfbGlua19pbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5NTA6XHRlcnIgPSBlbmV0Y19waHlsaW5rX2NyZWF0ZShwcml2LCBub2RlLCBcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05NTEtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUyLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5NTM6XHRcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk1NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjk1ODplcnJfcGh5bGlua19jcmVhdGU6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU5LVx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz03OTU9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo4Nzg6XHRlcnIgPSBlbmV0Y19waHlsaW5rX2NyZWF0ZShwcml2LCBub2RlLCBcdTAwMjZlbmV0Y19tYWNfcGh5bGlua19vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODc5LVx0aWYgKGVycilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jOjg4MDpcdFx0Z290byBlcnJfcGh5bGlua19jcmVhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04ODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODg5LVx0ZW5ldGNfcGh5bGlua19kZXN0cm95KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODkwOmVycl9waHlsaW5rX2NyZWF0ZTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg5MS1cdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTQxOT1FWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTQyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0MjE6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00MjItXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYxLVx0cGYtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IG1hY19jYXBzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjQ2MjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NjMtXHRcdFx0XHQgcGYtXHUwMDNlaWZfbW9kZSwgb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDcyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0NzM6RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfcGh5bGlua19jcmVhdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTQ3NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg9MTI9dm9pZCBlbmV0Y19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IGVuZXRjX3BmICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg6MTM6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaC0xNC1cdFx0XHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYz04NTM9c3RhdGljIGludCBmc19lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTkzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jOjkzMzpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZmZXAtXHUwMDNlcGh5bGlua19jb25maWcsIGRldl9md25vZGUoZmVwLVx1MDAzZWRldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzQtXHRcdFx0XHQgcGh5X21vZGUsIFx1MDAyNmZzX2VuZXRfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYz0zNDE5PXN0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jOjM1NzQ6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dWdldGgtXHUwMDNlcGh5bGlua19jb25maWcsIGRldl9md25vZGUoXHUwMDI2ZGV2LVx1MDAzZWRldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYy0zNTc1LVx0XHRcdFx0IHBoeV9pbnRlcmZhY2UsIFx1MDAyNnVnZXRoX21hY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gYHBoeWxpbmtgIGlzIGEgZGVwZW5kZW5jeSwgYW5kIHRoaXMgcGF0Y2ggdG91Y2hlcyBgcjgxNjlfbWFpbi5jYCBkaXJlY3RseS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHI4MTY5YCBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHN0YW5kYXJkIE5JQyBkcml2ZXIsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfUjgxNjlgLCBvZiBjb3Vyc2UuIEFuZCwgdGhlIGZhY3QgdGhhdCBgUjgxNjlgIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCBtZWFucyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgUlgtcmVzZXQgbWV0aG9kIHNob3VsZCBiZSBhZGVxdWF0ZSBmb3IgYWxsIGJvYXJkcy4gIEJ1dCBpZiB5b3VcbiAgODE6XHRcdCAgZXhwZXJpZW5jZSBwcm9ibGVtcywgeW91IGNhbiBlbmFibGUgdGhpcyBvcHRpb24gdG8gcmVzdG9yZSB0aGVcbiAgODI6XHRcdCAgb2xkIFJYLXJlc2V0IGJlaGF2aW9yLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODM6XHRcbiAgODQ6XHRjb25maWcgUjgxNjlcbiAgODU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDg2Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA4NzpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA4ODpcdFx0c2VsZWN0IENSQzMyXG4gIDg5Olx0XHRzZWxlY3QgUkVBTFRFS19QSFlcbiAgOTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXG4gIDkzOlx0XHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG4gIDk0Olx0XHQgIFJUTDgxNjkgR2lnYWJpdCBFdGhlcm5ldFxuICA5NTpcdFx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcbiAgOTY6XHRcdCAgUlRMODEwMSBGYXN0IEV0aGVybmV0XG4gIDk3Olx0XHQgIFJUTDgxMjUgMi41R0JpdCBFdGhlcm5ldFxuICA5ODpcdFxuICA5OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlYWx0ZWsgRHJpdmVyIHdpdGggUGh5bGluayBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBgQ09ORklHX1I4MTY5YC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBjb25maWcgb3B0aW9uLiBOb3csIGBDT05GSUdfUkVBTFRFS19QSFlgIGlzIGludGVyZXN0aW5nLCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyBhIGRlcGVuZGVuY3kuIE9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGEgYmFzZSBkZXBlbmRlbmN5IGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludGVncmF0aW9uIHdpdGggYHBoeWxpbmtgLCBpbmRpY2F0ZWQgYnkgdGhlIHBhdGNoIG1vZGlmeWluZyBgcjgxNjlfbWFpbi5jYC4gTGV0JiMzOTtzIHNlZS4uLiBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQ6IGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGw4MTY5X3Bjc19jb25maWdgLCBgcnRsODE2OV9wY3NfdmFsaWRhdGVgLCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAsIGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfbndheV9yZXNldGAsIGFuZCB0aGVuIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBpbiBgcGh5bGluay5jYC4KCk9rYXksIHNvIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYHBoeWxpbmsuY2AsIHNvIGl0IG1pZ2h0IGJlIGV4cG9ydGVkLiBZZXAsIGBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtgLiBUaGF0JiMzOTtzIGdvb2QuIEFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnRsODE2OV9jaGFuZ2VfbXR1YC4gU2luY2UgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIGFuIGludGVyZXN0aW5nIGZ1bmN0aW9uLCBJIHNob3VsZCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gYHJ0bDgxNjlfY2hhbmdlX210dWAgdG9vLgoKQWxzbywgc2luY2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAgYXJlIGV4cG9zZWQgYXMgZXRodG9vbCBhbmQgbmV0ZGV2IG9wcywgSSBrbm93IHRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RsIG9yIG5ldGxpbmsuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgYXMgd2VsbC4gVGhlc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00MjU2PXN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNDI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjQyOTE6c3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MjkyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz01NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1MS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU0NTI6XHQubmRvX2NoYW5nZV9tdHVcdFx0PSBydGw4MTY5X2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01NDUzLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFsdGVrIDgxNjkgRHJpdmVyIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBjb25maXJtaW5nIHRoZSBjYWxsYmFjayBtYXBwaW5ncy4gYHJ0bDgxNjlfY2hhbmdlX210dWAgY29ycmVzcG9uZHMgdG8gdGhlIGBuZG9fY2hhbmdlX210dWAgY2FsbGJhY2ssIHN0cmFpZ2h0Zm9yd2FyZC4gYHJ0bDgxNjlfaW9jdGxgIGlzIGhhbmRsaW5nIGBuZG9fZXRoX2lvY3RsYCwgYXMgZXhwZWN0ZWQuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoZSBldGh0b29sIG9wZXJhdGlvbnM6IGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBnZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgIGZvciBgc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgIGZvciB0aGUgYG53YXlfcmVzZXRgIG9wZXJhdGlvbi4gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIHRoZSBwaHlsaW5rIGNvcmUgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byBsaXN0IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlciBjb250ZXh0LiBJIGhhdmU6CgoqICAgYHJ0bDgxNjlfY2hhbmdlX210dWAKKiAgIGBydGw4MTY5X2lvY3RsYAoqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYAoqICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYAoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAKKiAgIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYAoKV2FpdCBhIG1pbnV0ZSwgSSBzaG91bGQgYWxzbyBub3RlIHRoYXQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGZ1bmN0aW9ucyBzdWNoIGFzIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGw4MTY5X3Bjc19jb25maWdgLCBgcnRsODE2OV9wY3NfdmFsaWRhdGVgLCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBhcHBlYXIgdG8gYmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgcjgxNjlfbWFpbi5jYC4gVGhlc2UgbWF5IGJlIGlubGluZWQsIHNvIGl0IGlzIGJldHRlciB0byBwcmlvcml0aXplIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIHJlbWFpbjoKCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAoqICAgYHJ0bDgxNjlfaW9jdGxgCiogICBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgCiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgCiogICBgcnRsODE2OV9ud2F5X3Jlc2V0YAoqICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBhcyBJIGhhdmUganVzdCBub3RlZCB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIGluc3RhbmNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxODM4OnN0YXRpYyB2b2lkIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgaW50IHBhdXNlX3N0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5MDQ9dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQ2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTQ3Olx0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0OC19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzEwPWludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMzNS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzMzNjpcdHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBhdXNlIEZyYW1lIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYyDigJMgdGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHdlIGNhbiBkaXNyZWdhcmQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAgaW5zdGVhZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBhY3RpdmUgY29tcG9uZW50cy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBoYXMgYmVlbiBjaGFuZ2VkLiBBaCwgeWVzLCBpdCAqaGFzKiBiZWVuIG1vZGlmaWVkOyBpdCBjYWxscyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgLCB3aGljaCBjb25maXJtcyBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uLgoKVGhlIG5leHQgcG9pbnQgSSBuZWVkIHRvIGNvbnNpZGVyIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSAqbmVlZGVkKi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgQ09ORklHX1I4MTY5YCBhbmQgYENPTkZJR19QSFlMSU5LYC4gYENPTkZJR19QSFlMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJ5IGBSODE2OWAsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgSSBzaG91bGQgbGlzdCBpdCBleHBsaWNpdGx5IGFueXdheSwgc28gSSB3aWxsLiBBbmQgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiB0aGUgS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KCmBSODE2OWAgZGVwZW5kcyBvbiBgUENJYC4gYFBDSWAgaXMgc3RhbmRhcmQsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQWgsIHllcywgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgdW5kZXIgYE5FVF9WRU5ET1JfUkVBTFRFS2AuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UmVhbHRlayBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5FVF9WRU5ET1JfUkVBTFRFS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYE5FVF9WRU5ET1JfUkVBTFRFS2AuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBkcml2ZXI/JiMzNDsgSXMgaXQgcHVyZWx5IHNlbGYtY29udGFpbmVkLCBvciBkb2VzIGl0IHRvdWNoIGFyZWFzIGxpa2UgbmV0d29ya2luZyBzdGFjayBpbnRlcm5hbHMsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycz8gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIG1vZHVsZSYjMzk7cyBpbnRlcmFjdGlvbnMgdG8gZW5zdXJlIG5vdGhpbmcgZ2V0cyBvdmVybG9va2VkIGR1cmluZyB0cm91Ymxlc2hvb3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUmVhbHRlayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXG4gICA3Olx0XHRib29sIFwmIzM0O1JlYWx0ZWsgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBSZWFsdGVrIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDE2Olx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRpZiBORVRfVkVORE9SX1JFQUxURUtcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgODEzOUNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IFJlYWx0ZWsgZHJpdmVycyBhcmUgaGFuZGxlZC4gYE5FVF9WRU5ET1JfUkVBTFRFS2AgaXMgZXNzZW50aWFsLCBhbmQgdGhhbmtmdWxseSwgaXQgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgYW5kIGRlcGVuZHMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgdGhpbmsgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFI4MTY5YCBpcyBpbmNsdWRlZCBpbiBvdXIgYEVuYWJsZUNvbmZpZ3NgLCBhcyBhIHByZWNhdXRpb24uIE5vdywgd2hhdCBhYm91dCBgUEhZTElOS2A/IEl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBSODE2OWAsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdXN0IGluY2x1ZGUgaXQgYXMgd2VsbCwgdG8gYmUgc2FmZS4gQnV0IHdhaXQsIGhvbGQgb24uIGBQSFlMSU5LYCBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgdXNlZCBieSBhICpsb3QqIG9mIGRyaXZlcnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB1c2UgY2FzZXMgYmVmb3JlIEkgc3RhcnQgYWRkaW5nIGl0IHRvIGFueXRoaW5nLiBUaGlzIGRlbWFuZHMgYSBiaXQgbW9yZSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Njpjb25maWcgUEhZTElOS1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODEzCgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUjgxNjkgRHJpdmVyJiMzOTtzIFBoeWxpbmsgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludGVncmF0ZXMgdGhlIFI4MTY5IEV0aGVybmV0IGRyaXZlciB3aXRoIHRoZSBwaHlsaW5rIEFQSS4gVGhlIGRyaXZlciYjMzk7cyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciwgc28gdGhhdCBnaXZlcyB1cyBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKRmlyc3QsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zOiB3ZSBoYXZlIGBSODE2OWAg4oCTIHRoYXQmIzM5O3MgYSBuby1icmFpbmVyLiAgQW5kIGBORVRfVkVORE9SX1JFQUxURUtgLCB0aG91Z2ggaXQmIzM5O3Mgc2V0IGFzIHRoZSBkZWZhdWx0LCB3ZSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdGl2ZS4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgb3RoZXIgdHJpc3RhdGVzIGFzIGBSODE2OWAgZG9lcyB0aGF0IGFscmVhZHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUganVpY3kgYml0cyDigJMgdGhlIGZvY3VzIHN5bWJvbHMsIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhpcyBwaHlsaW5rIGludGVncmF0aW9uIGlzIGhhcHBlbmluZy4gV2UmIzM5O3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfaW9jdGxgLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydGw4MTY5X253YXlfcmVzZXRgLCAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAuICBBbHNvLCBgcnRsX29wZW5gLCBgcnRsODE2OV9jbG9zZWAsIGBydGw4MTY5X3VwYCwgYHJ0bDgxNjlfZG93bmAsIGBydGxfaW5pdF9vbmVgLCBhbmQgYHJ0bDgxNjlfaW50ZXJydXB0YCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpXaGlsZSB0aGUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGBydGxfb3BlbmAgYXJlIGdvb2QgY2FuZGlkYXRlcywgdGhlIHN3ZWV0IHNwb3QgaXMgd2hlcmUgd2UgaGF2ZSBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbjogYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgLiBUaGV5IGFyZSB0cmlnZ2VyZWQgYnkgZXRodG9vbCwgaW9jdGwsIG9yIG5ldGxpbmsuIFRoYXQgaXMgb3VyIHRhcmdldC4gIFRoZXNlIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RyYXRlZ3kuICBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYWxscyBpbnRvIHRoZSBwaHlsaW5rIEFQSSBmdW5jdGlvbnM6CgoqICAgYHJ0bDgxNjlfY2hhbmdlX210dWAgY2FsbHMgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIOKAkyB3aGljaCBpcyAqbmV3Ki4KKiAgIGBydGw4MTY5X2lvY3RsYCBjYWxscyBgcGh5bGlua19taWlfaW9jdGxgLgoqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXRgLgoqICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgLgoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0YC4KKiAgIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBpcyBhIG5ldywgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gcGh5bGluayBpdHNlbGYuCiogICBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCB1c2VzIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAuCgpBbHNvIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzIGFyZSBub3QgZnJ1aXRmdWwuCgoqICAgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYDogIFRoZSBwYXRjaCByZW1vdmVzIFNGUC1yZWxhdGVkIGZ1bmN0aW9ucy4gTm8gbmV3IGp1aWN5IGJpdHMgdGhlcmUgZm9yIGZ1enppbmcuCiogICBgcjgxNjlfbWFpbi5jYDogV2Ugc2VlIGFkZGl0aW9ucyBsaWtlIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYHI4MTI3X3Nkc19tb2RpZnlgLCBgcjgxMjdfc2ZwX2luaXRfMWdgLCBgcjgxMjdfc2ZwX2luaXRfMTBnYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYC4gYHJ0bDgxNjlfcGNzX2NvbmZpZ2AgaXMgY2FsbGVkIGJ5IHBoeWxpbmssIHNvIHdlJiMzOTtsbCBpbmRpcmVjdGx5IGNvdmVyIHRoaXMgdmlhIG91ciBtYWluIGZvY3VzIHN5bWJvbHMuCgpPa2F5LCB0aGF0IG5haWxzIGl0IGRvd24uICBIZXJlJiMzOTtzIHRoZSBwbGFuOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzYDoKICAgICogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAogICAgKiAgIGBydGw4MTY5X2lvY3RsYAogICAgKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AKICAgICogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgCiAgICAqICAgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfUkVBTFRFSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3BoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgbmV0ZGV2IGFuZCBldGh0b29sIGNhbGxiYWNrcyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1JFQUxURUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X253YXlfcmVzZXQmIzM0OywKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIHI4MTY5IEV0aGVybmV0IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgcGh5bGliIGRpcmVjdGx5LCBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyAoODExNmFmLCA4MTI3X0FURikgYW5kIGludHJvZHVjaW5nIGEgbmV3IHBoeWxpbmsgY29yZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AuIFRoZSByODE2OSBkcml2ZXIgaXMgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjE1LjAzMzc1ODE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzMzM3NzgxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIixcbiAgICBcIk5FVF9WRU5ET1JfUkVBTFRFS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSByODE2OSBFdGhlcm5ldCBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIHBoeWxpYiBkaXJlY3RseSwgYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBNQUMgdmVyc2lvbnMgKDgxMTZhZiwgODEyN19BVEYpIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBwaHlsaW5rIGNvcmUgZnVuY3Rpb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLiBUaGUgcjgxNjkgZHJpdmVyIGlzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTUuMDMzNzY0ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTI5NTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6NDA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG5AQCAtODYsOCArODYsOCBAQCBjb25maWcgUjgxNjlcXG4gXFx0ZGVwZW5kcyBvbiBQQ0lcXG4gXFx0c2VsZWN0IEZXX0xPQURFUlxcbiBcXHRzZWxlY3QgQ1JDMzJcXG4tXFx0c2VsZWN0IFBIWUxJQlxcbiBcXHRzZWxlY3QgUkVBTFRFS19QSFlcXG4rXFx0c2VsZWN0IFBIWUxJTktcXG4gXFx0aGVscFxcbiBcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXFxuIFxcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xcbkBAIC0yNiwxMiArMjYsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyODE2OS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicjgxNjlfZmlybXdhcmUuaFxcXCJcXG5AQCAtOTYsNiArOTYsMjYgQEBcXG4gI2RlZmluZSBKVU1CT185S1xcdCg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXFxuICNkZWZpbmUgSlVNQk9fMTZLXFx0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4gXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRFxcdFxcdDB4MjM0OFxcbisjZGVmaW5lIFI4MTI3X1NEU19BRERSXFx0XFx0MHgyMzRhXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfSU5cXHQweDIzNGNcXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcXHQweDIzNGVcXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUNcXHRCSVQoMClcXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX1dFXFx0QklUKDEpXFxuKyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1xcdDB4ZWIxMFxcbisjZGVmaW5lIE9DUF9TRFNfQ01EX1JFR1xcdFxcdDB4ZWIwZVxcbisjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcXHQweGViMTRcXG4rI2RlZmluZSBTRFNfQ01EX1JFQURcXHRcXHQweDAwMDFcXG4rI2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXFx0MHg0MFxcbisjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0VcXHQweDAwODBcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVFxcdFxcdDB4ZGMwMFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0tcXHQweDAwNzhcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcXHQweDAwMzBcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXFx0XFx0MHhkMDA2XFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXFx0MHgwMGZmXFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcXHQweDAwMDBcXG4rI2RlZmluZSBSVExfUE1fQ1RSTF9EM0hPVFxcdDB4MDNcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XFxuIFxcdHUzMiBtYXNrO1xcbiBcXHR1MzIgdmFsO1xcbkBAIC0zMzQsMTEgKzM1NCwxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xcbiBcXHRBTERQU19MVFJcXHQ9IDB4ZTBhMixcXG4gXFx0TFRSX09CRkZfTE9DS1xcdD0gMHhlMDMyLFxcbiBcXHRMVFJfU05PT1BcXHQ9IDB4ZTAzNCxcXG4rXFx0U0VORF9MVFJfTVNHXFx0PSAweGUwMzgsXFxuIFxcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cXHRcXHRCSVQoMClcXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlxcdFxcdEJJVCgxNClcXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBMVFJfTVNHX0VOXFx0XFx0XFx0QklUKDApXFxuIH07XFxuIFxcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xcbkBAIC03MjgsNiArNzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSBydGxfc2ZwX21vZGUge1xcbitcXHRSVExfU0ZQX05PTkUsXFxuK1xcdFJUTF9TRlBfODE2OF9BRixcXG4rXFx0UlRMX1NGUF84MTI3X0FURixcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuQEAgLTczNiw2ICs3NjQsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XFxuIFxcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XFxuK1xcdGVudW0gcnRsX3NmcF9tb2RlIHNmcF9tb2RlO1xcbiBcXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG5AQCAtNzUwLDYgKzc3OSw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuIFxcdGludCBpcnE7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHNwZWVkO1xcbiBcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuQEAgLTc2Miw3ICs3OTIsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dW5zaWduZWQgc3VwcG9ydHNfZ21paToxO1xcbiBcXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcXG4gXFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XFxuLVxcdGJvb2wgc2ZwX21vZGU6MTtcXG4gXFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XFxuIFxcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcXG4gXFx0c3RydWN0IHJ0bDgxNjlfdGNfb2Zmc2V0cyB0Y19vZmZzZXQ7XFxuQEAgLTc3NCw2ICs4MDMsOSBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG4gXFxuIFxcdHUzMiBvY3BfYmFzZTtcXG4rXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZztcXG4rXFx0c3RydWN0IHBoeWxpbmtfcGNzIHBjcztcXG4gfTtcXG4gXFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbkBAIC0xMTI4LDEwICsxMTYwLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXFxuIFxcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgXFx1MDAyNlxcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcXG4tXFx0XFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFxcdTAwMjYgMHhmZmZmO1xcbi1cXG4gXFx0UlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIFxcbiBcXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcXHUwMDI2cnRsX29jcF9ncGh5X2NvbmQsIDI1LCAxMCkgP1xcbkBAIC0xMTk5LDYgKzEyMjcsNzMgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xcbiB9XFxuIFxcbitERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZClcXG4re1xcbitcXHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgXFx1MDAyNiBSODEyN19TRFNfQ01EX0VYRUM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcjgxMjdfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsIHUxNiByZWcpXFxuK3tcXG4rXFx0dTE2IGFkZHIgPSAoaW5kZXggXFx1MDAzY1xcdTAwM2MgMTEpIHwgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgNSkgfCByZWc7XFxuK1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyk7XFxuK1xcbitcXHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFxcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxcbitcXHRcXHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcXG4rXFx0XFx0XFx0ICAgdTE2IHJlZywgdTE2IHZhbClcXG4re1xcbitcXHR1MTYgYWRkciA9IChpbmRleCBcXHUwMDNjXFx1MDAzYyAxMSkgfCAocGFnZSBcXHUwMDNjXFx1MDAzYyA1KSB8IHJlZztcXG4rXFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19EQVRBX0lOLCB2YWwpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xcbitcXG4rXFx0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcjgxMjdfc2RzX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcXG4rXFx0XFx0XFx0ICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaylcXG4re1xcbitcXHRpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZhbCA9ICh2YWwgXFx1MDAyNiB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7XFxuK1xcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcXG4rXFxuK1xcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpO1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTtcXG4rXFxuK1xcdFJUTF9XMTYodHAsIDB4MjMzYSwgMHg4MDA0KTtcXG4rXFx0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcXHUwMDI2IH4weDMwMDMpIHwgMHgwMDAyKTtcXG4rXFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQwYSwgMHgwMDAwKTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDgsIDB4MDAwMCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwYSwgMHgwMDAwKTtcXG4rXFxuK1xcdHZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFxcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0aW50IHZhbDtcXG5AQCAtMTIxNywxMiArMTMxMiw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFxcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLXtcXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbi1cXHRcXHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG5AQCAtMTI4Myw2ICsxMzcyLDE1IEBAIHN0YXRpYyB2b2lkIG1hY19tY3Vfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcsIGludCB2YWx1ZSlcXG4gXFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXFx1MDAzZW9jcF9iYXNlICsgcmVnLCB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cmV0dXJuIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9QS0dfREVURUNUKSBcXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XFxuK1xcdFxcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cXG4rXFx0XFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxcbiB7XFxuIFxcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVxcdTAwM2VvY3BfYmFzZSArIHJlZyk7XFxuQEAgLTE1NzgsNiArMTY3NiwyMCBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xcbitcXG4rXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4rXFx0XFx0XFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XFxuK1xcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcXG4rXFx0XFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIFJUTF9TRlBfTk9ORTtcXG4rfVxcbitcXG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbkBAIC0xNjczLDE2ICsxNzg1LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsX3BjaV9jb21taXQodHApO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxcbiB7XFxuLVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cXHUwMDNlcGh5ZGV2O1xcbi1cXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XFxuIFxcdCAgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4tXFx0XFx0fSBlbHNlIGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMCkge1xcbitcXHRcXHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDFmKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE2OTIsNyArMTgwMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xcbiBcXHR9IGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XFxuIFxcdFxcdCAgIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0xNzAwLDcgKzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0yMDc0LDExICsyMTg0LDExIEBAIHJ0bF9jb2FsZXNjZV9pbmZvKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRjaSA9IHJ0bF9jb2FsZXNjZV9pbmZvXzgxNjhfODEzNjtcXG4gXFxuIFxcdC8qIGlmIHNwZWVkIGlzIHVua25vd24gYXNzdW1lIGhpZ2hlc3Qgb25lICovXFxuLVxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbitcXHRpZiAodHAtXFx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuIFxcdFxcdHJldHVybiBjaTtcXG4gXFxuIFxcdGZvciAoOyBjaS1cXHUwMDNlc3BlZWQ7IGNpKyspIHtcXG4tXFx0XFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkID09IGNpLVxcdTAwM2VzcGVlZClcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VzcGVlZCA9PSBjaS1cXHUwMDNlc3BlZWQpXFxuIFxcdFxcdFxcdHJldHVybiBjaTtcXG4gXFx0fVxcbiBcXG5AQCAtMjIzNiw3ICsyMzQ2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkO1xcbitcXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cXHUwMDNlc3BlZWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0aW1lciA9IHRwLVxcdTAwM2V0eF9scGlfdGltZXI7XFxuIFxcbiBcXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuQEAgLTIyNTQsNyArMjM2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXFxuIFxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXFx1MDAzZXBoeWRldiwgZGF0YSk7XFxuK1xcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNzAsNyArMjM4MCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXFxuIFxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEpO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjMwMSwxMyArMjQxMSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xcbi1cXG4tXFx0cGh5X2dldF9wYXVzZSh0cC1cXHUwMDNlcGh5ZGV2LCBcXHUwMDI2dHhfcGF1c2UsIFxcdTAwMjZyeF9wYXVzZSk7XFxuIFxcbi1cXHRkYXRhLVxcdTAwM2VhdXRvbmVnID0gdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYXV0b25lZztcXG4tXFx0ZGF0YS1cXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xcbi1cXHRkYXRhLVxcdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XFxuK1xcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzE4LDkgKzI0MjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgRVRIX0RBVEFfTEVOKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldiwgZGF0YS1cXHUwMDNlcnhfcGF1c2UsIGRhdGEtXFx1MDAzZXR4X3BhdXNlKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzg2LDM0ICsyNDg5LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGxlMzJfdG9fY3B1KHRwLVxcdTAwM2Vjb3VudGVycy1cXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cXHUwMDNlcGh5ZGV2O1xcbi1cXHRpbnQgZHVwbGV4ID0gY21kLVxcdTAwM2ViYXNlLmR1cGxleDtcXG4tXFx0aW50IHNwZWVkID0gY21kLVxcdTAwM2ViYXNlLnNwZWVkO1xcbi1cXG4tXFx0aWYgKCF0cC1cXHUwMDNlc2ZwX21vZGUpXFxuLVxcdFxcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcXG4tXFxuLVxcdGlmIChjbWQtXFx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG4rfVxcbiBcXG4tXFx0cGh5ZGV2LVxcdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gc3BlZWQ7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbi1cXHRydGxfc2ZwX2luaXQodHApO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuK31cXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rc3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbkBAIC0yNDMxLDEwICsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4gXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxcbiBcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXFxuK1xcdC5ud2F5X3Jlc2V0XFx0XFx0PSBydGw4MTY5X253YXlfcmVzZXQsXFxuIFxcdC5nZXRfZWVlXFx0XFx0PSBydGw4MTY5X2dldF9lZWUsXFxuIFxcdC5zZXRfZWVlXFx0XFx0PSBydGw4MTY5X3NldF9lZWUsXFxuLVxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG5AQCAtMjQ5OSw5ICsyNTk1LDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHRwLVxcdTAwM2VvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7XFxuIFxcbiBcXHRcXHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cXG4tXFx0XFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVxcdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuLVxcdFxcdFxcdFxcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVxcdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTI1MzgsNiArMjYzNSw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuK1xcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRyODE2OV9od19waHlfY29uZmlnKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LCB0cC1cXHUwMDNlbWFjX3ZlcnNpb24pO1xcbiBcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XFxuQEAgLTI1NTIsOSArMjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdCAgICB0cC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXFxuIFxcdFxcdHBoeV93cml0ZV9wYWdlZCh0cC1cXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlKVxcbi1cXHRcXHRydGxfc2ZwX2luaXQodHApO1xcbi1cXG4gXFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xcbiBcXHRwaHlfc3BlZWRfdXAodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC0yNjU3LDE1ICsyNzUzLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdGlmIChwY2lfaXNfcGNpZSh0cC1cXHUwMDNlcGNpX2RldikgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuIFxcdFxcdHBjaWVfc2V0X3JlYWRycSh0cC1cXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcXG4tXFxuLVxcdC8qIENoaXAgZG9lc24ndCBzdXBwb3J0IHBhdXNlIGluIGp1bWJvIG1vZGUgKi9cXG4tXFx0aWYgKGp1bWJvKSB7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXFxuLVxcdFxcdFxcdFxcdCAgIHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKTtcXG4tXFx0XFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdHBoeV9zdGFydF9hbmVnKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHR9XFxuIH1cXG4gXFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcXG5AQCAtMjc4MCw3ICsyODY3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XFxuIFxcbiBcXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcXG4tXFx0XFx0cGh5X3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWRldiwgZmFsc2UpO1xcbitcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWxpbmssIGZhbHNlKTtcXG4gXFx0XFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjgzMiw2ICsyOTE5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cXHUwMDNlcGh5bGluaywgaWZyLCBjbWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcXG5AQCAtMzA5OCw4ICszMTk1LDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xcbiBcXHRcXHRSVExfVzgodHAsIENPTUJPX0xUUl9FWFRFTkQsIFJUTF9SOCh0cCwgQ09NQk9fTFRSX0VYVEVORCkgfCBDT01CT19MVFJfRVhURU5EX0VOKTtcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuQEAgLTMxMTksNiArMzIzMSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIFxcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xcbitcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgU0VORF9MVFJfTVNHLCAweDAwMDAsIExUUl9NU0dfRU4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcXG5AQCAtMzE1Miw2ICszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuIFxcdFxcdHJ0bF9lbmFibGVfbHRyKHRwKTtcXG4gXFx0XFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxcbitcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxcbiBcXHRcXHRcXHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cXG4gXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcXG5AQCAtMzE2NCw2ICszMjc4LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTM2NTcsNiArMzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVxcdTAwM2VkZXZmbik7XFxuK1xcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVxcdTAwM2VidXM7XFxuK1xcdGludCBmdW5jLCBwb3M7XFxuK1xcdHUxNiB2YWw7XFxuK1xcbitcXHRmb3IgKGZ1bmMgPSAyOyBmdW5jIFxcdTAwM2MgODsgZnVuYysrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcXG4rXFxuK1xcdFxcdHBvcyA9IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KGJ1cywgZGV2Zm4sIFBDSV9DQVBfSURfRVhQKTtcXG4rXFx0XFx0aWYgKHBvcykge1xcbitcXHRcXHRcXHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0XFx0XFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX1BNKTtcXG4rXFx0XFx0aWYgKHBvcykge1xcbitcXHRcXHRcXHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0XFx0XFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSztcXG4rXFx0XFx0XFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcXG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuIFxcbi1cXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcXHUwMDI2IDB4M2ZmZjtcXG4tXFx0aWYgKHJnX3Nhd19jbnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHUxNiBzd19jbnRfMW1zX2luaTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpIHtcXG4rXFx0XFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuK1xcdFxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuIFxcbi1cXHRcXHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFxcdTAwMjYgMHgwZmZmO1xcbi1cXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcXG4rXFx0XFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4rXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xcbkBAIC00MTM5LDEyICs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXFx1MDAzZSBFVEhfREFUQV9MRU47XFxuIFxcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcXG4rXFxuK1xcdFxcdGlmICghanVtYm9fYWZ0ZXIpXFxuK1xcdFxcdFxcdGNhcHMgfD0gKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcbitcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MDk4LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXFxuIFxcdGJpdG1hcF96ZXJvKHRwLVxcdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcXG4gXFxuLVxcdHBoeV9zdG9wKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4gXFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbiBcXHRcXHRydGxfc2ZwX3Jlc2V0KHRwKTtcXG4gXFxuIFxcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcXG5AQCAtNTAzMiwxNCArNTE3MCwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XFxuIFxcbiBcXHRwY2lfc2V0X21hc3Rlcih0cC1cXHUwMDNlcGNpX2Rldik7XFxuLVxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xcbitcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4gXFx0ZW5hYmxlX3dvcmsoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrKTtcXG4gXFx0cnRsX3Jlc2V0X3dvcmsodHApO1xcbi1cXG4tXFx0cGh5X3N0YXJ0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTA0OSwxMyArNTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbitcXHRwaHlsaW5rX3N0b3AodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuIFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbiBcXG4gXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbiBcXG4tXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbiBcXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbkBAIC01MTEyLDExICs1MjQ5LDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuLVxcbitcXHRpZiAodHAtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XFxuK1xcdFxcdGlmIChyZXR2YWwpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbitcXHR9XFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbitcXHRwaHlsaW5rX3N0YXJ0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIG91dDpcXG5AQCAtNTIyMSw2ICs1MzYwLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIFxcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cXG4gXFx0cnRsX2luaXRfcnhjZmcodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC01Mjg4LDYgKzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXFx1MDAzZWxlZHMpO1xcbiBcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXFx1MDAzZWRldik7XFxuK1xcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG5AQCAtNTMxMCw3ICs1NDUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBydGxfc2V0X21hY19hZGRyZXNzLFxcbi1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXFxuK1xcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTY5X2lvY3RsLFxcbiBcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBydGxfc2V0X3J4X21vZGUsXFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiBcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gcnRsODE2OV9uZXRwb2xsLFxcbkBAIC01NDc0LDE2ICs1NjE3LDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyZXR1cm4gLUVVTkFUQ0g7XFxuIFxcdH1cXG4gXFxuLVxcdHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcXG4tXFx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxcbi1cXHRcXHRwaHlfc3VwcG9ydF9lZWUodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcbi1cXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuLVxcdFxcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVxcdTAwM2VwaHlkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcXG4tXFxuIFxcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cXG4gXFx0cGh5X3N1c3BlbmQodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC01NTk5LDYgKzU3MzIsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4rXFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XFxuK1xcbitcXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0aWYgKCF0cC1cXHUwMDNlcGNzLm9wcylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2dHAtXFx1MDAzZXBjcztcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XFxuK1xcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XFxuK1xcdFxcdHUxNiBzdGF0MTtcXG4rXFxuK1xcdFxcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xcbitcXG4rXFx0XFx0aWYgKCEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxcbitcXHRcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VsaW5rID0gISEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xcbitcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VsaW5rKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1MTYgYm1zciwgbHBhO1xcbitcXG4rXFx0XFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XFxuK1xcdFxcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcXG4rXFx0XFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcXG4rXFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIodHAtXFx1MDAzZWRldiwgXFxcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcXG4rXFx0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcXG4rXFx0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXFxuK1xcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcXG4rXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXFxuK1xcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFxuK1xcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXFxuK1xcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXFxuK1xcdCAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzI1MDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ181MDAwRkQ7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcXG4rXFxuK1xcdHJldHVybiBjYXBzO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xcbitcXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXFxuK1xcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcXG4rXFx0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2dHAtXFx1MDAzZWRldi1cXHUwMDNlZGV2O1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlc2ZwX21vZGUpIHtcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XFxuK1xcdFxcdHRwLVxcdTAwM2VwY3Mub3BzID0gXFx1MDAyNnI4MTY5X3Bjc19vcHM7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbitcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjIFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XFxuK1xcdFxcdFxcdFxcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcXG4rXFx0XFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVxcdTAwM2Vmd25vZGUsXFxuK1xcdFxcdFxcdCAgICBwaHlfbW9kZSwgXFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xcbitcXHRpZiAoSVNfRVJSKHBsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocGwpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmsgPSBwbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTY2Nyw2ICs2MDQxLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdFxcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XFxuIFxcdHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXFx1MDAzZW1hY192ZXJzaW9uO1xcbiBcXHR0cC1cXHUwMDNlZndfbmFtZSA9IGNoaXAtXFx1MDAzZWZ3X25hbWU7XFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuIFxcbiBcXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xcbiBcXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cXG5AQCAtNTY3OSwxMiArNjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR9XFxuIFxcdHRwLVxcdTAwM2Vhc3BtX21hbmFnZWFibGUgPSAhcmM7XFxuIFxcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuLVxcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGQwMDYpO1xcbi1cXG4tXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4tXFx0XFx0XFx0dHAtXFx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcXG4tXFx0fVxcbitcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG5AQCAtNTc4OCwxMyArNjE1OCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XFxuIFxcbi1cXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xcbitcXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XFxuK1xcdFxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0aWYgKHJjKVxcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgxNyw2ICs2MTk3LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggNTlkZmUzNWFmYTU0Zi4uMzRhMGU0ZjliM2RkZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbkBAIC0xODI4LDYgKzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4gXFxuKy8qKlxcbisgKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgaW5zdGFuY2VcXG4rICogQHBhdXNlX3N0YXRlOiBiaXRtYXNrIGluZGljYXRpbmcgdGhlIG5ldyBwYXVzZSBzdGF0ZVxcbisgKlxcbisgKiBVcGRhdGUgdGhlIE1BQyBwYXVzZSBmcmFtZSAoZmxvdyBjb250cm9sKSBzdGF0ZSBmb3IgdGhlIHBoeWxpbmsgaW5zdGFuY2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIGludCBwYXVzZV9zdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcXHUwMDI2cGwtXFx1MDAzZWxpbmtfY29uZmlnO1xcbitcXHRib29sIHR4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfVFgpO1xcbitcXHRib29sIHJ4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfUlgpO1xcbitcXHRib29sIG1hbnVhbF9jaGFuZ2VkO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llc1xcbitcXHQgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkXFxuK1xcdCAqIGJlOlxcbitcXHQgKiBldGh0b29sICBMb2NhbCBkZXZpY2VcXG4rXFx0ICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpclxcbitcXHQgKiAgMCAgIDAgICAwICAgICAwXFxuK1xcdCAqICAxICAgMCAgIDEgICAgIDFcXG4rXFx0ICogIDAgICAxICAgMCAgICAgMVxcbitcXHQgKiAgMSAgIDEgICAxICAgICAxXFxuK1xcdCAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZVxcbitcXHQgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLFxcbitcXHRcXHRcXHQgICByeF9wYXVzZSk7XFxuK1xcbitcXHRtYW51YWxfY2hhbmdlZCA9IChjb25maWctXFx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFxcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XFxuK1xcdFxcdFxcdCAoIShwYXVzZV9zdGF0ZSBcXHUwMDI2IE1MT19QQVVTRV9BTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgKGNvbmZpZy1cXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlcGF1c2UgPSBwYXVzZV9zdGF0ZTtcXG4rXFxuK1xcdC8qIFVwZGF0ZSBvdXIgaW4tYmFuZCBhZHZlcnRpc2VtZW50LCB0cmlnZ2VyaW5nIGEgcmVuZWdvdGlhdGlvbiBpZlxcbitcXHQgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwbC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4rXFxuK1xcdC8qIElmIHdlIGhhdmUgYSBQSFksIGEgY2hhbmdlIG9mIHRoZSBwYXVzZSBmcmFtZSBhZHZlcnRpc2VtZW50IHdpbGxcXG4rXFx0ICogY2F1c2UgcGh5bGliIHRvIHJlbmVnb3RpYXRlIChpZiBBTiBpcyBlbmFibGVkKSB3aGljaCB3aWxsIGluIHR1cm5cXG4rXFx0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XFxuK1xcdCAqIHdlIGNhbid0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocGwtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0cGh5X3NldF9hc3ltX3BhdXNlKHBsLVxcdTAwM2VwaHlkZXYsIHJ4X3BhdXNlLCB0eF9wYXVzZSk7XFxuK1xcbitcXHQvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGFcXG4rXFx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXFxuK1xcdCAqIGxpbmsgd2lsbCBjeWNsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtYW51YWxfY2hhbmdlZCkge1xcbitcXHRcXHRwbC1cXHUwMDNlbGlua19mYWlsZWQgPSB0cnVlO1xcbitcXHRcXHRwaHlsaW5rX3J1bl9yZXNvbHZlKHBsKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKipcXG4rICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4rICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXFxuKyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlO1xcbitcXHRpbnQgcGF1c2Vfc3RhdGU7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKG1hY19wYXVzZSBcXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xcbitcXHRcXHRwaHlsaW5rX2VycihwbCwgXFxcIkF0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG9sZF9wYXVzZSA9IHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgXFx1MDAyNiAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcXG4rXFx0aWYgKG9sZF9wYXVzZSA9PSBtYWNfcGF1c2UpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFxcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcXG4rXFx0cGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBtYWNfcGF1c2U7XFxuK1xcbitcXHRwaHlsaW5rX3NldChwbC1cXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XFxuK1xcdHBoeWxpbmtfc2V0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdGxpbmttb2RlX2FuZChwbC1cXHUwMDNlc3VwcG9ydGVkLCBwbC1cXHUwMDNlc3VwcG9ydGVkLCBwbC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRlbHNlIGlmIChwbC1cXHUwMDNlc2ZwX2J1cylcXG4rXFx0XFx0bGlua21vZGVfYW5kKHBsLVxcdTAwM2VzdXBwb3J0ZWQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQsIHBsLVxcdTAwM2VzZnBfc3VwcG9ydCk7XFxuK1xcbitcXHRwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC1cXHUwMDNlc3VwcG9ydGVkLCBjb25maWcpO1xcbitcXG4rXFx0cGF1c2Vfc3RhdGUgPSBjb25maWctXFx1MDAzZXBhdXNlO1xcbitcXG4rXFx0aWYgKCFwaHlsaW5rX3Rlc3QocGwtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKSB7XFxuK1xcdFxcdHBhdXNlX3N0YXRlIFxcdTAwMjY9IH4oTUxPX1BBVVNFX1JYIHwgTUxPX1BBVVNFX1RYKTtcXG4rXFx0fSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKSB7XFxuK1xcdFxcdGlmICgocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKHBhdXNlX3N0YXRlIFxcdTAwMjYgTUxPX1BBVVNFX1RYKSlcXG4rXFx0XFx0XFx0cGF1c2Vfc3RhdGUgXFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xcbitcXG4gLyoqXFxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXFxuICAqIEBjb25maWc6IGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IFxcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcXG5AQCAtMzE5MCw4ICszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcXG4gaW50IHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbiB7XFxuLVxcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuLVxcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XFxuIFxcdGludCBwYXVzZV9zdGF0ZTtcXG4gXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuQEAgLTMyMTUsNTQgKzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gXFx0aWYgKHBhdXNlLVxcdTAwM2V0eF9wYXVzZSlcXG4gXFx0XFx0cGF1c2Vfc3RhdGUgfD0gTUxPX1BBVVNFX1RYO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4tXFx0LypcXG4tXFx0ICogU2VlIHRoZSBjb21tZW50cyBmb3IgbGlua21vZGVfc2V0X3BhdXNlKCksIHdydCB0aGUgZGVmaWNpZW5jaWVzXFxuLVxcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcXG4tXFx0ICogYmU6XFxuLVxcdCAqIGV0aHRvb2wgIExvY2FsIGRldmljZVxcbi1cXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXFxuLVxcdCAqICAwICAgMCAgIDAgICAgIDBcXG4tXFx0ICogIDEgICAwICAgMSAgICAgMVxcbi1cXHQgKiAgMCAgIDEgICAwICAgICAxXFxuLVxcdCAqICAxICAgMSAgIDEgICAgIDFcXG4tXFx0ICogYW5kIHRoZW4gdXNlIHRoZSBldGh0b29sIHJ4L3R4IGVuYWJsZW1lbnQgc3RhdHVzIHRvIG1hc2sgdGhlXFxuLVxcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXFxuLVxcdCAqL1xcbi1cXHRsaW5rbW9kZV9zZXRfcGF1c2UoY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgcGF1c2UtXFx1MDAzZXR4X3BhdXNlLFxcbi1cXHRcXHRcXHQgICBwYXVzZS1cXHUwMDNlcnhfcGF1c2UpO1xcbi1cXG4tXFx0bWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLVxcdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcXHUwMDI2IE1MT19QQVVTRV9BTiB8fFxcbi1cXHRcXHRcXHQgKCEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfQU4pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIChjb25maWctXFx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFxcdTAwMjYgTUxPX1BBVVNFX1RYUlhfTUFTSyk7XFxuLVxcbi1cXHRjb25maWctXFx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XFxuLVxcbi1cXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcXG4tXFx0ICogdGhlIGFkdmVydGlzZW1lbnQgY2hhbmdlZC5cXG4tXFx0ICovXFxuLVxcdGlmICghcGwtXFx1MDAzZXBoeWRldilcXG4tXFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuLVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuLVxcbi1cXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXFxuLVxcdCAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuXFxuLVxcdCAqIGNhbGwgb3VyIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCB0cmlnZ2VyIGEgcmVzb2x2ZS4gIE5vdGUgdGhhdFxcbi1cXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuLVxcdFxcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cXHUwMDNlcGh5ZGV2LCBwYXVzZS1cXHUwMDNlcnhfcGF1c2UsXFxuLVxcdFxcdFxcdFxcdCAgIHBhdXNlLVxcdTAwM2V0eF9wYXVzZSk7XFxuLVxcbi1cXHQvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGFcXG4tXFx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXFxuLVxcdCAqIGxpbmsgd2lsbCBjeWNsZS5cXG4tXFx0ICovXFxuLVxcdGlmIChtYW51YWxfY2hhbmdlZCkge1xcbi1cXHRcXHRwbC1cXHUwMDNlbGlua19mYWlsZWQgPSB0cnVlO1xcbi1cXHRcXHRwaHlsaW5rX3J1bl9yZXNvbHZlKHBsKTtcXG4tXFx0fVxcbitcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbmluZGV4IGI2NWQwZjVmYTFhMDEuLjQ3MjFiYTA3MWNiYmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicmVhbHRlay5oXFxcIlxcbkBAIC0yNjQ2LDQ1ICsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLXtcXG4tXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwMGJhc2VUX0Z1bGxfQklULFxcbi1cXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbi1cXG4tXFx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBvcnQgPSBQT1JUX0ZJQlJFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdGludCB2YWwsIGVycjtcXG4tXFxuLVxcdGVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpO1xcbi1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHZhbDtcXG4tXFxuLVxcdHJ0bGdlbl9kZWNvZGVfcGh5c3IocGh5ZGV2LCB2YWwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxcbkBAIC0yOTM0LDIwICsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQud3JpdGVfcGFnZVxcdD0gcnRsODIxeF93cml0ZV9wYWdlLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXFxuIFxcdFxcdC53cml0ZV9tbWRcXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxcbi1cXHR9LCB7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUmVhbHRlayBTRlAgUEhZIE1vZGVcXFwiLFxcbi1cXHRcXHQuZmxhZ3NcXHRcXHQ9IFBIWV9JU19JTlRFUk5BTCxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSBydGw4MjJ4X3Byb2JlLFxcbi1cXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gcnRsZ2VuX3Jlc3VtZSxcXG4tXFx0XFx0LnJlYWRfcGFnZVxcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5yZWFkX21tZFxcdD0gcnRsODIyeF9yZWFkX21tZCxcXG4tXFx0XFx0LndyaXRlX21tZFxcdD0gcnRsODIyeF93cml0ZV9tbWQsXFxuIFxcdH0sIHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLFxcbiBcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlJUTDgyMjQgMi41R2JwcyBQSFlcXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuQEAgLTg0Miw0ICs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcXG4gXFxuIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcXG4gXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTtcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaCBiL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDcgKzAsMCBAQFxcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbi0jaWZuZGVmIF9SRUFMVEVLX1BIWV9IXFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcXG4tXFxuLSNkZWZpbmVcXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFxcdDB4MDAxY2NiZmZcXG4tXFxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDoxNS41NDM2MTk5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3ODIzOTA3NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCIsXG4gICAgXCJORVRfVkVORE9SX1JFQUxURUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBuZXRkZXYgYW5kIGV0aHRvb2wgY2FsbGJhY2tzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IHBoeWxpbmsgaW50ZWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNjo0MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5AQCAtODYsOCArODYsOCBAQCBjb25maWcgUjgxNjlcbiBcdGRlcGVuZHMgb24gUENJXG4gXHRzZWxlY3QgRldfTE9BREVSXG4gXHRzZWxlY3QgQ1JDMzJcbi1cdHNlbGVjdCBQSFlMSUJcbiBcdHNlbGVjdCBSRUFMVEVLX1BIWVxuK1x0c2VsZWN0IFBIWUxJTktcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cbiBcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5kYzIwNWFjMTJjYjFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjYsMTIgKzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X3F1ZXVlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyODE2OS5oXCJcbiAjaW5jbHVkZSBcInI4MTY5X2Zpcm13YXJlLmhcIlxuQEAgLTk2LDYgKzk2LDI2IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbisjZGVmaW5lIFI4MTI3X1NEU19DTURcdFx0MHgyMzQ4XG4rI2RlZmluZSBSODEyN19TRFNfQUREUlx0XHQweDIzNGFcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX09VVFx0MHgyMzRlXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUNcdEJJVCgwKVxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4rI2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXHQweGViMTBcbisjZGVmaW5lIE9DUF9TRFNfQ01EX1JFR1x0XHQweGViMGVcbisjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuKyNkZWZpbmUgU0RTX0NNRF9SRUFEXHRcdDB4MDAwMVxuKyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRVx0MHg0MFxuKyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVFx0XHQweGRjMDBcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0tcdDB4MDA3OFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURcdFx0MHhkMDA2XG4rI2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0tcdDB4MDBmZlxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuKyNkZWZpbmUgUlRMX1BNX0NUUkxfRDNIT1RcdDB4MDNcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSArMzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuK1x0U0VORF9MVFJfTVNHXHQ9IDB4ZTAzOCxcbiBcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlx0XHRCSVQoMClcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXHRcdEJJVCgxNClcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlx0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiArNzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcbitcdFJUTF9TRlBfTk9ORSxcbitcdFJUTF9TRlBfODE2OF9BRixcbitcdFJUTF9TRlBfODEyN19BVEYsXG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiArNzY0LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuK1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICs3NzksNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgc3BlZWQ7XG4gXG4gXHRzdHJ1Y3Qge1xuIFx0XHRERUNMQVJFX0JJVE1BUChmbGFncywgUlRMX0ZMQUdfTUFYKTtcbkBAIC03NjIsNyArNzkyLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiArODAzLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCArMTE2MCw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuIFx0aWYgKHJ0bF9vY3BfcmVnX2ZhaWx1cmUocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBSZXR1cm4gZHVtbXkgTUlJX1BIWVNJRDIgaW4gU0ZQIG1vZGUgdG8gbWF0Y2ggU0ZQIFBIWSBkcml2ZXIgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSBcdTAwMjZcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICsxMjI3LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuK0RFQ0xBUkVfUlRMX0NPTkQocjgxMjdfc2RzX2NtZF9jb25kKVxuK3tcbitcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbitcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuK1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4re1xuK1x0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcbitcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbitcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbitcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xuK1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuK1xuK1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuK1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuK1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuK1xuK1x0dmFsID0gcjgxNjhfcGh5X29jcF9yZWFkKHRwLCAweGM4MDQpO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpbnQgdmFsO1xuQEAgLTEyMTcsMTIgKzEzMTIsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiArMTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFx1MDAyNlx1MDAyNlxuK1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4rXHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cbitcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxuIHtcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVx1MDAzZW9jcF9iYXNlICsgcmVnKTtcbkBAIC0xNTc4LDYgKzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XG4rXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbitcdFx0XHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcbitcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbitcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbitcdH1cbitcbitcdHJldHVybiBSVExfU0ZQX05PTkU7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgKzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4rXHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICsxODAyLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcbiBcdFx0ICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgKzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMjA3NCwxMSArMjE4NCwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuK1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2krKykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuK1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkO1xuK1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICsyMzY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcwLDcgKzIzODAsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyArMjQxMSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XG4tXG4tXHRwaHlfZ2V0X3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgXHUwMDI2dHhfcGF1c2UsIFx1MDAyNnJ4X3BhdXNlKTtcbiBcbi1cdGRhdGEtXHUwMDNlYXV0b25lZyA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhdXRvbmVnO1xuLVx0ZGF0YS1cdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XG4tXHRkYXRhLVx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcbitcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICsyNDIzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzODYsMzQgKzI0ODksMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdGludCBkdXBsZXggPSBjbWQtXHUwMDNlYmFzZS5kdXBsZXg7XG4tXHRpbnQgc3BlZWQgPSBjbWQtXHUwMDNlYmFzZS5zcGVlZDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcbi1cbi1cdGlmIChjbWQtXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRydGxfc2ZwX2luaXQodHApO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4rfVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG5AQCAtMjQzMSwxMCArMjUyNywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbkBAIC0yNDk5LDkgKzI1OTUsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiArMjYzNSw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICsyNjUxLDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdCAgICB0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxuIFx0XHRwaHlfd3JpdGVfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XG4gXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJ0bF9zZnBfaW5pdCh0cCk7XG4tXG4gXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXG4gXHRwaHlfc3BlZWRfdXAodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC0yNjU3LDE1ICsyNzUzLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgKzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE5NSwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiArMzIzMSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIFx0LyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xuK1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4rXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XG4gXHRcdFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXG4gXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcbkBAIC0zMTY0LDYgKzMyNzgsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICszNzcyLDQxIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZXBfMyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbitcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbitcdGludCBmdW5jLCBwb3M7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYysrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuK1x0XHRpZiAocG9zKSB7XG4rXHRcdFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuK1xuK1x0XHRcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4rXHRcdH1cbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4rXHRcdGlmIChwb3MpIHtcbitcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4rXG4rXHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4rXHRcdFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIHZhbCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICszODQzLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIFx0cnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTtcbiBcbi1cdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbi1cdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4tXHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbitcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuK1x0XHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuK1x0XHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbiBcbi1cdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuLVx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbitcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4rXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcbkBAIC00MTM5LDEyICs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXHUwMDNlbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4rXHRib29sIGp1bWJvX2FmdGVyID0gbmV3X210dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuIFxuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuIFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcbiBcbitcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcbitcbitcdFx0aWYgKCFqdW1ib19hZnRlcilcbitcdFx0XHRjYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1xuK1x0XHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVx1MDAzZXBoeWxpbmssIGNhcHMpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4NjksOCArNTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpXG4tXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VwaHlkZXYpXG4rXHRcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4rXHRcdFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVx1MDAzZXBoeWxpbmssXG4rXHRcdFx0XHRcdCAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSBcdTAwMjYgTGlua1N0YXR1cykpO1xuK1x0fVxuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5AQCAtNDkzMCw5ICs1MDk4LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiB7XG4tXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdC8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqL1xuQEAgLTQ5NjMsNDAgKzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuLVxuLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHtcbi1cdFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwKTtcbi1cdFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VlbmFibGVfdHhfbHBpKTtcbi1cdFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRwbV9ydW50aW1lX2lkbGUoZCk7XG4tXHR9XG4tXG4tXHRwaHlfcHJpbnRfc3RhdHVzKHRwLVx1MDAzZXBoeWRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiBcdGludCByZXQ7XG4gXG4tXHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4tXHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4tXG4tXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QodHAtXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcbi1cdFx0XHRcdCBwaHlfbW9kZSk7XG4tXHRpZiAocmV0KVxuK1x0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rLCB0cC1cdTAwM2VwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gY29ubmVjdCBwaHlcXG5cIik7XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4tXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi1cbi1cdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTAwNywxMCArNTE0Nyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4tXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4gXHRcdHJ0bF9zZnBfcmVzZXQodHApO1xuIFxuIFx0cnRsODE2OV91cGRhdGVfY291bnRlcnModHApO1xuQEAgLTUwMzIsMTQgKzUxNzAsMTIgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbitcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4tXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtNTA0OSwxMyArNTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuK1x0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xuIFx0cnRsODE2OV9kb3duKHRwKTtcbiBcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuIFxuIFx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4gXG4tXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiwxMSArNTI0OSwxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbi1cbitcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuK1x0XHRpZiAocmV0dmFsKVxuK1x0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuK1x0fVxuIFx0cnRsODE2OV91cCh0cCk7XG4rXHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIG91dDpcbkBAIC01MjIxLDYgKzUzNjAsOSBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiBcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cbiBcdHJ0bF9pbml0X3J4Y2ZnKHRwKTtcbiBcbitcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbitcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4rXG4gXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xuIH1cbiBcbkBAIC01Mjg4LDYgKzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXHUwMDNlbGVkcyk7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cdTAwM2VkZXYpO1xuK1x0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgKzU0NTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuK1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQ3NCwxNiArNTYxNyw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICs1NzMyLDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuK1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4rXG4rXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0aWYgKCF0cC1cdTAwM2VwY3Mub3BzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4rXHRcdHJldHVybiBcdTAwMjZ0cC1cdTAwM2VwY3M7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbit9XG4rXG4rc3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTE2IHZhbCA9IDA7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4rXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHR1MTYgc3RhdDE7XG4rXG4rXHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xuK1xuK1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbitcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuK1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4rXHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbitcbitcdFx0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4rXHR9IGVsc2Uge1xuK1x0XHR1MTYgYm1zciwgbHBhO1xuK1xuK1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSArIE1JSV9CTVNSKTtcbitcdFx0bHBhID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSArIE1JSV9MUEEpO1xuK1x0XHRwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuK1x0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxuK1x0XHRcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHRzd2l0Y2ggKGludGVyZmFjZSkge1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbitcdFx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4rXHRcdFx0cjgxMjdfc2ZwX2luaXRfMWcodHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbit7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XG4rXHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4rXHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxuK1x0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXG4rXHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4rXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcbitcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcbit9O1xuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4rXG4rXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuK1xuK1x0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnNcbitcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXG4rXHQgKi9cbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4rXHRcdGNhcHMgfD0gTUFDXzI1MDBGRDtcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuK1x0XHRjYXBzIHw9IE1BQ18xMDAwMEZEO1xuK1xuK1x0cmV0dXJuIGNhcHM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XG4rXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXG4rXHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbitcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxuK1x0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4rXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4rXG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcdTAwMjZ0cC1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xuK1xuK1x0c3dpdGNoICh0cC1cdTAwM2VzZnBfbW9kZSkge1xuK1x0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XG4rXHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcbitcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4rXHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XG4rXHRcdGVsc2VcbitcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbitcdFx0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbitcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdGlmICh0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzKVxuK1x0XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9pbnRlcmZhY2VzKTtcbitcbitcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuK1x0XHRcdCAgICBwaHlfbW9kZSwgXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XG4rXHRpZiAoSVNfRVJSKHBsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiArNjA0MSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcbiBcdHRwLVx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cdTAwM2VtYWNfdmVyc2lvbjtcbiBcdHRwLVx1MDAzZWZ3X25hbWUgPSBjaGlwLVx1MDAzZWZ3X25hbWU7XG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiArNjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbitcdHRwLVx1MDAzZXNmcF9tb2RlID0gcnRsX2dldF9zZnBfbW9kZSh0cCk7XG4gXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbkBAIC01Nzg4LDEzICs2MTU4LDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XG4rXHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4rXHRpZiAocmMpIHtcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDYgKzYxOTcsOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuK1x0aWYgKHJ0bF9pc184MTE2YWYodHApKVxuK1x0XHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cdTAwM2VwY2lfZGV2KTtcbitcbiBcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggNTlkZmUzNWFmYTU0Zi4uMzRhMGU0ZjliM2RkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xODI4LDYgKzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zZXRfZml4ZWRfbGluayk7XG4gXG4rLyoqXG4rICogcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoKSAtIFVwZGF0ZSB0aGUgcGh5bGluayBwYXVzZSBmcmFtZSBjb25maWd1cmF0aW9uXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayBpbnN0YW5jZVxuKyAqIEBwYXVzZV9zdGF0ZTogYml0bWFzayBpbmRpY2F0aW5nIHRoZSBuZXcgcGF1c2Ugc3RhdGVcbisgKlxuKyAqIFVwZGF0ZSB0aGUgTUFDIHBhdXNlIGZyYW1lIChmbG93IGNvbnRyb2wpIHN0YXRlIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZS5cbisgKi9cbitzdGF0aWMgdm9pZCBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIGludCBwYXVzZV9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbitcdGJvb2wgdHhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX1RYKTtcbitcdGJvb2wgcnhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX1JYKTtcbitcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBsaW5rbW9kZV9zZXRfcGF1c2UoKSwgd3J0IHRoZSBkZWZpY2llbmNpZXNcbitcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbitcdCAqIGJlOlxuK1x0ICogZXRodG9vbCAgTG9jYWwgZGV2aWNlXG4rXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4rXHQgKiAgMCAgIDAgICAwICAgICAwXG4rXHQgKiAgMSAgIDAgICAxICAgICAxXG4rXHQgKiAgMCAgIDEgICAwICAgICAxXG4rXHQgKiAgMSAgIDEgICAxICAgICAxXG4rXHQgKiBhbmQgdGhlbiB1c2UgdGhlIGV0aHRvb2wgcngvdHggZW5hYmxlbWVudCBzdGF0dXMgdG8gbWFzayB0aGVcbitcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9wYXVzZShjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLFxuK1x0XHRcdCAgIHJ4X3BhdXNlKTtcbitcbitcdG1hbnVhbF9jaGFuZ2VkID0gKGNvbmZpZy1cdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XG4rXHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9UWFJYX01BU0spO1xuK1xuK1x0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4rXG4rXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcbitcdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4rXHQgKi9cbitcdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuK1x0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4rXG4rXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXG4rXHQgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVyblxuK1x0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4rXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxuK1x0ICovXG4rXHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuK1x0XHRwaHlfc2V0X2FzeW1fcGF1c2UocGwtXHUwMDNlcGh5ZGV2LCByeF9wYXVzZSwgdHhfcGF1c2UpO1xuK1xuK1x0LyogSWYgdGhlIG1hbnVhbCBwYXVzZSBzZXR0aW5ncyBjaGFuZ2VkLCBtYWtlIHN1cmUgd2UgdHJpZ2dlciBhXG4rXHQgKiByZXNvbHZlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZTsgd2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCB0aGVcbitcdCAqIGxpbmsgd2lsbCBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKG1hbnVhbF9jaGFuZ2VkKSB7XG4rXHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbitcdFx0cGh5bGlua19ydW5fcmVzb2x2ZShwbCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuKyAqIEBtYWNfcGF1c2U6IHRoZSBuZXcgTUFDIHBhdXNlIGNhcGFiaWxpdGllcyBtYXNrXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIE1BQyBkcml2ZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIGl0cyBwYXVzZSBzdGF0ZSxcbisgKiBzdWNoIGFzIGxvc2luZy9nYWluaW5nIFBhdXNlIGZyYW1lIHN1cHBvcnQgYmFzZWQgb24gTVRVIHNpemUuXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbisgKi9cbit2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSlcbit7XG4rXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbitcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlO1xuK1x0aW50IHBhdXNlX3N0YXRlO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuK1x0XHRwaHlsaW5rX2VycihwbCwgXCJBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbGRfcGF1c2UgPSBwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjYgKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XG4rXHRpZiAob2xkX3BhdXNlID09IG1hY19wYXVzZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4rXG4rXHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbitcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTtcbitcbitcdHBoeWxpbmtfc2V0KHBsLVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpO1xuK1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKTtcbitcbitcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4rXHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXHRlbHNlIGlmIChwbC1cdTAwM2VzZnBfYnVzKVxuK1x0XHRsaW5rbW9kZV9hbmQocGwtXHUwMDNlc3VwcG9ydGVkLCBwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXNmcF9zdXBwb3J0KTtcbitcbitcdHBoeWxpbmtfdmFsaWRhdGUocGwsIHBsLVx1MDAzZXN1cHBvcnRlZCwgY29uZmlnKTtcbitcbitcdHBhdXNlX3N0YXRlID0gY29uZmlnLVx1MDAzZXBhdXNlO1xuK1xuK1x0aWYgKCFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSkpIHtcbitcdFx0cGF1c2Vfc3RhdGUgXHUwMDI2PSB+KE1MT19QQVVTRV9SWCB8IE1MT19QQVVTRV9UWCk7XG4rXHR9IGVsc2UgaWYgKCFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKSkge1xuK1x0XHRpZiAoKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxuK1x0XHRcdHBhdXNlX3N0YXRlIFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xuK1xuIC8qKlxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXG4gICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXG5AQCAtMzE5MCw4ICszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcbiBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuIHtcbi1cdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFx1MDAyNnBsLVx1MDAzZWxpbmtfY29uZmlnO1xuLVx0Ym9vbCBtYW51YWxfY2hhbmdlZDtcbiBcdGludCBwYXVzZV9zdGF0ZTtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG5AQCAtMzIxNSw1NCArMzMzMyw3IEBAIGludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0aWYgKHBhdXNlLVx1MDAzZXR4X3BhdXNlKVxuIFx0XHRwYXVzZV9zdGF0ZSB8PSBNTE9fUEFVU0VfVFg7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbi1cdC8qXG4tXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBsaW5rbW9kZV9zZXRfcGF1c2UoKSwgd3J0IHRoZSBkZWZpY2llbmNpZXNcbi1cdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbi1cdCAqIGJlOlxuLVx0ICogZXRodG9vbCAgTG9jYWwgZGV2aWNlXG4tXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4tXHQgKiAgMCAgIDAgICAwICAgICAwXG4tXHQgKiAgMSAgIDAgICAxICAgICAxXG4tXHQgKiAgMCAgIDEgICAwICAgICAxXG4tXHQgKiAgMSAgIDEgICAxICAgICAxXG4tXHQgKiBhbmQgdGhlbiB1c2UgdGhlIGV0aHRvb2wgcngvdHggZW5hYmxlbWVudCBzdGF0dXMgdG8gbWFzayB0aGVcbi1cdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4tXHQgKi9cbi1cdGxpbmttb2RlX3NldF9wYXVzZShjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlLVx1MDAzZXR4X3BhdXNlLFxuLVx0XHRcdCAgIHBhdXNlLVx1MDAzZXJ4X3BhdXNlKTtcbi1cbi1cdG1hbnVhbF9jaGFuZ2VkID0gKGNvbmZpZy1cdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XG4tXHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9UWFJYX01BU0spO1xuLVxuLVx0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4tXG4tXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcbi1cdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4tXHQgKi9cbi1cdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuLVx0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4tXG4tXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXG4tXHQgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVyblxuLVx0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4tXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxuLVx0ICovXG4tXHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuLVx0XHRwaHlfc2V0X2FzeW1fcGF1c2UocGwtXHUwMDNlcGh5ZGV2LCBwYXVzZS1cdTAwM2VyeF9wYXVzZSxcbi1cdFx0XHRcdCAgIHBhdXNlLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdC8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYVxuLVx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXG4tXHQgKiBsaW5rIHdpbGwgY3ljbGUuXG4tXHQgKi9cbi1cdGlmIChtYW51YWxfY2hhbmdlZCkge1xuLVx0XHRwbC1cdTAwM2VsaW5rX2ZhaWxlZCA9IHRydWU7XG4tXHRcdHBoeWxpbmtfcnVuX3Jlc29sdmUocGwpO1xuLVx0fVxuK1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxLi40NzIxYmEwNzFjYmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyArMTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL3BoeWxpYi5oXCJcbiAjaW5jbHVkZSBcInJlYWx0ZWsuaFwiXG5AQCAtMjY0Niw0NSArMjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgKzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCJSZWFsdGVrIFNGUCBQSFkgTW9kZVwiLFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCJSVEw4MjI0IDIuNUdicHMgUEhZXCIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuQEAgLTg0Miw0ICs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbiB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpO1xuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbisrKyAvZGV2L251bGxcbkBAIC0xLDcgKzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTUuNTQzNjQ5OTI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNTY0NDk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGZ1enogdGhlc2UgY2hhbmdlcz9cIiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBtb2RpZmljYXRpb25zIHRvIGByODE2OV9tYWluLmNgLCBgcGh5bGluay5jYCwgYW5kIGEgZmV3IHJlbGF0ZWQgaW5jbHVkZSBmaWxlcy4gVGhlIGRyaXZlcidzIGJlaW5nIGNvbnZlcnRlZCB0byB1c2UgcGh5bGluaywgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyBpcyBhZGRlZCwgYW5kIHRoZXJlJ3MgYSBuZXcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IFwiQ2FuIHN5emthbGxlciBnZXQgdG8gaXQ/XCJcblxuVGhlIGByODE2OWAgZHJpdmVyIGlzIGZvciBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXJzLiBRRU1VIGVtdWxhdGVzIHRoZSBvbGRlciBgcnRsODEzOWAsIG5vdCBgcjgxNjlgLCBzbyB0aGF0J3MgYSBkZWFkIGVuZCBmb3IgZGlyZWN0IFFFTVUgZW11bGF0aW9uLiBCdXQsIHdhaXQuLi4gZG9lcyB0aGF0ICpyZWFsbHkqIG1hdHRlcj8gU3l6a2FsbGVyIGhhcyB0aGlzIFBDSSBmdXp6ZXIsIHJpZ2h0PyBJdCBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXJ0dWFsIFBDSSBkZXZpY2VzIHZpYSBgc3l6X3BjaV9zZXR1cGAuIEl0IGRvZXNuJ3QgbmVlZCB0aGUgc3BlY2lmaWMgZGV2aWNlIHRvIGJlIGVtdWxhdGVkIGJ5IHRoZSBWTS4gVGhhdCdzIGtleS4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gcG9rZSBhdCBgcjgxNjlfbWFpbi5jYCBubyBwcm9ibGVtLCBJIHRoaW5rLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwaHlsaW5rLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBsaW5rIGNvZGUuIFRoZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgZnVuY3Rpb24gaXMgYWRkZWQgYW5kIGV4cG9ydGVkLiBQaHlsaW5rIGlzIHVzZWQgYnkgbG90cyBvZiBuZXR3b3JrIGRyaXZlcnMuIFRoZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAgc28gdGhpcyBpcyByZWFjaGFibGUuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggZmFsbHMgaW50byB0aGUgXCJub3Qgd29ydGggZnV6emluZ1wiIGNhdGVnb3J5LiBUaGUgcHJvbXB0IHNheXMgd2Ugc2hvdWxkIHNraXAgY29kZSB0aGF0IGlzIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBJdCBhbHNvIHNheXMgd2Ugc2hvdWxkIHNraXAgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGxpa2UgU21hcnROSUMgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgcjgxNjlgIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIG9yIHN3aXRjaD8gTm8sIGl0J3MganVzdCBhIHJlZ3VsYXIgRXRoZXJuZXQgTklDLlxuXG5TeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGZ1enogdGhpcyBpZiB0aGUgUENJIGRyaXZlciBjYW4gYmUgZm91bmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHI4MTY5YCBpcyBpbiBzeXprYWxsZXIncyBrZXJuZWwgY29uZmlnLCBzbyBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIGZpbGUuIFl1cCwgdGhlcmUgaXMgYW4gYFI4MTY5YCB0aGF0IGlzIGRlcGVuZGVudCBvbiBgUENJYC4gQW5kLCB0aGVyZSBhcmUgYHJ0bDgxNjlfcGNpX3RibGAgc28gd2UgaGF2ZSBzcGVjaWZpYyBQQ0kgSURzLiBFeGNlbGxlbnQhXG5cbk9rYXksIHNvIGlzIHBoeWxpbmsgcmVhY2hhYmxlPyBJdCBpcyBiZWNhdXNlIHRoZSBmdW5jdGlvbnMgYHBoeWxpbmsuY2AgYXJlIGNvcmUgbmV0d29ya2luZyBjb2RlIHVzZWQgYnkgUEhZcy4gVGhpcyBjYW4gYmUgcmVhY2hhYmxlIGJ5IGFueSBlbXVsYXRlZCBkZXZpY2UgdGhhdCB1c2VzIGBwaHlsaW5rYCwgYW5kIHRoZXJlIGFyZSBzb21lLlxuXG5TbywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXMgaW4gYHI4MTY5X21haW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdGhhdCBjb25maWd1cmUgdGhlIE1BQyAoaW5jbHVkaW5nIG9uZSB0aGF0IGRpc2FibGVzIFRYIExQSSBhbmQgZW5hYmxlcyBpdCksIGFuZCBleGlzdGluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIChsaWtlIGBydGw4MTY5X2NoYW5nZV9tdHVgIGFuZCBgcnRsODE2OV9pb2N0bGApIHNvIHRob3NlIG5lZWQgdG8gYmUgY2hlY2tlZC4gU2luY2UgdGhlIGNoYW5nZXMgaGVyZSBhZGQgbmV3IGNvZGUgYW5kIG1vZGlmeSBleGlzdGluZyBjb2RlLCBhbmQgc2luY2Ugc3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gKmRlZmluaXRlbHkqIGJlIHVzZWQgdG8gdGVzdCB0aGUgY2hhbmdlcyB3aXRoaW4gYHI4MTY5YCwgSSdtIGdvaW5nIHRvIHNheSB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMgdGhhdCBldmVuIGlmIHRoZSBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBzaW11bGF0ZXMgdGhlIFBDSSBkZXZpY2UgYW5kIHRoZW4gcmVhZHMgYW5kIHdyaXRlcyB0aGUgTU1JTy9QSU8uXG5cbmByODE2OWAgaXMgYSBzdGFuZGFyZCBQQ0kgZHJpdmVyLCBhbmQgc3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXIuIFRoaXMgc2hvdWxkIGJlIGdvb2QuIEFsc28sIGBwaHlsaW5rLmNgIGlzIGJlaW5nIG1vZGlmaWVkLCBzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBhbiBlbXVsYXRlZCBkcml2ZXIgdXNlcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NDIuNjAwMTAyMzIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTY1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA4NjpcXHRicC1cXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZicC1cXHUwMDNlcGh5bGlua19jb25maWcsIGJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYuZndub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4Ny1cXHRcXHRcXHRcXHQgICAgIGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlLCBcXHUwMDI2bWFjYl9waHlsaW5rX29wcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjQyLjkxNTc2NjM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjg0MzUxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBQSFkgTGlua3MgYW5kIFJlbGV2YW50IENvbnRyb2xsZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGlzIGVtYmVkZGVkIHN5c3RlbXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgUEhZIGxheWVyIGludGVyYWN0aW9ucy4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGBtYWNiYCBkcml2ZXIgdXRpbGl6ZXMgYHBoeWxpbmtgLCB0aGF0IG11Y2ggSSBrbm93LiBOb3csIEknbSB0cnlpbmcgdG8gbWFrZSBhIGNvbm5lY3Rpb24gcmVnYXJkaW5nIGBmZWNgLCB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciwgYmVjYXVzZSBJIHJlbWVtYmVyIGl0J3MgZW11bGF0ZWQgYnkgUUVNVSB3aGVuIHJ1bm5pbmcgaS5NWCBib2FyZCBpbWFnZXMuIFRoZSBxdWVzdGlvbiB0aGF0IGhhcyBwb3BwZWQgaW50byBteSBoZWFkIGlzLCBkb2VzIGBmZWNgLCB3aGVuIGVtdWxhdGVkLCBhbHNvIHJlbHkgb24gYHBoeWxpbmtgPyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSBpcyBhIGNvbnNpc3RlbnQgYXBwcm9hY2ggYWNyb3NzIHRoZXNlIGltcGxlbWVudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ni45ODQyMDU0OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMTkzNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMDE9c3RhdGljIGludCBkcGFhX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXFx0bWFjX2Rldi1cXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcXHRtYWNfZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNm1hY19kZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVxcdFxcdFxcdFxcdFxcdCAgZGV2X2Z3bm9kZShtYWNfZGV2LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jPTU2MD1pbnQgZHBhYTJfbWFjX2Nvbm5lY3Qoc3RydWN0IGRwYWEyX21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM6NjI1OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bWFjLVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVxcdFxcdFxcdFxcdCBkcG1hY19ub2RlLCBtYWMtXFx1MDAzZWlmX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTMxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTUwOlxcdGVyciA9IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHByaXYsIG5vZGUsIFxcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUxLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUyLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTUzOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05NTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTU4OmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU5LVxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz03OTU9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo4Nzg6XFx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXFx1MDAyNmVuZXRjX21hY19waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODc5LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODgwOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg4OS1cXHRlbmV0Y19waHlsaW5rX2Rlc3Ryb3kocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODkwOmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04OTEtXFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz00MTk9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0MjE6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDIyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYxLVxcdHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gbWFjX2NhcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjQ2MjpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYzLVxcdFxcdFxcdFxcdCBwZi1cXHUwMDNlaWZfbW9kZSwgb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NzItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0NzM6RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfcGh5bGlua19jcmVhdGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg9MTI9dm9pZCBlbmV0Y19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IGVuZXRjX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oOjEzOmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oLTE0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9ODUzPXN0YXRpYyBpbnQgZnNfZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTkzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo5MzM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZmZXAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKGZlcC1cXHUwMDNlZGV2KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzQtXFx0XFx0XFx0XFx0IHBoeV9tb2RlLCBcXHUwMDI2ZnNfZW5ldF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzQxOT1zdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIG9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozNTc0OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dWdldGgtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKFxcdTAwMjZkZXYtXFx1MDAzZWRldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3NS1cXHRcXHRcXHRcXHQgcGh5X2ludGVyZmFjZSwgXFx1MDAyNnVnZXRoX21hY19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ny4yNjU0MDY3NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIxOTQzNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua2AgaXMgYSBkZXBlbmRlbmN5LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGByODE2OV9tYWluLmNgIGRpcmVjdGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgcjgxNjlgIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYSBzdGFuZGFyZCBOSUMgZHJpdmVyLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfUjgxNjlgLCBvZiBjb3Vyc2UuIEFuZCwgdGhlIGZhY3QgdGhhdCBgUjgxNjlgIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCBtZWFucyB0aGF0J3MgYXV0b21hdGljYWxseSBpbmNsdWRlZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBnbGFuY2UgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjUxLjQ4NzM1MzEyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIFJYLXJlc2V0IG1ldGhvZCBzaG91bGQgYmUgYWRlcXVhdGUgZm9yIGFsbCBib2FyZHMuICBCdXQgaWYgeW91XFxuICA4MTpcXHRcXHQgIGV4cGVyaWVuY2UgcHJvYmxlbXMsIHlvdSBjYW4gZW5hYmxlIHRoaXMgb3B0aW9uIHRvIHJlc3RvcmUgdGhlXFxuICA4MjpcXHRcXHQgIG9sZCBSWC1yZXNldCBiZWhhdmlvci4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MzpcXHRcXG4gIDg0OlxcdGNvbmZpZyBSODE2OVxcbiAgODU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDg3OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDg4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODk6XFx0XFx0c2VsZWN0IFJFQUxURUtfUEhZXFxuICA5MDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xcbiAgOTM6XFx0XFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbiAgOTQ6XFx0XFx0ICBSVEw4MTY5IEdpZ2FiaXQgRXRoZXJuZXRcXG4gIDk1OlxcdFxcdCAgUlRMODE2OCBHaWdhYml0IEV0aGVybmV0XFxuICA5NjpcXHRcXHQgIFJUTDgxMDEgRmFzdCBFdGhlcm5ldFxcbiAgOTc6XFx0XFx0ICBSVEw4MTI1IDIuNUdCaXQgRXRoZXJuZXRcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjUxLjQ4NzQ0MTQxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTQwNzk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlYWx0ZWsgRHJpdmVyIHdpdGggUGh5bGluayBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUmVhbHRlayBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlbGF0ZWQgdG8gYENPTkZJR19SODE2OWAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbi4gTm93LCBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyBpbnRlcmVzdGluZywgaXQncyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyBhIGRlcGVuZGVuY3kuIE9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGEgYmFzZSBkZXBlbmRlbmN5IGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50ZWdyYXRpb24gd2l0aCBgcGh5bGlua2AsIGluZGljYXRlZCBieSB0aGUgcGF0Y2ggbW9kaWZ5aW5nIGByODE2OV9tYWluLmNgLiBMZXQncyBzZWUuLi4gYSBidW5jaCBvZiBmdW5jdGlvbnMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkOiBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX3ZhbGlkYXRlYCwgYHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnRgLCBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX2luaXRfcGh5bGlua2AsIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X253YXlfcmVzZXRgLCBhbmQgdGhlbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaW4gYHBoeWxpbmsuY2AuXG5cbk9rYXksIHNvIEknbSBnb2luZyB0byBjaGVjayB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBJdCdzIGluIGBwaHlsaW5rLmNgLCBzbyBpdCBtaWdodCBiZSBleHBvcnRlZC4gWWVwLCBgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyk7YC4gVGhhdCdzIGdvb2QuIEFuZCBpdCdzIGNhbGxlZCBmcm9tIGBydGw4MTY5X2NoYW5nZV9tdHVgLiBTaW5jZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgYW4gaW50ZXJlc3RpbmcgZnVuY3Rpb24sIEkgc2hvdWxkIGZvY3VzIGZ1enppbmcgZWZmb3J0cyBvbiBgcnRsODE2OV9jaGFuZ2VfbXR1YCB0b28uXG5cbkFsc28sIHNpbmNlIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgIGFyZSBleHBvc2VkIGFzIGV0aHRvb2wgYW5kIG5ldGRldiBvcHMsIEkga25vdyB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bCBvciBuZXRsaW5rLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFzIHdlbGwuIFRoZXNlIGxvb2sgbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo1OS4zNDE1MjMwNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg4OTM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI1Nj1zdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNDI5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo0MjkxOnN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQyOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1MS1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU0NTI6XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBydGw4MTY5X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1My1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjU5LjQ1NTQxNzQzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTE2MDg2MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWFsdGVrIDgxNjkgRHJpdmVyIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjb25maXJtaW5nIHRoZSBjYWxsYmFjayBtYXBwaW5ncy4gYHJ0bDgxNjlfY2hhbmdlX210dWAgY29ycmVzcG9uZHMgdG8gdGhlIGBuZG9fY2hhbmdlX210dWAgY2FsbGJhY2ssIHN0cmFpZ2h0Zm9yd2FyZC4gYHJ0bDgxNjlfaW9jdGxgIGlzIGhhbmRsaW5nIGBuZG9fZXRoX2lvY3RsYCwgYXMgZXhwZWN0ZWQuIEknbSBhbHNvIGNvbmZpcm1pbmcgdGhlIGV0aHRvb2wgb3BlcmF0aW9uczogYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCBmb3IgYGdldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBzZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAgZm9yIHRoZSBgbndheV9yZXNldGAgb3BlcmF0aW9uLiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIHBoeWxpbmsgY29yZSBmdW5jdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gbGlzdCB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIgY29udGV4dC4gSSBoYXZlOlxuXG4qICAgYHJ0bDgxNjlfY2hhbmdlX210dWBcbiogICBgcnRsODE2OV9pb2N0bGBcbiogICBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgXG4qICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYFxuKiAgIGBydGw4MTY5X253YXlfcmVzZXRgXG4qICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgXG5cbldhaXQgYSBtaW51dGUsIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBmdW5jdGlvbnMgc3VjaCBhcyBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX3ZhbGlkYXRlYCwgYHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnRgLCBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAsIGFuZCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYXBwZWFyIHRvIGJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHI4MTY5X21haW4uY2AuIFRoZXNlIG1heSBiZSBpbmxpbmVkLCBzbyBpdCBpcyBiZXR0ZXIgdG8gcHJpb3JpdGl6ZSB0aGUgZW50cnkgcG9pbnRzLCB3aGljaCByZW1haW46XG5cbiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YFxuKiAgIGBydGw4MTY5X2lvY3RsYFxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2BcbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG4qICAgYHJ0bDgxNjlfbndheV9yZXNldGBcbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2BcblxuRmluYWxseSwgYmVmb3JlIEkgZGlnIGZ1cnRoZXIsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBhcyBJIGhhdmUganVzdCBub3RlZCB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTowNy4zNzE1MDYyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQ4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODMxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzMtICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzNy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4Mzg6c3RhdGljIHZvaWQgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoc3RydWN0IHBoeWxpbmsgKnBsLCBpbnQgcGF1c2Vfc3RhdGUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTkwND12b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5NDc6XFx0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzEwPWludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzM1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzMzNjpcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MDcuNDUwNjU5ODM2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjM2ODk4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUGF1c2UgRnJhbWUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAgaXMgZGVmaW5pdGVseSBzdGF0aWMg4oCTIHRoYXQncyBnb29kIHRvIGtub3csIHdlIGNhbiBkaXNyZWdhcmQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBpbnN0ZWFkLCBzaW5jZSB0aG9zZSBhcmUgdGhlIGFjdGl2ZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBoYXMgYmVlbiBjaGFuZ2VkLiBBaCwgeWVzLCBpdCAqaGFzKiBiZWVuIG1vZGlmaWVkOyBpdCBjYWxscyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgLCB3aGljaCBjb25maXJtcyBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGludmVzdGlnYXRpb24uXG5cblRoZSBuZXh0IHBvaW50IEkgbmVlZCB0byBjb25zaWRlciBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgKm5lZWRlZCouIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgQ09ORklHX1I4MTY5YCBhbmQgYENPTkZJR19QSFlMSU5LYC4gYENPTkZJR19QSFlMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJ5IGBSODE2OWAsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgSSBzaG91bGQgbGlzdCBpdCBleHBsaWNpdGx5IGFueXdheSwgc28gSSB3aWxsLiBBbmQgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiB0aGUgS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cblxuYFI4MTY5YCBkZXBlbmRzIG9uIGBQQ0lgLiBgUENJYCBpcyBzdGFuZGFyZCwgc28gSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBBaCwgeWVzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyB1bmRlciBgTkVUX1ZFTkRPUl9SRUFMVEVLYC4gR29vZCB0byBrZWVwIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjEyLjkxNDM1Mjg0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfUkVBTFRFS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUmVhbHRlayBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxMi45NzM5MDAzOTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MzM1NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYE5FVF9WRU5ET1JfUkVBTFRFS2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgTkVUX1ZFTkRPUl9SRUFMVEVLYC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJ3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyP1wiIElzIGl0IHB1cmVseSBzZWxmLWNvbnRhaW5lZCwgb3IgZG9lcyBpdCB0b3VjaCBhcmVhcyBsaWtlIG5ldHdvcmtpbmcgc3RhY2sgaW50ZXJuYWxzLCBwb3dlciBtYW5hZ2VtZW50LCBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIG1vZHVsZSdzIGludGVyYWN0aW9ucyB0byBlbnN1cmUgbm90aGluZyBnZXRzIG92ZXJsb29rZWQgZHVyaW5nIHRyb3VibGVzaG9vdGluZy4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxNi4xMjcyNTkxODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSZWFsdGVrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX1JFQUxURUtcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlJlYWx0ZWsgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDE0OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTU6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFJlYWx0ZWsgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX1JFQUxURUtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIDgxMzlDUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxNi4xMjczOTQyMTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MzAzOTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgUmVhbHRlayBkcml2ZXJzIGFyZSBoYW5kbGVkLiBgTkVUX1ZFTkRPUl9SRUFMVEVLYCBpcyBlc3NlbnRpYWwsIGFuZCB0aGFua2Z1bGx5LCBpdCBkZWZhdWx0cyB0byAneScgYW5kIGRlcGVuZHMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgdGhpbmsgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFI4MTY5YCBpcyBpbmNsdWRlZCBpbiBvdXIgYEVuYWJsZUNvbmZpZ3NgLCBhcyBhIHByZWNhdXRpb24uIE5vdywgd2hhdCBhYm91dCBgUEhZTElOS2A/IEl0J3Mgc2VsZWN0ZWQgYnkgYFI4MTY5YCwgc28gbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGp1c3QgaW5jbHVkZSBpdCBhcyB3ZWxsLCB0byBiZSBzYWZlLiBCdXQgd2FpdCwgaG9sZCBvbi4gYFBIWUxJTktgIGlzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB1c2VkIGJ5IGEgKmxvdCogb2YgZHJpdmVycy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIGZpbGUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHVzZSBjYXNlcyBiZWZvcmUgSSBzdGFydCBhZGRpbmcgaXQgdG8gYW55dGhpbmcuIFRoaXMgZGVtYW5kcyBhIGJpdCBtb3JlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMC42MDA0Mzc1OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjkxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMC42NzA3MzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNTcxMjAyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFI4MTY5IERyaXZlcidzIFBoeWxpbmsgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludGVncmF0ZXMgdGhlIFI4MTY5IEV0aGVybmV0IGRyaXZlciB3aXRoIHRoZSBwaHlsaW5rIEFQSS4gVGhlIGRyaXZlcidzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0IGdpdmVzIHVzIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgYXMgYSBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zOiB3ZSBoYXZlIGBSODE2OWAg4oCTIHRoYXQncyBhIG5vLWJyYWluZXIuICBBbmQgYE5FVF9WRU5ET1JfUkVBTFRFS2AsIHRob3VnaCBpdCdzIHNldCBhcyB0aGUgZGVmYXVsdCwgd2Ugc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3RpdmUuIFdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgb3RoZXIgdHJpc3RhdGVzIGFzIGBSODE2OWAgZG9lcyB0aGF0IGFscmVhZHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGp1aWN5IGJpdHMg4oCTIHRoZSBmb2N1cyBzeW1ib2xzLCB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgcGh5bGluayBpbnRlZ3JhdGlvbiBpcyBoYXBwZW5pbmcuIFdlJ3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfaW9jdGxgLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydGw4MTY5X253YXlfcmVzZXRgLCAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAuICBBbHNvLCBgcnRsX29wZW5gLCBgcnRsODE2OV9jbG9zZWAsIGBydGw4MTY5X3VwYCwgYHJ0bDgxNjlfZG93bmAsIGBydGxfaW5pdF9vbmVgLCBhbmQgYHJ0bDgxNjlfaW50ZXJydXB0YCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbldoaWxlIHRoZSBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgYHJ0bF9vcGVuYCBhcmUgZ29vZCBjYW5kaWRhdGVzLCB0aGUgc3dlZXQgc3BvdCBpcyB3aGVyZSB3ZSBoYXZlIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uOiBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAuIFRoZXkgYXJlIHRyaWdnZXJlZCBieSBldGh0b29sLCBpb2N0bCwgb3IgbmV0bGluay4gVGhhdCBpcyBvdXIgdGFyZ2V0LiAgVGhlc2UgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RyYXRlZ3kuICBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYWxscyBpbnRvIHRoZSBwaHlsaW5rIEFQSSBmdW5jdGlvbnM6XG5cbiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YCBjYWxscyBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2Ag4oCTIHdoaWNoIGlzICpuZXcqLlxuKiAgIGBydGw4MTY5X2lvY3RsYCBjYWxscyBgcGh5bGlua19taWlfaW9jdGxgLlxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YC5cbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgIGNhbGxzIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuXG4qICAgYHJ0bDgxNjlfbndheV9yZXNldGAgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0YC5cbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgYSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGluIHBoeWxpbmsgaXRzZWxmLlxuKiAgIGBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1gIHVzZXMgYHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlYC5cblxuQWxzbyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGFsc28gd29ydGgga2VlcGluZyBpbiBtaW5kLlxuXG5Ob3cgbGV0J3MgdmVyaWZ5IHRoYXQgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMgYXJlIG5vdCBmcnVpdGZ1bC5cblxuKiAgIGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2A6ICBUaGUgcGF0Y2ggcmVtb3ZlcyBTRlAtcmVsYXRlZCBmdW5jdGlvbnMuIE5vIG5ldyBqdWljeSBiaXRzIHRoZXJlIGZvciBmdXp6aW5nLlxuKiAgIGByODE2OV9tYWluLmNgOiBXZSBzZWUgYWRkaXRpb25zIGxpa2UgYHJ0bF9pc184MTE2YWZgLCBgcnRsX2dldF9zZnBfbW9kZWAsIGByODEyN19zZHNfcmVhZGAsIGByODEyN19zZHNfd3JpdGVgLCBgcjgxMjdfc2RzX21vZGlmeWAsIGByODEyN19zZnBfaW5pdF8xZ2AsIGByODEyN19zZnBfaW5pdF8xMGdgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYHJ0bDgxNjlfcGNzX2NvbmZpZ2AgYW5kIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLiBgcnRsODE2OV9wY3NfY29uZmlnYCBpcyBjYWxsZWQgYnkgcGh5bGluaywgc28gd2UnbGwgaW5kaXJlY3RseSBjb3ZlciB0aGlzIHZpYSBvdXIgbWFpbiBmb2N1cyBzeW1ib2xzLlxuXG5Pa2F5LCB0aGF0IG5haWxzIGl0IGRvd24uICBIZXJlJ3MgdGhlIHBsYW46XG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHNgOlxuICAgICogICBgcnRsODE2OV9jaGFuZ2VfbXR1YFxuICAgICogICBgcnRsODE2OV9pb2N0bGBcbiAgICAqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYFxuICAgICogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG4gICAgKiAgIFxuXG4iLCJJbnB1dFRva2VucyI6MzI4MTMsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTo0My4yNDE5Mzk3MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1ODQzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCIsXG4gICAgXCJORVRfVkVORE9SX1JFQUxURUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBuZXRkZXYgYW5kIGV0aHRvb2wgY2FsbGJhY2tzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IHBoeWxpbmsgaW50ZWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIixcbiAgICBcIk5FVF9WRU5ET1JfUkVBTFRFS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSByODE2OSBFdGhlcm5ldCBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIHBoeWxpYiBkaXJlY3RseSwgYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBNQUMgdmVyc2lvbnMgKDgxMTZhZiwgODEyN19BVEYpIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBwaHlsaW5rIGNvcmUgZnVuY3Rpb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLiBUaGUgcjgxNjkgZHJpdmVyIGlzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowzc8sv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 16:19:39 +0000 UTC FinishedAt: 2026-07-31 16:41:45 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169", "NET_VENDOR_REALTEK" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "a5c6ae8de11ef0c3aedbe5e123354aad87d0d925", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169", "NET_VENDOR_REALTEK" ], "series_id": "d36b2e53-46bd-45d1-b169-8b3ea93c936b" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl8169_change_mtu", "rtl8169_ioctl", "rtl8169_get_link_ksettings", "rtl8169_set_link_ksettings", "rtl8169_nway_reset", "phylink_update_mac_pause_capabilities", "phylink_ethtool_set_pauseparam" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfUkVBTFRFSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3BoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgbmV0ZGV2IGFuZCBldGh0b29sIGNhbGxiYWNrcyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYzZhZmY1YjFhMmFmNTQwYWZmMDA2YWE4ZjIwNTRmZjhhNWQ2YzJlM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDE2OjQwOjE0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5AQCAtODYsOCAmIzQzOzg2LDggQEAgY29uZmlnIFI4MTY5XG4gXHRkZXBlbmRzIG9uIFBDSVxuIFx0c2VsZWN0IEZXX0xPQURFUlxuIFx0c2VsZWN0IENSQzMyXG4tXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbiYjNDM7XHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3I4MTY5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5AQCAtOTYsNiAmIzQzOzk2LDI2IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSXHRcdDB4MjM0YVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTURfRVhFQ1x0QklUKDApXG4mIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4ZWIwZVxuJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4mIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuJiM0MzsjZGVmaW5lIFJUTF9QTV9DVFJMX0QzSE9UXHQweDAzXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4gXHR1MzIgbWFzaztcbiBcdHUzMiB2YWw7XG5AQCAtMzM0LDExICYjNDM7MzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuJiM0MztcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOXHRcdFx0QklUKDApXG4gfTtcbiBcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xuQEAgLTcyOCw2ICYjNDM7NzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuJiM0MztlbnVtIHJ0bF9zZnBfbW9kZSB7XG4mIzQzO1x0UlRMX1NGUF9OT05FLFxuJiM0MztcdFJUTF9TRlBfODE2OF9BRixcbiYjNDM7XHRSVExfU0ZQXzgxMjdfQVRGLFxuJiM0Mzt9O1xuJiM0MztcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiAmIzQzOzc2NCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XG4gXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xuIFx0ZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTtcbiYjNDM7XHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcbiBcdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG5AQCAtNzUwLDYgJiM0Mzs3NzksNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4mIzQzO1x0aW50IHNwZWVkO1xuIFxuIFx0c3RydWN0IHtcbiBcdFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG5AQCAtNzYyLDcgJiM0Mzs3OTIsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcbiBcdHVuc2lnbmVkIGFzcG1fbWFuYWdlYWJsZToxO1xuIFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XG4tXHRib29sIHNmcF9tb2RlOjE7XG4gXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcbiBcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcbiBcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xuQEAgLTc3NCw2ICYjNDM7ODAzLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZztcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCAmIzQzOzExNjAsNiBAQCBzdGF0aWMgaW50IHI4MTY4X3BoeV9vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZylcbiBcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgXHUwMDI2XHUwMDI2IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKVxuLVx0XHRyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgXHUwMDI2IDB4ZmZmZjtcbi1cbiBcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXHUwMDNjXHUwMDNjIDE1KTtcbiBcbiBcdHJldHVybiBydGxfbG9vcF93YWl0X2hpZ2godHAsIFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cbkBAIC0xMTk5LDYgJiM0MzsxMjI3LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuJiM0MztERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIgPSAoaW5kZXggXHUwMDNjXHUwMDNjIDExKSB8IChwYWdlIFx1MDAzY1x1MDAzYyA1KSB8IHJlZztcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyk7XG4mIzQzO1xuJiM0MztcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfREFUQV9PVVQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXG4mIzQzO1x0XHRcdCAgIHUxNiByZWcsIHUxNiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR1MTYgYWRkciA9IChpbmRleCBcdTAwM2NcdTAwM2MgMTEpIHwgKHBhZ2UgXHUwMDNjXHUwMDNjIDUpIHwgcmVnO1xuJiM0MztcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDIHwgUjgxMjdfU0RTX0NNRF9XRSk7XG4mIzQzO1xuJiM0MztcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcjgxMjdfc2RzX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbiYjNDM7XHRcdFx0ICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaylcbiYjNDM7e1xuJiM0MztcdGludCB2YWwgPSByODEyN19zZHNfcmVhZCh0cCwgaW5kZXgsIHBhZ2UsIHJlZyk7XG4mIzQzO1xuJiM0MztcdGlmICh2YWwgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbiYjNDM7XHRyODEyN19zZHNfd3JpdGUodHAsIGluZGV4LCBwYWdlLCByZWcsIHZhbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHZhbDtcbiYjNDM7XG4mIzQzO1x0cjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQodHApO1xuJiM0MztcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAxLCAzMSwgMCwgQklUKDMpKTtcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpO1xuJiM0MztcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuJiM0MztcbiYjNDM7XHRSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7XG4mIzQzO1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuJiM0MztcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuJiM0MztcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwOCwgMHgwMDAwKTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7XG4mIzQzO1xuJiM0MztcdHZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0aW50IHZhbDtcbkBAIC0xMjE3LDEyICYjNDM7MTMxMiw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4te1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4tXHRcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG5AQCAtMTI4Myw2ICYjNDM7MTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSAmIzQzOyByZWcsIHZhbHVlKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9QS0dfREVURUNUKSBcdTAwMjYgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT1cbiYjNDM7XHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XG4mIzQzO1x0XHRSVExfSU5UX0hXX0lEXzgxMTZBRjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcbiB7XG4gXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSAmIzQzOyByZWcpO1xuQEAgLTE1NzgsNiAmIzQzOzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4mIzQzO3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuJiM0MztcdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xuJiM0MztcbiYjNDM7XHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbiYjNDM7XHRcdFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XG4mIzQzO1x0fSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkge1xuJiM0MztcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiBSVExfU0ZQX05PTkU7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5AQCAtMTY3MywxNiAmIzQzOzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuLVx0XHR9IGVsc2UgaWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDApIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICYjNDM7MTgwMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xuIFx0fSBlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XG4gXHRcdCAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE3MDAsNyAmIzQzOzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4mIzQzO1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTIwNzQsMTEgJiM0MzsyMTg0LDExIEBAIHJ0bF9jb2FsZXNjZV9pbmZvKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRjaSA9IHJ0bF9jb2FsZXNjZV9pbmZvXzgxNjhfODEzNjtcbiBcbiBcdC8qIGlmIHNwZWVkIGlzIHVua25vd24gYXNzdW1lIGhpZ2hlc3Qgb25lICovXG4tXHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2kmIzQzOyYjNDM7KSB7XG4tXHRcdGlmICh0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyAmIzQzOzIzNDYsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VzcGVlZDtcbiBcdHVuc2lnbmVkIGludCB0aW1lciA9IHRwLVx1MDAzZXR4X2xwaV90aW1lcjtcbiBcbiBcdGlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcbkBAIC0yMjU0LDcgJiM0MzsyMzY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3MCw3ICYjNDM7MjM4MCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlkZXYsIGRhdGEpO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyAmIzQzOzI0MTEsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xuLVxuLVx0cGh5X2dldF9wYXVzZSh0cC1cdTAwM2VwaHlkZXYsIFx1MDAyNnR4X3BhdXNlLCBcdTAwMjZyeF9wYXVzZSk7XG4gXG4tXHRkYXRhLVx1MDAzZWF1dG9uZWcgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYXV0b25lZztcbi1cdGRhdGEtXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xuLVx0ZGF0YS1cdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XG4mIzQzO1x0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzE4LDkgJiM0MzsyNDIzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzg2LDM0ICYjNDM7MjQ4OSwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRsZTMyX3RvX2NwdSh0cC1cdTAwM2Vjb3VudGVycy1cdTAwM2VyeF91bmtub3duX29wY29kZSk7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4tXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRpbnQgZHVwbGV4ID0gY21kLVx1MDAzZWJhc2UuZHVwbGV4O1xuLVx0aW50IHNwZWVkID0gY21kLVx1MDAzZWJhc2Uuc3BlZWQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XG4tXG4tXHRpZiAoY21kLVx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuLVx0cnRsX3NmcF9pbml0KHRwKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtXHUwMDNlcGh5bGluaywgY21kKTtcbiYjNDM7fVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuQEAgLTI0MzEsMTAgJiM0MzsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbiBcdC5nZXRfc3NldF9jb3VudFx0XHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXG4gXHQuZ2V0X2V0aHRvb2xfc3RhdHNcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcbiBcdC5nZXRfdHNfaW5mb1x0XHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXG4tXHQubndheV9yZXNldFx0XHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXG4mIzQzO1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4mIzQzO1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG5AQCAtMjQ5OSw5ICYjNDM7MjU5NSwxMCBAQCB2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHR0cC1cdTAwM2VvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7XG4gXG4gXHRcdC8qIFBIWSBzb2Z0IHJlc2V0IG1heSBzdGlsbCBiZSBpbiBwcm9ncmVzcyAqL1xuLVx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuLVx0XHRcdFx0ICAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuLVx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgISh2YWwgXHUwMDI2IEJNQ1JfUkVTRVQpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiAmIzQzOzI2MzUsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuJiM0MztcdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICYjNDM7MjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcbiBcdFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRydGxfc2ZwX2luaXQodHApO1xuLVxuIFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xuIFx0cGh5X3NwZWVkX3VwKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtMjY1NywxNSAmIzQzOzI3NTMsNiBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIFx0aWYgKHBjaV9pc19wY2llKHRwLVx1MDAzZXBjaV9kZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuIFx0XHRwY2llX3NldF9yZWFkcnEodHAtXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcbi1cbi1cdC8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgJiM0MzsyODY3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XG4gXG4gXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcbi1cdFx0cGh5X3NwZWVkX2Rvd24odHAtXHUwMDNlcGh5ZGV2LCBmYWxzZSk7XG4mIzQzO1x0XHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXHUwMDNlcGh5bGluaywgZmFsc2UpO1xuIFx0XHRydGxfd29sX2VuYWJsZV9yeCh0cCk7XG4gXHR9XG4gfVxuQEAgLTI4MzIsNiAmIzQzOzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRpZl9ydW5uaW5nKGRldikpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfbWlpX2lvY3RsKHRwLVx1MDAzZXBoeWxpbmssIGlmciwgY21kKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcbkBAIC0zMDk4LDggJiM0MzszMTk1LDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbiBcdFx0YnJlYWs7XG4tXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4mIzQzO1x0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiAmIzQzOzMyMzEsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiBcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcbiYjNDM7XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgU0VORF9MVFJfTVNHLCAweDAwMDAsIExUUl9NU0dfRU4pO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbkBAIC0zMTUyLDYgJiM0MzszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4mIzQzO1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdC8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqL1xuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XG5AQCAtMzE2NCw2ICYjNDM7MzI3OCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fSBlbHNlIHtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4mIzQzO1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICYjNDM7Mzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyhzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QocGRldi1cdTAwM2VkZXZmbik7XG4mIzQzO1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBmdW5jLCBwb3M7XG4mIzQzO1x0dTE2IHZhbDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbiYjNDM7XG4mIzQzO1x0XHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7XG4mIzQzO1x0XHRpZiAocG9zKSB7XG4mIzQzO1x0XHRcdHBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgfD0gKFBDSV9FWFBfTE5LQ1RMX0FTUE1DIHwgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKTtcbiYjNDM7XHRcdFx0cGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4mIzQzO1x0XHRpZiAocG9zKSB7XG4mIzQzO1x0XHRcdHBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4mIzQzO1xuJiM0MztcdFx0XHRpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSztcbiYjNDM7XHRcdFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xuJiM0MztcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuJiM0MztcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4mIzQzO1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTQxMzksMTIgJiM0Mzs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuJiM0MztcdGJvb2wganVtYm9fYWZ0ZXIgPSBuZXdfbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4gXG4gXHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG4gXHRydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApO1xuIFxuJiM0MztcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFqdW1ib19hZnRlcilcbiYjNDM7XHRcdFx0Y2FwcyB8PSAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XG4mIzQzO1x0XHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVx1MDAzZXBoeWxpbmssIGNhcHMpO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg2OSw4ICYjNDM7NTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpXG4tXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZykge1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuJiM0MztcdFx0XHRwaHlsaW5rX21hY19jaGFuZ2UodHAtXHUwMDNlcGh5bGluayxcbiYjNDM7XHRcdFx0XHRcdCAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSBcdTAwMjYgTGlua1N0YXR1cykpO1xuJiM0MztcdH1cbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuQEAgLTQ5MzAsOSAmIzQzOzUwOTgsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIHtcbi1cdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXG5AQCAtNDk2Myw0MCAmIzQzOzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuLVxuLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHtcbi1cdFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwKTtcbi1cdFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VlbmFibGVfdHhfbHBpKTtcbi1cdFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRwbV9ydW50aW1lX2lkbGUoZCk7XG4tXHR9XG4tXG4tXHRwaHlfcHJpbnRfc3RhdHVzKHRwLVx1MDAzZXBoeWRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiBcdGludCByZXQ7XG4gXG4tXHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4tXHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4tXG4tXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QodHAtXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcbi1cdFx0XHRcdCBwaHlfbW9kZSk7XG4tXHRpZiAocmV0KVxuJiM0MztcdHJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluaywgdHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbi1cdFx0cGh5X3NldF9tYXhfc3BlZWQocGh5ZGV2LCBTUEVFRF8xMDApO1xuLVxuLVx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbiYjNDM7XHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTAwNywxMCAmIzQzOzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xuIFx0Yml0bWFwX3plcm8odHAtXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG4gXG4tXHRwaHlfc3RvcCh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cnRsX3NmcF9yZXNldCh0cCk7XG4gXG4gXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XG5AQCAtNTAzMiwxNCAmIzQzOzUxNzAsMTIgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuJiM0MztcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4tXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtNTA0OSwxMyAmIzQzOzUxODUsMTQgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiYjNDM7XHRwaHlsaW5rX3N0b3AodHAtXHUwMDNlcGh5bGluayk7XG4gXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XG4gXHRydGw4MTY5X2Rvd24odHApO1xuIFx0cnRsODE2OV9yeF9jbGVhcih0cCk7XG4gXG4gXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiBcbi1cdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiwxMSAmIzQzOzUyNDksMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuLVx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuLVx0aWYgKHJldHZhbClcbi1cdFx0Z290byBlcnJfZnJlZV9pcnE7XG4tXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuJiM0MztcdFx0aWYgKHJldHZhbClcbiYjNDM7XHRcdFx0Z290byBlcnJfZnJlZV9pcnE7XG4mIzQzO1x0fVxuIFx0cnRsODE2OV91cCh0cCk7XG4mIzQzO1x0cGh5bGlua19zdGFydCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBvdXQ6XG5AQCAtNTIyMSw2ICYjNDM7NTM2MCw5IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2aWNlKVxuIFx0LyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqL1xuIFx0cnRsX2luaXRfcnhjZmcodHApO1xuIFxuJiM0MztcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbiYjNDM7XHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuJiM0MztcbiBcdHJldHVybiBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKGRldmljZSk7XG4gfVxuIFxuQEAgLTUyODgsNiAmIzQzOzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXHUwMDNlbGVkcyk7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cdTAwM2VkZXYpO1xuJiM0MztcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG5AQCAtNTMxMCw3ICYjNDM7NTQ1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4gXHQubmRvX2ZpeF9mZWF0dXJlc1x0PSBydGw4MTY5X2ZpeF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcdD0gcnRsX3NldF9tYWNfYWRkcmVzcyxcbi1cdC5uZG9fZXRoX2lvY3RsXHRcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXG4mIzQzO1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQ3NCwxNiAmIzQzOzU2MTcsNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJldHVybiAtRVVOQVRDSDtcbiBcdH1cbiBcbi1cdHRwLVx1MDAzZXBoeWRldi1cdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHBoeV9zdXBwb3J0X2VlZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuLVx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuLVx0XHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cdTAwM2VwaHlkZXYsXG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XG4tXG4gXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXG4gXHRwaHlfc3VzcGVuZCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTU1OTksNiAmIzQzOzU3MzIsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4mIzQzO1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuJiM0MztcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuJiM0MztcdFx0XHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4mIzQzO1x0XHRcdCAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbiYjNDM7XHRydGxfbGlua19jaGdfcGF0Y2godHAsIHNwZWVkKTtcbiYjNDM7XG4mIzQzO1x0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCF0cC1cdTAwM2VwY3Mub3BzKVxuJiM0MztcdFx0cmV0dXJuIE5VTEw7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuJiM0MztcdFx0cmV0dXJuIFx1MDAyNnRwLVx1MDAzZXBjcztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4mIzQzO1x0dTE2IHZhbCA9IDA7XG4mIzQzO1xuJiM0MztcdHJhd19zcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuJiM0MztcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xuJiM0MztcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcbiYjNDM7XHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHZhbDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLFxuJiM0MztcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4mIzQzO1xuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XG4mIzQzO1x0XHR1MTYgc3RhdDE7XG4mIzQzO1xuJiM0MztcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpO1xuJiM0MztcbiYjNDM7XHRcdGlmICghKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxuJiM0MztcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuJiM0MztcdFx0aWYgKCFzdGF0ZS1cdTAwM2VsaW5rKVxuJiM0MztcdFx0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxuJiM0MztcdFx0XHRzdGF0ZS1cdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDA7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4mIzQzO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHUxNiBibXNyLCBscGE7XG4mIzQzO1xuJiM0MztcdFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0JNU1IpO1xuJiM0MztcdFx0bHBhID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfTFBBKTtcbiYjNDM7XHRcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4mIzQzO1x0XHRcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbiYjNDM7XHRcdHN3aXRjaCAoaW50ZXJmYWNlKSB7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbiYjNDM7XHRcdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4mIzQzO1x0XHRcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRkZWZhdWx0OlxuJiM0MztcdFx0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCYjMzQ7VW5zdXBwb3J0ZWQgU0ZQIGludGVyZmFjZSBtb2RlOiAlc1xcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHQgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbiYjNDM7XHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4mIzQzO1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbiYjNDM7XHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4mIzQzO1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuJiM0MztcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4mIzQzO1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjYXBzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuJiM0MztcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbiYjNDM7XHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbiYjNDM7XHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbiYjNDM7XHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbiYjNDM7XHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MztcdGRlZmF1bHQ6XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4mIzQzO1x0XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuJiM0MztcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcbiYjNDM7XHRcdF9fc2V0X2JpdChwaHlfbW9kZSwgdHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xuJiM0MztcbiYjNDM7XHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbiYjNDM7XHRcdFx0ICAgIHBoeV9tb2RlLCBcdTAwMjZydGxfcGh5bGlua19tYWNfb3BzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgJiM0Mzs2MDQxLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdFx0XHQgICAgIGV4dF94aWRfc3RyLCB4aWQpO1xuIFx0dHAtXHUwMDNlbWFjX3ZlcnNpb24gPSBjaGlwLVx1MDAzZW1hY192ZXJzaW9uO1xuIFx0dHAtXHUwMDNlZndfbmFtZSA9IGNoaXAtXHUwMDNlZndfbmFtZTtcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiAmIzQzOzYwNTQsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4mIzQzO1x0dHAtXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuQEAgLTU3ODgsMTMgJiM0Mzs2MTU4LDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcbiYjNDM7XHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDYgJiM0Mzs2MTk3LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAocnRsX2lzXzgxMTZhZih0cCkpXG4mIzQzO1x0XHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cdTAwM2VwY2lfZGV2KTtcbiYjNDM7XG4gXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGYuLjM0YTBlNGY5YjNkZGUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXG5AQCAtMTgyOCw2ICYjNDM7MTgyOCwxMjYgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKCkgLSBVcGRhdGUgdGhlIHBoeWxpbmsgcGF1c2UgZnJhbWUgY29uZmlndXJhdGlvblxuJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIGluc3RhbmNlXG4mIzQzOyAqIEBwYXVzZV9zdGF0ZTogYml0bWFzayBpbmRpY2F0aW5nIHRoZSBuZXcgcGF1c2Ugc3RhdGVcbiYjNDM7ICpcbiYjNDM7ICogVXBkYXRlIHRoZSBNQUMgcGF1c2UgZnJhbWUgKGZsb3cgY29udHJvbCkgc3RhdGUgZm9yIHRoZSBwaHlsaW5rIGluc3RhbmNlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoc3RydWN0IHBoeWxpbmsgKnBsLCBpbnQgcGF1c2Vfc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbiYjNDM7XHRib29sIHR4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9UWCk7XG4mIzQzO1x0Ym9vbCByeF9wYXVzZSA9ICEhKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfUlgpO1xuJiM0MztcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llc1xuJiM0MztcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbiYjNDM7XHQgKiBiZTpcbiYjNDM7XHQgKiBldGh0b29sICBMb2NhbCBkZXZpY2VcbiYjNDM7XHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4mIzQzO1x0ICogIDAgICAwICAgMCAgICAgMFxuJiM0MztcdCAqICAxICAgMCAgIDEgICAgIDFcbiYjNDM7XHQgKiAgMCAgIDEgICAwICAgICAxXG4mIzQzO1x0ICogIDEgICAxICAgMSAgICAgMVxuJiM0MztcdCAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZVxuJiM0MztcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0bGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZywgdHhfcGF1c2UsXG4mIzQzO1x0XHRcdCAgIHJ4X3BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0bWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfQU4gfHxcbiYjNDM7XHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4mIzQzO1xuJiM0MztcdC8qIFVwZGF0ZSBvdXIgaW4tYmFuZCBhZHZlcnRpc2VtZW50LCB0cmlnZ2VyaW5nIGEgcmVuZWdvdGlhdGlvbiBpZlxuJiM0MztcdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFwbC1cdTAwM2VwaHlkZXYpXG4mIzQzO1x0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbFxuJiM0MztcdCAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuXG4mIzQzO1x0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4mIzQzO1x0ICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHBsLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cdTAwM2VwaHlkZXYsIHJ4X3BhdXNlLCB0eF9wYXVzZSk7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYVxuJiM0MztcdCAqIHJlc29sdmUgdG8gdXBkYXRlIHRoZWlyIHN0YXRlOyB3ZSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IHRoZVxuJiM0MztcdCAqIGxpbmsgd2lsbCBjeWNsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAobWFudWFsX2NoYW5nZWQpIHtcbiYjNDM7XHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbiYjNDM7XHRcdHBoeWxpbmtfcnVuX3Jlc29sdmUocGwpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4mIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cbiYjNDM7ICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcGF1c2U7XG4mIzQzO1x0aW50IHBhdXNlX3N0YXRlO1xuJiM0MztcbiYjNDM7XHRBU1NFUlRfUlROTCgpO1xuJiM0MztcbiYjNDM7XHRpZiAobWFjX3BhdXNlIFx1MDAyNiB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSkpIHtcbiYjNDM7XHRcdHBoeWxpbmtfZXJyKHBsLCBcJiMzNDtBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG9sZF9wYXVzZSA9IHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNiAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XHRpZiAob2xkX3BhdXNlID09IG1hY19wYXVzZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XG4mIzQzO1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHBsLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0ZWxzZSBpZiAocGwtXHUwMDNlc2ZwX2J1cylcbiYjNDM7XHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlc2ZwX3N1cHBvcnQpO1xuJiM0MztcbiYjNDM7XHRwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC1cdTAwM2VzdXBwb3J0ZWQsIGNvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHBhdXNlX3N0YXRlID0gY29uZmlnLVx1MDAzZXBhdXNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIXBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKSkge1xuJiM0MztcdFx0cGF1c2Vfc3RhdGUgXHUwMDI2PSB+KE1MT19QQVVTRV9SWCB8IE1MT19QQVVTRV9UWCk7XG4mIzQzO1x0fSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkpIHtcbiYjNDM7XHRcdGlmICgocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAocGF1c2Vfc3RhdGUgXHUwMDI2IE1MT19QQVVTRV9UWCkpXG4mIzQzO1x0XHRcdHBhdXNlX3N0YXRlIFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcbkBAIC0zMTkwLDggJiM0MzszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcbiBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuIHtcbi1cdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFx1MDAyNnBsLVx1MDAzZWxpbmtfY29uZmlnO1xuLVx0Ym9vbCBtYW51YWxfY2hhbmdlZDtcbiBcdGludCBwYXVzZV9zdGF0ZTtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG5AQCAtMzIxNSw1NCAmIzQzOzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdGlmIChwYXVzZS1cdTAwM2V0eF9wYXVzZSlcbiBcdFx0cGF1c2Vfc3RhdGUgfD0gTUxPX1BBVVNFX1RYO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4tXHQvKlxuLVx0ICogU2VlIHRoZSBjb21tZW50cyBmb3IgbGlua21vZGVfc2V0X3BhdXNlKCksIHdydCB0aGUgZGVmaWNpZW5jaWVzXG4tXHQgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkXG4tXHQgKiBiZTpcbi1cdCAqIGV0aHRvb2wgIExvY2FsIGRldmljZVxuLVx0ICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpclxuLVx0ICogIDAgICAwICAgMCAgICAgMFxuLVx0ICogIDEgICAwICAgMSAgICAgMVxuLVx0ICogIDAgICAxICAgMCAgICAgMVxuLVx0ICogIDEgICAxICAgMSAgICAgMVxuLVx0ICogYW5kIHRoZW4gdXNlIHRoZSBldGh0b29sIHJ4L3R4IGVuYWJsZW1lbnQgc3RhdHVzIHRvIG1hc2sgdGhlXG4tXHQgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLlxuLVx0ICovXG4tXHRsaW5rbW9kZV9zZXRfcGF1c2UoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBwYXVzZS1cdTAwM2V0eF9wYXVzZSxcbi1cdFx0XHQgICBwYXVzZS1cdTAwM2VyeF9wYXVzZSk7XG4tXG4tXHRtYW51YWxfY2hhbmdlZCA9IChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9BTiB8fFxuLVx0XHRcdCAoIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX0FOKSBcdTAwMjZcdTAwMjZcbi1cdFx0XHQgICAoY29uZmlnLVx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcbi1cbi1cdGNvbmZpZy1cdTAwM2VwYXVzZSA9IHBhdXNlX3N0YXRlO1xuLVxuLVx0LyogVXBkYXRlIG91ciBpbi1iYW5kIGFkdmVydGlzZW1lbnQsIHRyaWdnZXJpbmcgYSByZW5lZ290aWF0aW9uIGlmXG4tXHQgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLlxuLVx0ICovXG4tXHRpZiAoIXBsLVx1MDAzZXBoeWRldilcbi1cdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4tXG4tXHRtdXRleF91bmxvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuLVxuLVx0LyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbFxuLVx0ICogY2F1c2UgcGh5bGliIHRvIHJlbmVnb3RpYXRlIChpZiBBTiBpcyBlbmFibGVkKSB3aGljaCB3aWxsIGluIHR1cm5cbi1cdCAqIGNhbGwgb3VyIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCB0cmlnZ2VyIGEgcmVzb2x2ZS4gIE5vdGUgdGhhdFxuLVx0ICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXG4tXHQgKi9cbi1cdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4tXHRcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cdTAwM2VwaHlkZXYsIHBhdXNlLVx1MDAzZXJ4X3BhdXNlLFxuLVx0XHRcdFx0ICAgcGF1c2UtXHUwMDNldHhfcGF1c2UpO1xuLVxuLVx0LyogSWYgdGhlIG1hbnVhbCBwYXVzZSBzZXR0aW5ncyBjaGFuZ2VkLCBtYWtlIHN1cmUgd2UgdHJpZ2dlciBhXG4tXHQgKiByZXNvbHZlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZTsgd2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCB0aGVcbi1cdCAqIGxpbmsgd2lsbCBjeWNsZS5cbi1cdCAqL1xuLVx0aWYgKG1hbnVhbF9jaGFuZ2VkKSB7XG4tXHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbi1cdFx0cGh5bGlua19ydW5fcmVzb2x2ZShwbCk7XG4tXHR9XG4mIzQzO1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxLi40NzIxYmEwNzFjYmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyAmIzQzOzE3LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kZWxheS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY2xrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7Li4vcGh5bGliLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyZWFsdGVrLmhcJiMzNDtcbkBAIC0yNjQ2LDQ1ICYjNDM7MjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgJiM0MzsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4gXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuIFx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuLVx0fSwge1xuLVx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1JUTF9EVU1NWV9TRlApLFxuLVx0XHQubmFtZVx0XHQ9IFwmIzM0O1JlYWx0ZWsgU0ZQIFBIWSBNb2RlXCYjMzQ7LFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCYjMzQ7UlRMODIyNCAyLjVHYnBzIFBIWVwmIzM0OyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5pbmRleCAyYmMwZGIzZDUyYWM4Li5lM2M3ODIyMTAwYWJhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5AQCAtODQyLDQgJiM0Mzs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbiB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTtcbiYjNDM7XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkNjgzYmMxYjA2NTljLi4wMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNyAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1JFQUxURUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X253YXlfcmVzZXQmIzM0OywKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIHI4MTY5IEV0aGVybmV0IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgcGh5bGliIGRpcmVjdGx5LCBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyAoODExNmFmLCA4MTI3X0FURikgYW5kIGludHJvZHVjaW5nIGEgbmV3IHBoeWxpbmsgY29yZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AuIFRoZSByODE2OSBkcml2ZXIgaXMgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAxNjo0MDoxNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhLi41ODE4YTlhNTAwYTg2IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnCkBAIC04Niw4ICYjNDM7ODYsOCBAQCBjb25maWcgUjgxNjkKIAlkZXBlbmRzIG9uIFBDSQogCXNlbGVjdCBGV19MT0FERVIKIAlzZWxlY3QgQ1JDMzIKLQlzZWxlY3QgUEhZTElCCiAJc2VsZWN0IFJFQUxURUtfUEhZCiYjNDM7CXNlbGVjdCBQSFlMSU5LCiAJaGVscAogCSAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG8KIAkgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jCkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBACiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9pcDZfY2hlY2tzdW0uaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbmV0ZGV2X3F1ZXVlcy5oJmd0OwotI2luY2x1ZGUgJmx0O25ldC9waHkvcmVhbHRla19waHkuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtyODE2OS5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cjgxNjlfZmlybXdhcmUuaCYjMzQ7CkBAIC05Niw2ICYjNDM7OTYsMjYgQEAKICNkZWZpbmUgSlVNQk9fOUsJKDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTikKICNkZWZpbmUgSlVNQk9fMTZLCShTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTUQJCTB4MjM0OAomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0FERFIJCTB4MjM0YQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfSU4JMHgyMzRjCiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVQJMHgyMzRlCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUMJQklUKDApCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EX1dFCUJJVCgxKQomIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFRwkweGViMTAKJiM0MzsjZGVmaW5lIE9DUF9TRFNfQ01EX1JFRwkJMHhlYjBlCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHCTB4ZWIxNAomIzQzOyNkZWZpbmUgU0RTX0NNRF9SRUFECQkweDAwMDEKJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0UJMHg0MAomIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRQkweDAwODAKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUCQkweGRjMDAKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0sJMHgwMDc4CiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUYJMHgwMDMwCiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lECQkweGQwMDYKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTSwkweDAwZmYKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGCTB4MDAwMAomIzQzOyNkZWZpbmUgUlRMX1BNX0NUUkxfRDNIT1QJMHgwMwomIzQzOwogc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHsKIAl1MzIgbWFzazsKIAl1MzIgdmFsOwpAQCAtMzM0LDExICYjNDM7MzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7CiAJQUxEUFNfTFRSCT0gMHhlMGEyLAogCUxUUl9PQkZGX0xPQ0sJPSAweGUwMzIsCiAJTFRSX1NOT09QCT0gMHhlMDM0LAomIzQzOwlTRU5EX0xUUl9NU0cJPSAweGUwMzgsCiAKICNkZWZpbmUgQUxEUFNfTFRSX0VOCQkJQklUKDApCiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU4JCUJJVCgwKQogI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTgkJQklUKDE0KQogI2RlZmluZSBMVFJfU05PT1BfRU4JCQlHRU5NQVNLKDE1LCAxNCkKJiM0MzsjZGVmaW5lIExUUl9NU0dfRU4JCQlCSVQoMCkKIH07CiAKIGVudW0gcnRsODE2OF84MTAxX3JlZ2lzdGVycyB7CkBAIC03MjgsNiAmIzQzOzc1MCwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUgewogCVJUTF9EQVNIXzI1X0JQLAogfTsKIAomIzQzO2VudW0gcnRsX3NmcF9tb2RlIHsKJiM0MzsJUlRMX1NGUF9OT05FLAomIzQzOwlSVExfU0ZQXzgxNjhfQUYsCiYjNDM7CVJUTF9TRlBfODEyN19BVEYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwkvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTczNiw2ICYjNDM7NzY0LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjsKIAllbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlOwomIzQzOwllbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CkBAIC03NTAsNiAmIzQzOzc3OSw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXUzMiBpcnFfbWFzazsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHNwZWVkOwogCiAJc3RydWN0IHsKIAkJREVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7CkBAIC03NjIsNyAmIzQzOzc5Miw2IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTsKIAl1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTsKIAl1bnNpZ25lZCBkYXNoX2VuYWJsZWQ6MTsKLQlib29sIHNmcF9tb2RlOjE7CiAJZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7CiAJc3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzOwogCXN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0OwpAQCAtNzc0LDYgJiM0Mzs4MDMsOSBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAlzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzOwogCiAJdTMyIG9jcF9iYXNlOwomIzQzOwlzdHJ1Y3QgcGh5bGluayAqcGh5bGluazsKJiM0MzsJc3RydWN0IHBoeWxpbmtfY29uZmlnIHBoeWxpbmtfY29uZmlnOwomIzQzOwlzdHJ1Y3QgcGh5bGlua19wY3MgcGNzOwogfTsKIAogdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7CkBAIC0xMTI4LDEwICYjNDM7MTE2MCw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKQogCWlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpCiAJCXJldHVybiAwOwogCi0JLyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSAmYW1wOyZhbXA7IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKQotCQlyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgJmFtcDsgMHhmZmZmOwotCiAJUlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyAmbHQ7Jmx0OyAxNSk7CiAKIAlyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCAmYW1wO3J0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID8KQEAgLTExOTksNiAmIzQzOzEyMjcsNzMgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJdXNsZWVwX3JhbmdlKDEwLCAyMCk7CiB9CiAKJiM0MztERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSAmYW1wOyBSODEyN19TRFNfQ01EX0VYRUM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsIHUxNiByZWcpCiYjNDM7ewomIzQzOwl1MTYgYWRkciA9IChpbmRleCAmbHQ7Jmx0OyAxMSkgfCAocGFnZSAmbHQ7Jmx0OyA1KSB8IHJlZzsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpOwomIzQzOwomIzQzOwlpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsICZhbXA7cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSkKJiM0MzsJCXJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfREFUQV9PVVQpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsCiYjNDM7CQkJICAgdTE2IHJlZywgdTE2IHZhbCkKJiM0Mzt7CiYjNDM7CXUxNiBhZGRyID0gKGluZGV4ICZsdDsmbHQ7IDExKSB8IChwYWdlICZsdDsmbHQ7IDUpIHwgcmVnOwomIzQzOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpOwomIzQzOwlSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMgfCBSODEyN19TRFNfQ01EX1dFKTsKJiM0MzsKJiM0MzsJaWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCAmYW1wO3I4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsCiYjNDM7CQkJICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaykKJiM0Mzt7CiYjNDM7CWludCB2YWwgPSByODEyN19zZHNfcmVhZCh0cCwgaW5kZXgsIHBhZ2UsIHJlZyk7CiYjNDM7CiYjNDM7CWlmICh2YWwgJmx0OyAwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwl2YWwgPSAodmFsICZhbXA7IH5jbGVhcm1hc2spIHwgc2V0bWFzazsKJiM0MzsJcjgxMjdfc2RzX3dyaXRlKHRwLCBpbmRleCwgcGFnZSwgcmVnLCB2YWwpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWludCB2YWw7CiYjNDM7CiYjNDM7CXI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTsKJiM0MzsKJiM0MzsJcjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMSwgMzEsIDAsIEJJVCgzKSk7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDIsICAwLCBCSVQoMTMpIHwgQklUKDEyKSB8IEJJVCg2KSwgQklUKDEyKSB8IEJJVCg2KSk7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpOwomIzQzOwomIzQzOwlSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7CiYjNDM7CVJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgJmFtcDsgfjB4MzAwMykgfCAweDAwMDIpOwomIzQzOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7CiYjNDM7CiYjNDM7CXZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsICZhbXA7IH4weDAwMGYpIHwgMHgwMDBjKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaW50IHZhbDsKQEAgLTEyMTcsMTIgJiM0MzsxMzEyLDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKLXsKLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCi0JCXI4MTI3X3NmcF9pbml0XzEwZyh0cCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQpAQCAtMTI4Myw2ICYjNDM7MTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZywgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgJmFtcDsgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT0KJiM0MzsJCVJUTF9QS0dfREVURUNUXzgxMTZBRiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSAmYW1wOyBSVExfSU5UX0hXX0lEX01BU0spID09CiYjNDM7CQlSVExfSU5UX0hXX0lEXzgxMTZBRjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZykKIHsKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC0mZ3Q7b2NwX2Jhc2UgJiM0MzsgcmVnKTsKQEAgLTE1NzgsNiAmIzQzOzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCXUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTsKJiM0MzsKJiM0MzsJCWlmICgoZGF0YSAmYW1wOyAweGZmKSA9PSAweDA3KQomIzQzOwkJCXJldHVybiBSVExfU0ZQXzgxMjdfQVRGOwomIzQzOwl9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7CiYjNDM7CQlyZXR1cm4gUlRMX1NGUF84MTY4X0FGOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBSVExfU0ZQX05PTkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY3MywxNiAmIzQzOzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9wY2lfY29tbWl0KHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8CiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwotCQl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTAwKSB7CiYjNDM7CQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE2OTIsNyAmIzQzOzE4MDIsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTsKIAl9IGVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8CiAJCSAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwogCQl9IGVsc2UgewpAQCAtMTcwMCw3ICYjNDM7MTgxMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpOwogCQl9CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMCkgewomIzQzOwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7CiAJCX0gZWxzZSB7CkBAIC0yMDc0LDExICYjNDM7MjE4NCwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJY2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7CiAKIAkvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqLwotCWlmICh0cC0mZ3Q7cGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQomIzQzOwlpZiAodHAtJmd0O3NwZWVkID09IFNQRUVEX1VOS05PV04pCiAJCXJldHVybiBjaTsKIAogCWZvciAoOyBjaS0mZ3Q7c3BlZWQ7IGNpJiM0MzsmIzQzOykgewotCQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQomIzQzOwkJaWYgKHRwLSZndDtzcGVlZCA9PSBjaS0mZ3Q7c3BlZWQpCiAJCQlyZXR1cm4gY2k7CiAJfQogCkBAIC0yMjM2LDcgJiM0MzsyMzQ2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdW5zaWduZWQgaW50IHNwZWVkID0gdHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQ7CiYjNDM7CXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtzcGVlZDsKIAl1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC0mZ3Q7dHhfbHBpX3RpbWVyOwogCiAJaWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQpAQCAtMjI1NCw3ICYjNDM7MjM2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiAJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNzAsNyAmIzQzOzIzODAsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlkZXYsIGRhdGEpOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMDEsMTMgJiM0MzsyNDExLDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlOwotCi0JcGh5X2dldF9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCAmYW1wO3R4X3BhdXNlLCAmYW1wO3J4X3BhdXNlKTsKIAotCWRhdGEtJmd0O2F1dG9uZWcgPSB0cC0mZ3Q7cGh5ZGV2LSZndDthdXRvbmVnOwotCWRhdGEtJmd0O3R4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDsKLQlkYXRhLSZndDtyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7CiYjNDM7CXBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjMxOCw5ICYjNDM7MjQyMyw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcGh5X3NldF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYsIGRhdGEtJmd0O3J4X3BhdXNlLCBkYXRhLSZndDt0eF9wYXVzZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzODYsMzQgJiM0MzsyNDg5LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWxlMzJfdG9fY3B1KHRwLSZndDtjb3VudGVycy0mZ3Q7cnhfdW5rbm93bl9vcGNvZGUpOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCWludCBkdXBsZXggPSBjbWQtJmd0O2Jhc2UuZHVwbGV4OwotCWludCBzcGVlZCA9IGNtZC0mZ3Q7YmFzZS5zcGVlZDsKLQotCWlmICghdHAtJmd0O3NmcF9tb2RlKQotCQlyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7Ci0KLQlpZiAoY21kLSZndDtiYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi0mZ3Q7c3VwcG9ydGVkKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCXBoeWRldi0mZ3Q7YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQlwaHlkZXYtJmd0O3NwZWVkID0gc3BlZWQ7Ci0JcGh5ZGV2LSZndDtkdXBsZXggPSBkdXBsZXg7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlydGxfc2ZwX2luaXQodHApOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtJmd0O3BoeWxpbmssIGNtZCk7CiYjNDM7fQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC0mZ3Q7cGh5bGluayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKQEAgLTI0MzEsMTAgJiM0MzsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NzZXRfY291bnQJCT0gcnRsODE2OV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAotCS5ud2F5X3Jlc2V0CQk9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsCiYjNDM7CS5ud2F5X3Jlc2V0CQk9IHJ0bDgxNjlfbndheV9yZXNldCwKIAkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiAJLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfbGlua19rc2V0dGluZ3MJPSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsCiAJLmdldF9yaW5ncGFyYW0JCT0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKQEAgLTI0OTksOSAmIzQzOzI1OTUsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJdHAtJmd0O29jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTsKIAogCQkvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi8KLQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCi0JCQkJICAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCi0JCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CQlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCQlwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtJmd0O3BoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiAJfQogfQogCkBAIC0yNTM4LDYgJiM0MzsyNjM1LDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZykKIAogc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJcGh5X2luaXRfaHcodHAtJmd0O3BoeWRldik7CiYjNDM7CXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtJmd0O3BoeWRldiwgdHAtJmd0O21hY192ZXJzaW9uKTsKIAogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewpAQCAtMjU1Miw5ICYjNDM7MjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDtwY2lfZGV2LSZndDtzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMCkKIAkJcGh5X3dyaXRlX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTsKIAotCWlmICh0cC0mZ3Q7c2ZwX21vZGUpCi0JCXJ0bF9zZnBfaW5pdCh0cCk7Ci0KIAkvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovCiAJcGh5X3NwZWVkX3VwKHRwLSZndDtwaHlkZXYpOwogCkBAIC0yNjU3LDE1ICYjNDM7Mjc1Myw2IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAKIAlpZiAocGNpX2lzX3BjaWUodHAtJmd0O3BjaV9kZXYpICZhbXA7JmFtcDsgdHAtJmd0O3N1cHBvcnRzX2dtaWkpCiAJCXBjaWVfc2V0X3JlYWRycSh0cC0mZ3Q7cGNpX2RldiwgcmVhZHJxKTsKLQotCS8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovCi0JaWYgKGp1bWJvKSB7Ci0JCWxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsCi0JCQkJICAgdHAtJmd0O3BoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpOwotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsCi0JCQkJICAgdHAtJmd0O3BoeWRldi0mZ3Q7YWR2ZXJ0aXNpbmcpOwotCQlwaHlfc3RhcnRfYW5lZyh0cC0mZ3Q7cGh5ZGV2KTsKLQl9CiB9CiAKIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZCkKQEAgLTI3ODAsNyAmIzQzOzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkgewotCQlwaHlfc3BlZWRfZG93bih0cC0mZ3Q7cGh5ZGV2LCBmYWxzZSk7CiYjNDM7CQlwaHlsaW5rX3NwZWVkX2Rvd24odHAtJmd0O3BoeWxpbmssIGZhbHNlKTsKIAkJcnRsX3dvbF9lbmFibGVfcngodHApOwogCX0KIH0KQEAgLTI4MzIsNiAmIzQzOzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCVJUTF9XMzIodHAsIDB4N2MsIHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC0mZ3Q7cGh5bGluaywgaWZyLCBjbWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0OwpAQCAtMzA5OCw4ICYjNDM7MzE5NSwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpOwogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiAJCWJyZWFrOwotCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiAJCVJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pOwogCQlmYWxsdGhyb3VnaDsKQEAgLTMxMTksNiAmIzQzOzMyMzEsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiAJLyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi8KIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTsKJiM0MzsJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCkBAIC0zMTUyLDYgJiM0MzszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJCXJ0bF9lbmFibGVfbHRyKHRwKTsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCS8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqLwogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTsKQEAgLTMxNjQsNiAmIzQzOzMyNzgsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIAl9IGVsc2UgewogCQlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiYjNDM7CQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOgogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzY1Nyw2ICYjNDM7Mzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtJmd0O2RldmZuKTsKJiM0MzsJc3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtJmd0O2J1czsKJiM0MzsJaW50IGZ1bmMsIHBvczsKJiM0MzsJdTE2IHZhbDsKJiM0MzsKJiM0MzsJZm9yIChmdW5jID0gMjsgZnVuYyAmbHQ7IDg7IGZ1bmMmIzQzOyYjNDM7KSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7CiYjNDM7CiYjNDM7CQlwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7CiYjNDM7CQlpZiAocG9zKSB7CiYjNDM7CQkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfRVhQX0xOS0NUTCwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwkJCWlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsIHw9IChQQ0lfRVhQX0xOS0NUTF9BU1BNQyB8IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTik7CiYjNDM7CQkJcGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsIHZhbCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX1BNKTsKJiM0MzsJCWlmIChwb3MpIHsKJiM0MzsJCQlwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCAmYW1wO3ZhbCk7CiYjNDM7CiYjNDM7CQkJaWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQl2YWwgJmFtcDs9IH5QQ0lfUE1fQ1RSTF9TVEFURV9NQVNLOwomIzQzOwkJCXZhbCB8PSAoUlRMX1BNX0NUUkxfRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTKTsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7CkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogCXJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7CiAKLQlyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtJmd0O3BoeWRldiwgMHgwYzQyLCAweDEzKSAmYW1wOyAweDNmZmY7Ci0JaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7Ci0JCXUxNiBzd19jbnRfMW1zX2luaTsKJiM0MzsJaWYgKHRwLSZndDtwaHlkZXYpIHsKJiM0MzsJCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKJiM0MzsJCWlmIChyZ19zYXdfY250ICZndDsgMCkgewomIzQzOwkJCXUxNiBzd19jbnRfMW1zX2luaTsKIAotCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKLQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7CiYjNDM7CQkJc3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSAmYW1wOyAweDBmZmY7CiYjNDM7CQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7CiYjNDM7CQl9CiAJfQogCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApOwpAQCAtNDEzOSwxMiAmIzQzOzQyOTEsMjMgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0KHN0cnVjdCAgcnRsODE2OV9wcml2YXRlICp0cCkKIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJYm9vbCBqdW1ib19iZWZvcmUgPSBkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKJiM0MzsJYm9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgJmd0OyBFVEhfREFUQV9MRU47CiAKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CiAJcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTsKIAomIzQzOwlpZiAoanVtYm9fYmVmb3JlICE9IGp1bWJvX2FmdGVyKSB7CiYjNDM7CQl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwkJaWYgKCFqdW1ib19hZnRlcikKJiM0MzsJCQljYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwomIzQzOwkJcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC0mZ3Q7cGh5bGluaywgY2Fwcyk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2OSw4ICYjNDM7NTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpCi0JCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwkJCXBoeWxpbmtfbWFjX2NoYW5nZSh0cC0mZ3Q7cGh5bGluaywKJiM0MzsJCQkJCSAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSAmYW1wOyBMaW5rU3RhdHVzKSk7CiYjNDM7CX0KIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7CiAJbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKQEAgLTQ5MzAsOSAmIzQzOzUwOTgsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIHsKLQlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJLyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovCkBAIC00OTYzLDQwICYjNDM7NTEyOCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7Ci0JCXJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7Ci0JCXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC0mZ3Q7cGh5ZGV2LSZndDtlbmFibGVfdHhfbHBpKTsKLQkJcG1fcmVxdWVzdF9yZXN1bWUoZCk7Ci0JfSBlbHNlIHsKLQkJcG1fcnVudGltZV9pZGxlKGQpOwotCX0KLQotCXBoeV9wcmludF9zdGF0dXModHAtJmd0O3BoeWRldik7Ci19Ci0KIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLSZndDtwaHlkZXY7Ci0JcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwogCWludCByZXQ7CiAKLQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgotCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwotCi0JcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLSZndDtkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLAotCQkJCSBwaHlfbW9kZSk7Ci0JaWYgKHJldCkKJiM0MzsJcmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluaywgdHAtJmd0O3BoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIodHAtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKLQotCWlmICghdHAtJmd0O3N1cHBvcnRzX2dtaWkpCi0JCXBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTsKLQotCXBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7CiYjNDM7CX0KIAogCXJldHVybiAwOwogfQpAQCAtNTAwNywxMCAmIzQzOzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJLyogQ2xlYXIgYWxsIHRhc2sgZmxhZ3MgKi8KIAliaXRtYXBfemVybyh0cC0mZ3Q7d2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7CiAKLQlwaHlfc3RvcCh0cC0mZ3Q7cGh5ZGV2KTsKLQogCS8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQogCQlydGxfc2ZwX3Jlc2V0KHRwKTsKIAogCXJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTsKQEAgLTUwMzIsMTQgJiM0Mzs1MTcwLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAogCXBjaV9zZXRfbWFzdGVyKHRwLSZndDtwY2lfZGV2KTsKLQlwaHlfaW5pdF9odyh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwotCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwogCW5hcGlfZW5hYmxlKCZhbXA7dHAtJmd0O25hcGkpOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKLQotCXBoeV9zdGFydCh0cC0mZ3Q7cGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDQ5LDEzICYjNDM7NTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXBoeWxpbmtfc3RvcCh0cC0mZ3Q7cGh5bGluayk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJ0bDgxNjlfZG93bih0cCk7CiAJcnRsODE2OV9yeF9jbGVhcih0cCk7CiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsMTEgJiM0Mzs1MjQ5LDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCi0JcmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOwotCiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAJcnRsODE2OV91cCh0cCk7CiYjNDM7CXBoeWxpbmtfc3RhcnQodHAtJmd0O3BoeWxpbmspOwogCXJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiBvdXQ6CkBAIC01MjIxLDYgJiM0Mzs1MzYwLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiAJLyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqLwogCXJ0bF9pbml0X3J4Y2ZnKHRwKTsKIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJcmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTsKIH0KIApAQCAtNTI4OCw2ICYjNDM7NTQzMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlyODE2OV9yZW1vdmVfbGVkcyh0cC0mZ3Q7bGVkcyk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKJiM0MzsJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAogCWlmICh0cC0mZ3Q7ZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpCiAJCXJ0bDgxNjhfZHJpdmVyX3N0b3AodHApOwpAQCAtNTMxMCw3ICYjNDM7NTQ1Myw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAJLm5kb19maXhfZmVhdHVyZXMJPSBydGw4MTY5X2ZpeF9mZWF0dXJlcywKIAkubmRvX3NldF9mZWF0dXJlcwk9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsX3NldF9tYWNfYWRkcmVzcywKLQkubmRvX2V0aF9pb2N0bAkJPSBwaHlfZG9faW9jdGxfcnVubmluZywKJiM0MzsJLm5kb19ldGhfaW9jdGwJCT0gcnRsODE2OV9pb2N0bCwKIAkubmRvX3NldF9yeF9tb2RlCT0gcnRsX3NldF9yeF9tb2RlLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBydGw4MTY5X25ldHBvbGwsCkBAIC01NDc0LDE2ICYjNDM7NTYxNyw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzMyLDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghdHAtJmd0O3Bjcy5vcHMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8CiYjNDM7CSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKQomIzQzOwkJcmV0dXJuICZhbXA7dHAtJmd0O3BjczsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHAtJmd0O21hY19vY3BfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTsKJiM0MzsJdmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7CiYjNDM7CQl1MTYgc3RhdDE7CiYjNDM7CiYjNDM7CQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlpZiAoIShzdGF0MSAmYW1wOyBNRElPX1NUQVQxX0xTVEFUVVMpKQomIzQzOwkJCXN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtsaW5rID0gISEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKTsKJiM0MzsJCWlmICghc3RhdGUtJmd0O2xpbmspCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwomIzQzOwkJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHsKJiM0MzsJCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjoKJiM0MzsJCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCXI4MTI3X3NmcF9pbml0XzFnKHRwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJbmV0ZGV2X2Vycih0cC0mZ3Q7ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTsKJiM0MzsKJiM0MzsJcnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLAomIzQzOwkubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLAomIzQzOwkubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93biwKJiM0MzsJLm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLAomIzQzOwkubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSwKJiM0MzsJLm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMKJiM0MzsJICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlCiYjNDM7CSAqLwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNjMpCiYjNDM7CQljYXBzIHw9IE1BQ18yNTAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl83MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJY2FwcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNhcHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7CiYjNDM7CS5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSwKJiM0MzsJLnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLAomIzQzOwkucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBsOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7CiYjNDM7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO3RwLSZndDtkZXYtJmd0O2RldjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7c2ZwX21vZGUpIHsKJiM0MzsJY2FzZSBSVExfU0ZQXzgxNjhfQUY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTI3X0FURjoKJiM0MzsJCXRwLSZndDtwY3Mub3BzID0gJmFtcDtyODE2OV9wY3Nfb3BzOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHwKJiM0MzsJCQkJCQkJICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7CiYjNDM7CQllbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpZiAodHAtJmd0O3N1cHBvcnRzX2dtaWkpCiYjNDM7CQkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDsgUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgomIzQzOwkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19zZXRfYml0KHBoeV9tb2RlLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMpCiYjNDM7CQlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwNDEsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNTgsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNiAmIzQzOzYxOTcsOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCA1OWRmZTM1YWZhNTRmLi4zNGEwZTRmOWIzZGRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKQEAgLTE4MjgsNiAmIzQzOzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCwKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspOwogCiYjNDM7LyoqCiYjNDM7ICogcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoKSAtIFVwZGF0ZSB0aGUgcGh5bGluayBwYXVzZSBmcmFtZSBjb25maWd1cmF0aW9uCiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSAmYW1wO3N0cnVjdCBwaHlsaW5rIGluc3RhbmNlCiYjNDM7ICogQHBhdXNlX3N0YXRlOiBiaXRtYXNrIGluZGljYXRpbmcgdGhlIG5ldyBwYXVzZSBzdGF0ZQomIzQzOyAqCiYjNDM7ICogVXBkYXRlIHRoZSBNQUMgcGF1c2UgZnJhbWUgKGZsb3cgY29udHJvbCkgc3RhdGUgZm9yIHRoZSBwaHlsaW5rIGluc3RhbmNlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgaW50IHBhdXNlX3N0YXRlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CWJvb2wgdHhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSAmYW1wOyBNTE9fUEFVU0VfVFgpOwomIzQzOwlib29sIHJ4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX1JYKTsKJiM0MzsJYm9vbCBtYW51YWxfY2hhbmdlZDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BsLSZndDtzdGF0ZV9tdXRleCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llcwomIzQzOwkgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkCiYjNDM7CSAqIGJlOgomIzQzOwkgKiBldGh0b29sICBMb2NhbCBkZXZpY2UKJiM0MzsJICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpcgomIzQzOwkgKiAgMCAgIDAgICAwICAgICAwCiYjNDM7CSAqICAxICAgMCAgIDEgICAgIDEKJiM0MzsJICogIDAgICAxICAgMCAgICAgMQomIzQzOwkgKiAgMSAgIDEgICAxICAgICAxCiYjNDM7CSAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZQomIzQzOwkgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLgomIzQzOwkgKi8KJiM0MzsJbGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLAomIzQzOwkJCSAgIHJ4X3BhdXNlKTsKJiM0MzsKJiM0MzsJbWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLSZndDtwYXVzZSBeIHBhdXNlX3N0YXRlKSAmYW1wOyBNTE9fUEFVU0VfQU4gfHwKJiM0MzsJCQkgKCEocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX0FOKSAmYW1wOyZhbXA7CiYjNDM7CQkJICAgKGNvbmZpZy0mZ3Q7cGF1c2UgXiBwYXVzZV9zdGF0ZSkgJmFtcDsgTUxPX1BBVVNFX1RYUlhfTUFTSyk7CiYjNDM7CiYjNDM7CWNvbmZpZy0mZ3Q7cGF1c2UgPSBwYXVzZV9zdGF0ZTsKJiM0MzsKJiM0MzsJLyogVXBkYXRlIG91ciBpbi1iYW5kIGFkdmVydGlzZW1lbnQsIHRyaWdnZXJpbmcgYSByZW5lZ290aWF0aW9uIGlmCiYjNDM7CSAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoIXBsLSZndDtwaHlkZXYpCiYjNDM7CQlwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJLyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbAomIzQzOwkgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVybgomIzQzOwkgKiBjYWxsIG91ciBwaHlsaW5rX3BoeV9jaGFuZ2UoKSBhbmQgdHJpZ2dlciBhIHJlc29sdmUuICBOb3RlIHRoYXQKJiM0MzsJICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuCiYjNDM7CSAqLwomIzQzOwlpZiAocGwtJmd0O3BoeWRldikKJiM0MzsJCXBoeV9zZXRfYXN5bV9wYXVzZShwbC0mZ3Q7cGh5ZGV2LCByeF9wYXVzZSwgdHhfcGF1c2UpOwomIzQzOwomIzQzOwkvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGEKJiM0MzsJICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlCiYjNDM7CSAqIGxpbmsgd2lsbCBjeWNsZS4KJiM0MzsJICovCiYjNDM7CWlmIChtYW51YWxfY2hhbmdlZCkgewomIzQzOwkJcGwtJmd0O2xpbmtfZmFpbGVkID0gdHJ1ZTsKJiM0MzsJCXBoeWxpbmtfcnVuX3Jlc29sdmUocGwpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UKJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpCiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGEgTUFDIGRyaXZlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgaXRzIHBhdXNlIHN0YXRlLAomIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS4KJiM0MzsgKiBJdCByZWNhbGN1bGF0ZXMgc3VwcG9ydGVkIGxpbmsgbW9kZXMgYW5kIHRyaWdnZXJzIHJlbmVnb3RpYXRpb24gaWYgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlOwomIzQzOwlpbnQgcGF1c2Vfc3RhdGU7CiYjNDM7CiYjNDM7CUFTU0VSVF9SVE5MKCk7CiYjNDM7CiYjNDM7CWlmIChtYWNfcGF1c2UgJmFtcDsgfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpKSB7CiYjNDM7CQlwaHlsaW5rX2VycihwbCwgJiMzNDtBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKJiM0MzsJb2xkX3BhdXNlID0gcGwtJmd0O2NvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyAmYW1wOyAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTsKJiM0MzsJaWYgKG9sZF9wYXVzZSA9PSBtYWNfcGF1c2UpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwbC0mZ3Q7c3RhdGVfbXV0ZXgpOwomIzQzOwomIzQzOwlwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzICZhbXA7PSB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7CiYjNDM7CXBsLSZndDtjb25maWctJmd0O21hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlOwomIzQzOwomIzQzOwlwaHlsaW5rX3NldChwbC0mZ3Q7c3VwcG9ydGVkLCBQYXVzZSk7CiYjNDM7CXBoeWxpbmtfc2V0KHBsLSZndDtzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpOwomIzQzOwomIzQzOwlpZiAocGwtJmd0O3BoeWRldikKJiM0MzsJCWxpbmttb2RlX2FuZChwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7cGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwomIzQzOwllbHNlIGlmIChwbC0mZ3Q7c2ZwX2J1cykKJiM0MzsJCWxpbmttb2RlX2FuZChwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c3VwcG9ydGVkLCBwbC0mZ3Q7c2ZwX3N1cHBvcnQpOwomIzQzOwomIzQzOwlwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC0mZ3Q7c3VwcG9ydGVkLCBjb25maWcpOwomIzQzOwomIzQzOwlwYXVzZV9zdGF0ZSA9IGNvbmZpZy0mZ3Q7cGF1c2U7CiYjNDM7CiYjNDM7CWlmICghcGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIFBhdXNlKSkgewomIzQzOwkJcGF1c2Vfc3RhdGUgJmFtcDs9IH4oTUxPX1BBVVNFX1JYIHwgTUxPX1BBVVNFX1RYKTsKJiM0MzsJfSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKSB7CiYjNDM7CQlpZiAoKHBhdXNlX3N0YXRlICZhbXA7IE1MT19QQVVTRV9SWCkgXiAocGF1c2Vfc3RhdGUgJmFtcDsgTUxPX1BBVVNFX1RYKSkKJiM0MzsJCQlwYXVzZV9zdGF0ZSAmYW1wOz0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3BsLSZndDtzdGF0ZV9tdXRleCk7CiYjNDM7CiYjNDM7CXBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpOwomIzQzOwogLyoqCiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZQogICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgJmFtcDtzdHJ1Y3QgcGh5bGlua19jb25maWcKQEAgLTMxOTAsOCAmIzQzOzMzMTAsNiBAQCBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0pOwogaW50IHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsCiAJCQkJICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqcGF1c2UpCiB7Ci0Jc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7Ci0JYm9vbCBtYW51YWxfY2hhbmdlZDsKIAlpbnQgcGF1c2Vfc3RhdGU7CiAKIAlBU1NFUlRfUlROTCgpOwpAQCAtMzIxNSw1NCAmIzQzOzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCwKIAlpZiAocGF1c2UtJmd0O3R4X3BhdXNlKQogCQlwYXVzZV9zdGF0ZSB8PSBNTE9fUEFVU0VfVFg7CiAKLQltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKLQkvKgotCSAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llcwotCSAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGQKLQkgKiBiZToKLQkgKiBldGh0b29sICBMb2NhbCBkZXZpY2UKLQkgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyCi0JICogIDAgICAwICAgMCAgICAgMAotCSAqICAxICAgMCAgIDEgICAgIDEKLQkgKiAgMCAgIDEgICAwICAgICAxCi0JICogIDEgICAxICAgMSAgICAgMQotCSAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZQotCSAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uCi0JICovCi0JbGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcsIHBhdXNlLSZndDt0eF9wYXVzZSwKLQkJCSAgIHBhdXNlLSZndDtyeF9wYXVzZSk7Ci0KLQltYW51YWxfY2hhbmdlZCA9IChjb25maWctJmd0O3BhdXNlIF4gcGF1c2Vfc3RhdGUpICZhbXA7IE1MT19QQVVTRV9BTiB8fAotCQkJICghKHBhdXNlX3N0YXRlICZhbXA7IE1MT19QQVVTRV9BTikgJmFtcDsmYW1wOwotCQkJICAgKGNvbmZpZy0mZ3Q7cGF1c2UgXiBwYXVzZV9zdGF0ZSkgJmFtcDsgTUxPX1BBVVNFX1RYUlhfTUFTSyk7Ci0KLQljb25maWctJmd0O3BhdXNlID0gcGF1c2Vfc3RhdGU7Ci0KLQkvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWYKLQkgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLgotCSAqLwotCWlmICghcGwtJmd0O3BoeWRldikKLQkJcGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7Ci0KLQltdXRleF91bmxvY2soJmFtcDtwbC0mZ3Q7c3RhdGVfbXV0ZXgpOwotCi0JLyogSWYgd2UgaGF2ZSBhIFBIWSwgYSBjaGFuZ2Ugb2YgdGhlIHBhdXNlIGZyYW1lIGFkdmVydGlzZW1lbnQgd2lsbAotCSAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuCi0JICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0Ci0JICogd2UgY2FuJiMzOTt0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuCi0JICovCi0JaWYgKHBsLSZndDtwaHlkZXYpCi0JCXBoeV9zZXRfYXN5bV9wYXVzZShwbC0mZ3Q7cGh5ZGV2LCBwYXVzZS0mZ3Q7cnhfcGF1c2UsCi0JCQkJICAgcGF1c2UtJmd0O3R4X3BhdXNlKTsKLQotCS8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYQotCSAqIHJlc29sdmUgdG8gdXBkYXRlIHRoZWlyIHN0YXRlOyB3ZSBjYW4gbm90IGd1YXJhbnRlZSB0aGF0IHRoZQotCSAqIGxpbmsgd2lsbCBjeWNsZS4KLQkgKi8KLQlpZiAobWFudWFsX2NoYW5nZWQpIHsKLQkJcGwtJmd0O2xpbmtfZmFpbGVkID0gdHJ1ZTsKLQkJcGh5bGlua19ydW5fcmVzb2x2ZShwbCk7Ci0JfQomIzQzOwlwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCmluZGV4IGI2NWQwZjVmYTFhMDEuLjQ3MjFiYTA3MWNiYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jCkBAIC0xNyw3ICYjNDM7MTcsNiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvY2xrLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3RyaW5nX2Nob2ljZXMuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7Li4vcGh5bGliLmgmIzM0OwogI2luY2x1ZGUgJiMzNDtyZWFsdGVrLmgmIzM0OwpAQCAtMjY0Niw0NSAmIzQzOzI2NDUsNiBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODIyMWJfaGFuZGxlX2ludGVycnVwdChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotc3RhdGljIGludCBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMDBiYXNlVF9GdWxsX0JJVCwKLQkJCSBwaHlkZXYtJmd0O3N1cHBvcnRlZCk7Ci0KLQkvKiBzZXQgZGVmYXVsdCBtb2RlICovCi0JcGh5ZGV2LSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwotCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gRFVQTEVYX0ZVTEw7Ci0KLQlwaHlkZXYtJmd0O3BvcnQgPSBQT1JUX0ZJQlJFOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQotewotCWludCB2YWwsIGVycjsKLQotCWVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpOwotCWlmIChlcnIpCi0JCXJldHVybiBlcnI7Ci0KLQlpZiAoIXBoeWRldi0mZ3Q7bGluaykKLQkJcmV0dXJuIDA7Ci0KLQl2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7Ci0JaWYgKHZhbCAmbHQ7IDApCi0JCXJldHVybiB2YWw7Ci0KLQlydGxnZW5fZGVjb2RlX3BoeXNyKHBoeWRldiwgdmFsKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0gewogCXsKIAkJUEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLApAQCAtMjkzNCwyMCAmIzQzOzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7CiAJCS53cml0ZV9wYWdlCT0gcnRsODIxeF93cml0ZV9wYWdlLAogCQkucmVhZF9tbWQJPSBydGw4MjJ4X3JlYWRfbW1kLAogCQkud3JpdGVfbW1kCT0gcnRsODIyeF93cml0ZV9tbWQsCi0JfSwgewotCQlQSFlfSURfTUFUQ0hfRVhBQ1QoUEhZX0lEX1JUTF9EVU1NWV9TRlApLAotCQkubmFtZQkJPSAmIzM0O1JlYWx0ZWsgU0ZQIFBIWSBNb2RlJiMzNDssCi0JCS5mbGFncwkJPSBQSFlfSVNfSU5URVJOQUwsCi0JCS5wcm9iZQkJPSBydGw4MjJ4X3Byb2JlLAotCQkuZ2V0X2ZlYXR1cmVzCT0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsCi0JCS5jb25maWdfYW5lZwk9IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcsCi0JCS5yZWFkX3N0YXR1cwk9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsCi0JCS5zdXNwZW5kCT0gZ2VucGh5X3N1c3BlbmQsCi0JCS5yZXN1bWUJCT0gcnRsZ2VuX3Jlc3VtZSwKLQkJLnJlYWRfcGFnZQk9IHJ0bDgyMXhfcmVhZF9wYWdlLAotCQkud3JpdGVfcGFnZQk9IHJ0bDgyMXhfd3JpdGVfcGFnZSwKLQkJLnJlYWRfbW1kCT0gcnRsODIyeF9yZWFkX21tZCwKLQkJLndyaXRlX21tZAk9IHJ0bDgyMnhfd3JpdGVfbW1kLAogCX0sIHsKIAkJUEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLAogCQkubmFtZQkJPSAmIzM0O1JUTDgyMjQgMi41R2JwcyBQSFkmIzM0OywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7CiAKIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTsKIAomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMAotLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaAomIzQzOyYjNDM7JiM0MzsgL2Rldi9udWxsCkBAIC0xLDcgJiM0MzswLDAgQEAKLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovCi0jaWZuZGVmIF9SRUFMVEVLX1BIWV9ICi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9ICi0KLSNkZWZpbmUJUEhZX0lEX1JUTF9EVU1NWV9TRlAJMHgwMDFjY2JmZgotCi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi8KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIwODAKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyMjgzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsICYjMzQ7Q2FuIHdlIGZ1enogdGhlc2UgY2hhbmdlcz8mIzM0OyBJdCBsb29rcyBsaWtlIHdlJiMzOTt2ZSBnb3QgbW9kaWZpY2F0aW9ucyB0byBgcjgxNjlfbWFpbi5jYCwgYHBoeWxpbmsuY2AsIGFuZCBhIGZldyByZWxhdGVkIGluY2x1ZGUgZmlsZXMuIFRoZSBkcml2ZXImIzM5O3MgYmVpbmcgY29udmVydGVkIHRvIHVzZSBwaHlsaW5rLCBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zIGlzIGFkZGVkLCBhbmQgdGhlcmUmIzM5O3MgYSBuZXcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICYjMzQ7Q2FuIHN5emthbGxlciBnZXQgdG8gaXQ/JiMzNDsKClRoZSBgcjgxNjlgIGRyaXZlciBpcyBmb3IgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVycy4gUUVNVSBlbXVsYXRlcyB0aGUgb2xkZXIgYHJ0bDgxMzlgLCBub3QgYHI4MTY5YCwgc28gdGhhdCYjMzk7cyBhIGRlYWQgZW5kIGZvciBkaXJlY3QgUUVNVSBlbXVsYXRpb24uIEJ1dCwgd2FpdC4uLiBkb2VzIHRoYXQgKnJlYWxseSogbWF0dGVyPyBTeXprYWxsZXIgaGFzIHRoaXMgUENJIGZ1enplciwgcmlnaHQ/IEl0IGNhbiBmdXp6ICphbnkqIFBDSSBkcml2ZXIgYmVjYXVzZSBpdCBjcmVhdGVzIHZpcnR1YWwgUENJIGRldmljZXMgdmlhIGBzeXpfcGNpX3NldHVwYC4gSXQgZG9lc24mIzM5O3QgbmVlZCB0aGUgc3BlY2lmaWMgZGV2aWNlIHRvIGJlIGVtdWxhdGVkIGJ5IHRoZSBWTS4gVGhhdCYjMzk7cyBrZXkuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGNhbiBwb2tlIGF0IGByODE2OV9tYWluLmNgIG5vIHByb2JsZW0sIEkgdGhpbmsuCgpUaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwaHlsaW5rLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBsaW5rIGNvZGUuIFRoZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgZnVuY3Rpb24gaXMgYWRkZWQgYW5kIGV4cG9ydGVkLiBQaHlsaW5rIGlzIHVzZWQgYnkgbG90cyBvZiBuZXR3b3JrIGRyaXZlcnMuIFRoZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAgc28gdGhpcyBpcyByZWFjaGFibGUuCgpOb3csIGxldCYjMzk7cyBzZWUgaWYgdGhpcyBwYXRjaCBmYWxscyBpbnRvIHRoZSAmIzM0O25vdCB3b3J0aCBmdXp6aW5nJiMzNDsgY2F0ZWdvcnkuIFRoZSBwcm9tcHQgc2F5cyB3ZSBzaG91bGQgc2tpcCBjb2RlIHRoYXQgaXMgJiMzNDtpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlJiMzNDsuIEl0IGFsc28gc2F5cyB3ZSBzaG91bGQgc2tpcCB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgbGlrZSBTbWFydE5JQyBvciBHUFUgZHJpdmVycyB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIElzIGByODE2OWAgYSB2ZW5kb3Itc3BlY2lmaWMgU21hcnROSUMgb3Igc3dpdGNoPyBObywgaXQmIzM5O3MganVzdCBhIHJlZ3VsYXIgRXRoZXJuZXQgTklDLgoKU3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuIGRlZmluaXRlbHkgZnV6eiB0aGlzIGlmIHRoZSBQQ0kgZHJpdmVyIGNhbiBiZSBmb3VuZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBgcjgxNjlgIGlzIGluIHN5emthbGxlciYjMzk7cyBrZXJuZWwgY29uZmlnLCBzbyBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIGZpbGUuIFl1cCwgdGhlcmUgaXMgYW4gYFI4MTY5YCB0aGF0IGlzIGRlcGVuZGVudCBvbiBgUENJYC4gQW5kLCB0aGVyZSBhcmUgYHJ0bDgxNjlfcGNpX3RibGAgc28gd2UgaGF2ZSBzcGVjaWZpYyBQQ0kgSURzLiBFeGNlbGxlbnQhCgpPa2F5LCBzbyBpcyBwaHlsaW5rIHJlYWNoYWJsZT8gSXQgaXMgYmVjYXVzZSB0aGUgZnVuY3Rpb25zIGBwaHlsaW5rLmNgIGFyZSBjb3JlIG5ldHdvcmtpbmcgY29kZSB1c2VkIGJ5IFBIWXMuIFRoaXMgY2FuIGJlIHJlYWNoYWJsZSBieSBhbnkgZW11bGF0ZWQgZGV2aWNlIHRoYXQgdXNlcyBgcGh5bGlua2AsIGFuZCB0aGVyZSBhcmUgc29tZS4KClNvLCBsZXQmIzM5O3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXMgaW4gYHI4MTY5X21haW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdGhhdCBjb25maWd1cmUgdGhlIE1BQyAoaW5jbHVkaW5nIG9uZSB0aGF0IGRpc2FibGVzIFRYIExQSSBhbmQgZW5hYmxlcyBpdCksIGFuZCBleGlzdGluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIChsaWtlIGBydGw4MTY5X2NoYW5nZV9tdHVgIGFuZCBgcnRsODE2OV9pb2N0bGApIHNvIHRob3NlIG5lZWQgdG8gYmUgY2hlY2tlZC4gU2luY2UgdGhlIGNoYW5nZXMgaGVyZSBhZGQgbmV3IGNvZGUgYW5kIG1vZGlmeSBleGlzdGluZyBjb2RlLCBhbmQgc2luY2Ugc3l6a2FsbGVyJiMzOTtzIFBDSSBmdXp6ZXIgY2FuICpkZWZpbml0ZWx5KiBiZSB1c2VkIHRvIHRlc3QgdGhlIGNoYW5nZXMgd2l0aGluIGByODE2OWAsIEkmIzM5O20gZ29pbmcgdG8gc2F5IHRoaXMgaXMgYWJzb2x1dGVseSB3b3J0aCBmdXp6aW5nLgoKTXkgdGhpbmtpbmcgaXMgdGhhdCBldmVuIGlmIHRoZSBRRU1VIGRvZXNuJiMzOTt0IGVtdWxhdGUgdGhlIHNwZWNpZmljIGRldmljZSB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgc2ltdWxhdGVzIHRoZSBQQ0kgZGV2aWNlIGFuZCB0aGVuIHJlYWRzIGFuZCB3cml0ZXMgdGhlIE1NSU8vUElPLgoKYHI4MTY5YCBpcyBhIHN0YW5kYXJkIFBDSSBkcml2ZXIsIGFuZCBzeXprYWxsZXIgaGFzIGEgUENJIGZ1enplci4gVGhpcyBzaG91bGQgYmUgZ29vZC4gQWxzbywgYHBoeWxpbmsuY2AgaXMgYmVpbmcgbW9kaWZpZWQsIHNvIGRlZmluaXRlbHkgcmVhY2hhYmxlIGlmIGFuIGVtdWxhdGVkIGRyaXZlciB1c2VzIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfY3JlYXRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYz0xMDIzPXN0YXRpYyBpbnQgbWFjYl9taWlfcHJvYmUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jLTEwODUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jOjEwODY6XHRicC1cdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2YnAtXHUwMDNlcGh5bGlua19jb25maWcsIGJwLVx1MDAzZXBkZXYtXHUwMDNlZGV2LmZ3bm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4Ny1cdFx0XHRcdCAgICAgYnAtXHUwMDNlcGh5X2ludGVyZmFjZSwgXHUwMDI2bWFjYl9waHlsaW5rX29wcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0MjQKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBMaW5lIG9mIElucXVpcnk6IFBIWSBMaW5rcyBhbmQgUmVsZXZhbnQgQ29udHJvbGxlcnMqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgbmV0d29yayBjb250cm9sbGVycyBhcmUgaW1wbGVtZW50ZWQgaW4gdGhpcyBlbWJlZGRlZCBzeXN0ZW1zIGNvbnRleHQsIHNwZWNpZmljYWxseSBjb25jZXJuaW5nIFBIWSBsYXllciBpbnRlcmFjdGlvbnMuIEkmIzM5O20gcHJldHR5IGNlcnRhaW4gdGhhdCB0aGUgYG1hY2JgIGRyaXZlciB1dGlsaXplcyBgcGh5bGlua2AsIHRoYXQgbXVjaCBJIGtub3cuIE5vdywgSSYjMzk7bSB0cnlpbmcgdG8gbWFrZSBhIGNvbm5lY3Rpb24gcmVnYXJkaW5nIGBmZWNgLCB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciwgYmVjYXVzZSBJIHJlbWVtYmVyIGl0JiMzOTtzIGVtdWxhdGVkIGJ5IFFFTVUgd2hlbiBydW5uaW5nIGkuTVggYm9hcmQgaW1hZ2VzLiBUaGUgcXVlc3Rpb24gdGhhdCBoYXMgcG9wcGVkIGludG8gbXkgaGVhZCBpcywgZG9lcyBgZmVjYCwgd2hlbiBlbXVsYXRlZCwgYWxzbyByZWx5IG9uIGBwaHlsaW5rYD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhlcmUgaXMgYSBjb25zaXN0ZW50IGFwcHJvYWNoIGFjcm9zcyB0aGVzZSBpbXBsZW1lbnRhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5bGlua19jcmVhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM9MjAxPXN0YXRpYyBpbnQgZHBhYV9uZXRkZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0X2Rldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jLTI3NC1cdG1hY19kZXYtXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmM6Mjc1Olx0bWFjX2Rldi1cdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2bWFjX2Rldi1cdTAwM2VwaHlsaW5rX2NvbmZpZyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVx0XHRcdFx0XHQgIGRldl9md25vZGUobWFjX2Rldi1cdTAwM2VkZXYpLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhMi9kcGFhMi1tYWMuYz01NjA9aW50IGRwYWEyX21hY19jb25uZWN0KHN0cnVjdCBkcGFhMl9tYWMgKm1hYylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI0LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jOjYyNTpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZtYWMtXHUwMDNlcGh5bGlua19jb25maWcsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVx0XHRcdFx0IGRwbWFjX25vZGUsIG1hYy1cdTAwM2VpZl9tb2RlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYz05MzE9c3RhdGljIGludCBlbmV0YzRfbGlua19pbml0KHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5NTA6XHRlcnIgPSBlbmV0Y19waHlsaW5rX2NyZWF0ZShwcml2LCBub2RlLCBcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05NTEtXHRpZiAoZXJyKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUyLVx0XHRkZXZfZXJyKGRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxuXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYzo5NTM6XHRcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk1NC1cdH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU3LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jOjk1ODplcnJfcGh5bGlua19jcmVhdGU6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU5LVx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz03OTU9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04NzctXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo4Nzg6XHRlcnIgPSBlbmV0Y19waHlsaW5rX2NyZWF0ZShwcml2LCBub2RlLCBcdTAwMjZlbmV0Y19tYWNfcGh5bGlua19vcHMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODc5LVx0aWYgKGVycilcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jOjg4MDpcdFx0Z290byBlcnJfcGh5bGlua19jcmVhdGU7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04ODEtXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODg5LVx0ZW5ldGNfcGh5bGlua19kZXN0cm95KHByaXYpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODkwOmVycl9waHlsaW5rX2NyZWF0ZTpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg5MS1cdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jPTQxOT1FWFBPUlRfU1lNQk9MX0dQTChlbmV0Y19tZGlvYnVzX2Rlc3Ryb3kpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTQyMC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0MjE6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00MjItXHRcdFx0IGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgKm9wcylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYxLVx0cGYtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyA9IG1hY19jYXBzO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjQ2MjpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZwZi1cdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NjMtXHRcdFx0XHQgcGYtXHUwMDNlaWZfbW9kZSwgb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDcyLX1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0NzM6RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfcGh5bGlua19jcmVhdGUpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jLTQ3NC1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg9MTI9dm9pZCBlbmV0Y19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IGVuZXRjX3BmICpwZik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg6MTM6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uaC0xNC1cdFx0XHQgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyAqb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYz04NTM9c3RhdGljIGludCBmc19lbmV0X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKm9mZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTkzMi1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jOjkzMzpcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcdTAwMjZmZXAtXHUwMDNlcGh5bGlua19jb25maWcsIGRldl9md25vZGUoZmVwLVx1MDAzZWRldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzQtXHRcdFx0XHQgcGh5X21vZGUsIFx1MDAyNmZzX2VuZXRfcGh5bGlua19tYWNfb3BzKTtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYz0zNDE5PXN0YXRpYyBpbnQgdWNjX2dldGhfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSogb2ZkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3My1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS91Y2NfZ2V0aC5jOjM1NzQ6XHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dWdldGgtXHUwMDNlcGh5bGlua19jb25maWcsIGRldl9md25vZGUoXHUwMDI2ZGV2LVx1MDAzZWRldiksXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYy0zNTc1LVx0XHRcdFx0IHBoeV9pbnRlcmZhY2UsIFx1MDAyNnVnZXRoX21hY19vcHMpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NTY0CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKgoKT2theSwgc28gYHBoeWxpbmtgIGlzIGEgZGVwZW5kZW5jeSwgYW5kIHRoaXMgcGF0Y2ggdG91Y2hlcyBgcjgxNjlfbWFpbi5jYCBkaXJlY3RseS4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgYHI4MTY5YCBpcyBhIHdvcnRod2hpbGUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCYjMzk7cyBhIHN0YW5kYXJkIE5JQyBkcml2ZXIsIGFuZCB0aG9zZSBhcmUgYWx3YXlzIGludGVyZXN0aW5nIGF0dGFjayBzdXJmYWNlcy4gTm93LCBsZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfUjgxNjlgLCBvZiBjb3Vyc2UuIEFuZCwgdGhlIGZhY3QgdGhhdCBgUjgxNjlgIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCBtZWFucyB0aGF0JiMzOTtzIGF1dG9tYXRpY2FsbHkgaW5jbHVkZWQsIHdoaWNoIGlzIGdvb2QgdG8ga25vdy4gVG8gYmUgYWJzb2x1dGVseSBzdXJlLCBJJiMzOTtsbCBxdWlja2x5IGdsYW5jZSBhdCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCB0byBjb25maXJtIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgb3IgcmVsYXRlZCBjb25maWd1cmF0aW9ucyBJIHNob3VsZCBiZSBhd2FyZSBvZi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgODA6XHRcdCAgUlgtcmVzZXQgbWV0aG9kIHNob3VsZCBiZSBhZGVxdWF0ZSBmb3IgYWxsIGJvYXJkcy4gIEJ1dCBpZiB5b3VcbiAgODE6XHRcdCAgZXhwZXJpZW5jZSBwcm9ibGVtcywgeW91IGNhbiBlbmFibGUgdGhpcyBvcHRpb24gdG8gcmVzdG9yZSB0aGVcbiAgODI6XHRcdCAgb2xkIFJYLXJlc2V0IGJlaGF2aW9yLiAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgODM6XHRcbiAgODQ6XHRjb25maWcgUjgxNjlcbiAgODU6XHRcdHRyaXN0YXRlIFwmIzM0O1JlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG4gIDg2Olx0XHRkZXBlbmRzIG9uIFBDSVxuICA4NzpcdFx0c2VsZWN0IEZXX0xPQURFUlxuICA4ODpcdFx0c2VsZWN0IENSQzMyXG4gIDg5Olx0XHRzZWxlY3QgUkVBTFRFS19QSFlcbiAgOTA6XHRcdHNlbGVjdCBQSFlMSU5LXG4gIDkxOlx0XHRoZWxwXG4gIDkyOlx0XHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXG4gIDkzOlx0XHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG4gIDk0Olx0XHQgIFJUTDgxNjkgR2lnYWJpdCBFdGhlcm5ldFxuICA5NTpcdFx0ICBSVEw4MTY4IEdpZ2FiaXQgRXRoZXJuZXRcbiAgOTY6XHRcdCAgUlRMODEwMSBGYXN0IEV0aGVybmV0XG4gIDk3Olx0XHQgIFJUTDgxMjUgMi41R0JpdCBFdGhlcm5ldFxuICA5ODpcdFxuICA5OTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjgyMTMKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlYWx0ZWsgRHJpdmVyIHdpdGggUGh5bGluayBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBSZWFsdGVrIGRyaXZlciBwYXRjaCwgc3BlY2lmaWNhbGx5IHRoZSBvbmUgcmVsYXRlZCB0byBgQ09ORklHX1I4MTY5YC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBjb25maWcgb3B0aW9uLiBOb3csIGBDT05GSUdfUkVBTFRFS19QSFlgIGlzIGludGVyZXN0aW5nLCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyBhIGRlcGVuZGVuY3kuIE9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGEgYmFzZSBkZXBlbmRlbmN5IGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLgoKVGhlIGtleSBjaGFuZ2UgaXMgdGhlIGludGVncmF0aW9uIHdpdGggYHBoeWxpbmtgLCBpbmRpY2F0ZWQgYnkgdGhlIHBhdGNoIG1vZGlmeWluZyBgcjgxNjlfbWFpbi5jYC4gTGV0JiMzOTtzIHNlZS4uLiBhIGJ1bmNoIG9mIGZ1bmN0aW9ucyBhcmUgYWRkZWQgb3IgbW9kaWZpZWQ6IGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGw4MTY5X3Bjc19jb25maWdgLCBgcnRsODE2OV9wY3NfdmFsaWRhdGVgLCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAsIGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfbndheV9yZXNldGAsIGFuZCB0aGVuIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBpbiBgcGh5bGluay5jYC4KCk9rYXksIHNvIEkmIzM5O20gZ29pbmcgdG8gY2hlY2sgdGhlIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBmdW5jdGlvbi4gSXQmIzM5O3MgaW4gYHBoeWxpbmsuY2AsIHNvIGl0IG1pZ2h0IGJlIGV4cG9ydGVkLiBZZXAsIGBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtgLiBUaGF0JiMzOTtzIGdvb2QuIEFuZCBpdCYjMzk7cyBjYWxsZWQgZnJvbSBgcnRsODE2OV9jaGFuZ2VfbXR1YC4gU2luY2UgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIGFuIGludGVyZXN0aW5nIGZ1bmN0aW9uLCBJIHNob3VsZCBmb2N1cyBmdXp6aW5nIGVmZm9ydHMgb24gYHJ0bDgxNjlfY2hhbmdlX210dWAgdG9vLgoKQWxzbywgc2luY2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAgYXJlIGV4cG9zZWQgYXMgZXRodG9vbCBhbmQgbmV0ZGV2IG9wcywgSSBrbm93IHRoZXkgYXJlIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIGlvY3RsIG9yIG5ldGxpbmsuIFRob3NlIGFyZSBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgYXMgd2VsbC4gVGhlc2UgbG9vayBsaWtlIGdvb2Qgc3RhcnRpbmcgcG9pbnRzIGZvciBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz00MjU2PXN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNDI5MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjQyOTE6c3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MjkyLXtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz01NDQ0PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1MS1cdC5uZG9fdmFsaWRhdGVfYWRkclx0PSBldGhfdmFsaWRhdGVfYWRkcixcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU0NTI6XHQubmRvX2NoYW5nZV9tdHVcdFx0PSBydGw4MTY5X2NoYW5nZV9tdHUsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01NDUzLVx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5NzAwCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDk1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBSZWFsdGVrIDgxNjkgRHJpdmVyIEludGVyZmFjZSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSYjMzk7bSBjb25maXJtaW5nIHRoZSBjYWxsYmFjayBtYXBwaW5ncy4gYHJ0bDgxNjlfY2hhbmdlX210dWAgY29ycmVzcG9uZHMgdG8gdGhlIGBuZG9fY2hhbmdlX210dWAgY2FsbGJhY2ssIHN0cmFpZ2h0Zm9yd2FyZC4gYHJ0bDgxNjlfaW9jdGxgIGlzIGhhbmRsaW5nIGBuZG9fZXRoX2lvY3RsYCwgYXMgZXhwZWN0ZWQuIEkmIzM5O20gYWxzbyBjb25maXJtaW5nIHRoZSBldGh0b29sIG9wZXJhdGlvbnM6IGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBnZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgIGZvciBgc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgIGZvciB0aGUgYG53YXlfcmVzZXRgIG9wZXJhdGlvbi4gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIHRoZSBwaHlsaW5rIGNvcmUgZnVuY3Rpb24uCgpOb3csIEkgbmVlZCB0byBsaXN0IHRoZSBrZXkgZnVuY3Rpb25zIEkgc2hvdWxkIGZvY3VzIG9uIHdpdGhpbiB0aGlzIHNwZWNpZmljIGRyaXZlciBjb250ZXh0LiBJIGhhdmU6CgoqICAgYHJ0bDgxNjlfY2hhbmdlX210dWAKKiAgIGBydGw4MTY5X2lvY3RsYAoqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYAoqICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYAoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAKKiAgIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYAoKV2FpdCBhIG1pbnV0ZSwgSSBzaG91bGQgYWxzbyBub3RlIHRoYXQgb3RoZXIgcG90ZW50aWFsbHkgaW1wb3J0YW50IGZ1bmN0aW9ucyBzdWNoIGFzIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGw4MTY5X3Bjc19jb25maWdgLCBgcnRsODE2OV9wY3NfdmFsaWRhdGVgLCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBhcHBlYXIgdG8gYmUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgcjgxNjlfbWFpbi5jYC4gVGhlc2UgbWF5IGJlIGlubGluZWQsIHNvIGl0IGlzIGJldHRlciB0byBwcmlvcml0aXplIHRoZSBlbnRyeSBwb2ludHMsIHdoaWNoIHJlbWFpbjoKCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAoqICAgYHJ0bDgxNjlfaW9jdGxgCiogICBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgCiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgCiogICBgcnRsODE2OV9ud2F5X3Jlc2V0YAoqICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgCgpGaW5hbGx5LCBiZWZvcmUgSSBkaWcgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBhcyBJIGhhdmUganVzdCBub3RlZCB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIGluc3RhbmNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM3LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxODM4OnN0YXRpYyB2b2lkIHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHN0cnVjdCBwaHlsaW5rICpwbCwgaW50IHBhdXNlX3N0YXRlKVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM5LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jPTE5MDQ9dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xOTQ2LVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTQ3Olx0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0OC19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzEwPWludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMzNS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzMzNjpcdHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTMzMzctXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxMjQ3CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIFBhdXNlIEZyYW1lIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gYHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlYCBpcyBkZWZpbml0ZWx5IHN0YXRpYyDigJMgdGhhdCYjMzk7cyBnb29kIHRvIGtub3csIHdlIGNhbiBkaXNyZWdhcmQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSYjMzk7bGwgZm9jdXMgbXkgYXR0ZW50aW9uIG9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAgaW5zdGVhZCwgc2luY2UgdGhvc2UgYXJlIHRoZSBhY3RpdmUgY29tcG9uZW50cy4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBoYXMgYmVlbiBjaGFuZ2VkLiBBaCwgeWVzLCBpdCAqaGFzKiBiZWVuIG1vZGlmaWVkOyBpdCBjYWxscyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgLCB3aGljaCBjb25maXJtcyBpdCYjMzk7cyByZWxldmFudCB0byB0aGUgY3VycmVudCBpbnZlc3RpZ2F0aW9uLgoKVGhlIG5leHQgcG9pbnQgSSBuZWVkIHRvIGNvbnNpZGVyIGlzIHdoZXRoZXIgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9ucyB0aGF0IGFyZSAqbmVlZGVkKi4gTGV0JiMzOTtzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgQ09ORklHX1I4MTY5YCBhbmQgYENPTkZJR19QSFlMSU5LYC4gYENPTkZJR19QSFlMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJ5IGBSODE2OWAsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgSSBzaG91bGQgbGlzdCBpdCBleHBsaWNpdGx5IGFueXdheSwgc28gSSB3aWxsLiBBbmQgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiB0aGUgS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KCmBSODE2OWAgZGVwZW5kcyBvbiBgUENJYC4gYFBDSWAgaXMgc3RhbmRhcmQsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gc3BlY2lmeSB0aGF0LiBJJiMzOTttIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZy4gQWgsIHllcywgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gaXMgdW5kZXIgYE5FVF9WRU5ET1JfUkVBTFRFS2AuIEdvb2QgdG8ga2VlcCBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAxNjo0MTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UmVhbHRlayBkZXZpY2VzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMxOTYwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgYE5FVF9WRU5ET1JfUkVBTFRFS2AgRGVwZW5kZW5jaWVzKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gYE5FVF9WRU5ET1JfUkVBTFRFS2AuIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgZGVwZW5kZW5jaWVzLiBJJiMzOTttIHRoaW5raW5nLCAmIzM0O3doYXQgb3RoZXIga2VybmVsIG1vZHVsZXMgb3Igc3Vic3lzdGVtcyByZWx5IG9uIHRoaXMgcGFydGljdWxhciBkcml2ZXI/JiMzNDsgSXMgaXQgcHVyZWx5IHNlbGYtY29udGFpbmVkLCBvciBkb2VzIGl0IHRvdWNoIGFyZWFzIGxpa2UgbmV0d29ya2luZyBzdGFjayBpbnRlcm5hbHMsIHBvd2VyIG1hbmFnZW1lbnQsIG9yIGhhcmR3YXJlIGFic3RyYWN0aW9uIGxheWVycz8gS25vd2luZyB0aGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIHBvdGVudGlhbCBpbXBhY3Qgb2YgYW55IGNoYW5nZXMgb3IgZGVidWdnaW5nIGFueSBpc3N1ZXMuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIG1vZHVsZSYjMzk7cyBpbnRlcmFjdGlvbnMgdG8gZW5zdXJlIG5vdGhpbmcgZ2V0cyBvdmVybG9va2VkIGR1cmluZyB0cm91Ymxlc2hvb3RpbmcuIFRpbWUgdG8gZ2V0IHRvIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUmVhbHRlayBkZXZpY2UgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXG4gICA3Olx0XHRib29sIFwmIzM0O1JlYWx0ZWsgZGV2aWNlc1wmIzM0O1xuICAgODpcdFx0ZGVmYXVsdCB5XG4gICA5Olx0XHRkZXBlbmRzIG9uIFBDSVxuICAxMDpcdFx0aGVscFxuICAxMTpcdFx0ICBJZiB5b3UgaGF2ZSBhIG5ldHdvcmsgKEV0aGVybmV0KSBjYXJkIGJlbG9uZ2luZyB0byB0aGlzIGNsYXNzLCBzYXkgWS5cbiAgMTI6XHRcbiAgMTM6XHRcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2VzbiYjMzk7dCBkaXJlY3RseSBhZmZlY3QgdGhlXG4gIDE0Olx0XHQgIGtlcm5lbDogc2F5aW5nIE4gd2lsbCBqdXN0IGNhdXNlIHRoZSBjb25maWd1cmF0b3IgdG8gc2tpcCBhbGxcbiAgMTU6XHRcdCAgdGhlIHF1ZXN0aW9ucyBhYm91dCBSZWFsdGVrIGRldmljZXMuIElmIHlvdSBzYXkgWSwgeW91IHdpbGwgYmUgYXNrZWQgZm9yXG4gIDE2Olx0XHQgIHlvdXIgc3BlY2lmaWMgY2FyZCBpbiB0aGUgZm9sbG93aW5nIHF1ZXN0aW9ucy5cbiAgMTc6XHRcbiAgMTg6XHRpZiBORVRfVkVORE9SX1JFQUxURUtcbiAgMTk6XHRcbiAgMjA6XHRjb25maWcgODEzOUNQXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyNDEzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktlcm5lbCBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zLCBzcGVjaWZpY2FsbHkgaG93IFJlYWx0ZWsgZHJpdmVycyBhcmUgaGFuZGxlZC4gYE5FVF9WRU5ET1JfUkVBTFRFS2AgaXMgZXNzZW50aWFsLCBhbmQgdGhhbmtmdWxseSwgaXQgZGVmYXVsdHMgdG8gJiMzOTt5JiMzOTsgYW5kIGRlcGVuZHMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgdGhpbmsgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFI4MTY5YCBpcyBpbmNsdWRlZCBpbiBvdXIgYEVuYWJsZUNvbmZpZ3NgLCBhcyBhIHByZWNhdXRpb24uIE5vdywgd2hhdCBhYm91dCBgUEhZTElOS2A/IEl0JiMzOTtzIHNlbGVjdGVkIGJ5IGBSODE2OWAsIHNvIG15IGluaXRpYWwgdGhvdWdodCBpcyB0byBqdXN0IGluY2x1ZGUgaXQgYXMgd2VsbCwgdG8gYmUgc2FmZS4gQnV0IHdhaXQsIGhvbGQgb24uIGBQSFlMSU5LYCBpcyBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb25hbGl0eSwgdXNlZCBieSBhICpsb3QqIG9mIGRyaXZlcnMuIEkgc2hvdWxkIHByb2JhYmx5IGRvdWJsZS1jaGVjayB0aGUgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBmaWxlIHRvIGJlIGNvbXBsZXRlbHkgY2VydGFpbiBhYm91dCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB1c2UgY2FzZXMgYmVmb3JlIEkgc3RhcnQgYWRkaW5nIGl0IHRvIGFueXRoaW5nLiBUaGlzIGRlbWFuZHMgYSBiaXQgbW9yZSBpbnZlc3RpZ2F0aW9uLiBJIG5lZWQgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgc2NvcGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQSFlMSU5LJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZy01LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6Njpjb25maWcgUEhZTElOS1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDE2OjQxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMyODEzCgkJCQkJCQlvdXRwdXQ6IDI1OAoJCQkJCQkJdGhvdWdodHM6IDEzNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgUjgxNjkgRHJpdmVyJiMzOTtzIFBoeWxpbmsgSW50ZWdyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gV2UmIzM5O3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludGVncmF0ZXMgdGhlIFI4MTY5IEV0aGVybmV0IGRyaXZlciB3aXRoIHRoZSBwaHlsaW5rIEFQSS4gVGhlIGRyaXZlciYjMzk7cyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciwgc28gdGhhdCBnaXZlcyB1cyBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplciBhcyBhIHN0YXJ0aW5nIHBvaW50LgoKRmlyc3QsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zOiB3ZSBoYXZlIGBSODE2OWAg4oCTIHRoYXQmIzM5O3MgYSBuby1icmFpbmVyLiAgQW5kIGBORVRfVkVORE9SX1JFQUxURUtgLCB0aG91Z2ggaXQmIzM5O3Mgc2V0IGFzIHRoZSBkZWZhdWx0LCB3ZSBzdGlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFjdGl2ZS4gV2UgZG9uJiMzOTt0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgb3RoZXIgdHJpc3RhdGVzIGFzIGBSODE2OWAgZG9lcyB0aGF0IGFscmVhZHkuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUganVpY3kgYml0cyDigJMgdGhlIGZvY3VzIHN5bWJvbHMsIHRoZSBmdW5jdGlvbnMgd2hlcmUgdGhpcyBwaHlsaW5rIGludGVncmF0aW9uIGlzIGhhcHBlbmluZy4gV2UmIzM5O3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfaW9jdGxgLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydGw4MTY5X253YXlfcmVzZXRgLCAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAuICBBbHNvLCBgcnRsX29wZW5gLCBgcnRsODE2OV9jbG9zZWAsIGBydGw4MTY5X3VwYCwgYHJ0bDgxNjlfZG93bmAsIGBydGxfaW5pdF9vbmVgLCBhbmQgYHJ0bDgxNjlfaW50ZXJydXB0YCBoYXZlIGJlZW4gbW9kaWZpZWQuCgpXaGlsZSB0aGUgbGlmZWN5Y2xlIGZ1bmN0aW9ucyBsaWtlIGBydGxfb3BlbmAgYXJlIGdvb2QgY2FuZGlkYXRlcywgdGhlIHN3ZWV0IHNwb3QgaXMgd2hlcmUgd2UgaGF2ZSBkaXJlY3QgdXNlci1zcGFjZSBpbnRlcmFjdGlvbjogYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgLiBUaGV5IGFyZSB0cmlnZ2VyZWQgYnkgZXRodG9vbCwgaW9jdGwsIG9yIG5ldGxpbmsuIFRoYXQgaXMgb3VyIHRhcmdldC4gIFRoZXNlIGRpcmVjdGx5IGV4ZXJjaXNlIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4KCkxldCYjMzk7cyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RyYXRlZ3kuICBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYWxscyBpbnRvIHRoZSBwaHlsaW5rIEFQSSBmdW5jdGlvbnM6CgoqICAgYHJ0bDgxNjlfY2hhbmdlX210dWAgY2FsbHMgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIOKAkyB3aGljaCBpcyAqbmV3Ki4KKiAgIGBydGw4MTY5X2lvY3RsYCBjYWxscyBgcGh5bGlua19taWlfaW9jdGxgLgoqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXRgLgoqICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCBjYWxscyBgcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXRgLgoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0YC4KKiAgIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCBpcyBhIG5ldywgZXhwb3J0ZWQgZnVuY3Rpb24gaW4gcGh5bGluayBpdHNlbGYuCiogICBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCB1c2VzIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAuCgpBbHNvIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAgaXMgYWxzbyB3b3J0aCBrZWVwaW5nIGluIG1pbmQuCgpOb3cgbGV0JiMzOTtzIHZlcmlmeSB0aGF0IG90aGVyIHBvdGVudGlhbCBjYW5kaWRhdGVzIGFyZSBub3QgZnJ1aXRmdWwuCgoqICAgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYDogIFRoZSBwYXRjaCByZW1vdmVzIFNGUC1yZWxhdGVkIGZ1bmN0aW9ucy4gTm8gbmV3IGp1aWN5IGJpdHMgdGhlcmUgZm9yIGZ1enppbmcuCiogICBgcjgxNjlfbWFpbi5jYDogV2Ugc2VlIGFkZGl0aW9ucyBsaWtlIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYHI4MTI3X3Nkc19tb2RpZnlgLCBgcjgxMjdfc2ZwX2luaXRfMWdgLCBgcjgxMjdfc2ZwX2luaXRfMTBnYC4gVGhlc2UgYXJlIGNhbGxlZCBmcm9tIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYC4gYHJ0bDgxNjlfcGNzX2NvbmZpZ2AgaXMgY2FsbGVkIGJ5IHBoeWxpbmssIHNvIHdlJiMzOTtsbCBpbmRpcmVjdGx5IGNvdmVyIHRoaXMgdmlhIG91ciBtYWluIGZvY3VzIHN5bWJvbHMuCgpPa2F5LCB0aGF0IG5haWxzIGl0IGRvd24uICBIZXJlJiMzOTtzIHRoZSBwbGFuOgoKKiAgIGBXb3J0aEZ1enppbmc6IHRydWVgCiogICBgRm9jdXNTeW1ib2xzYDoKICAgICogICBgcnRsODE2OV9jaGFuZ2VfbXR1YAogICAgKiAgIGBydGw4MTY5X2lvY3RsYAogICAgKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AKICAgICogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgCiAgICAqICAgCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMTY6NDE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDssCiAgICAmIzM0O05FVF9WRU5ET1JfUkVBTFRFSyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3BoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgbmV0ZGV2IGFuZCBldGh0b29sIGNhbGxiYWNrcyB0aGF0IHRyaWdnZXIgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7LAogICAgJiMzNDtORVRfVkVORE9SX1JFQUxURUsmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X253YXlfcmVzZXQmIzM0OywKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIHI4MTY5IEV0aGVybmV0IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgcGh5bGliIGRpcmVjdGx5LCBhZGRpbmcgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyAoODExNmFmLCA4MTI3X0FURikgYW5kIGludHJvZHVjaW5nIGEgbmV3IHBoeWxpbmsgY29yZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AuIFRoZSByODE2OSBkcml2ZXIgaXMgYSBzdGFuZGFyZCBQQ0kgbmV0d29yayBkcml2ZXIgdGhhdCBjYW4gYmUgZnV6emVkIHZpYSBzeXprYWxsZXImIzM5O3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjE1LjAzMzc1ODE1WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODgzMzM3NzgxMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIixcbiAgICBcIk5FVF9WRU5ET1JfUkVBTFRFS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSByODE2OSBFdGhlcm5ldCBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIHBoeWxpYiBkaXJlY3RseSwgYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBNQUMgdmVyc2lvbnMgKDgxMTZhZiwgODEyN19BVEYpIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBwaHlsaW5rIGNvcmUgZnVuY3Rpb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLiBUaGUgcjgxNjkgZHJpdmVyIGlzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTUuMDMzNzY0ODhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwOTI5NTE4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMTY6NDA6MTQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG5AQCAtODYsOCArODYsOCBAQCBjb25maWcgUjgxNjlcXG4gXFx0ZGVwZW5kcyBvbiBQQ0lcXG4gXFx0c2VsZWN0IEZXX0xPQURFUlxcbiBcXHRzZWxlY3QgQ1JDMzJcXG4tXFx0c2VsZWN0IFBIWUxJQlxcbiBcXHRzZWxlY3QgUkVBTFRFS19QSFlcXG4rXFx0c2VsZWN0IFBIWUxJTktcXG4gXFx0aGVscFxcbiBcXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXFxuIFxcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xcbmluZGV4IGVjNGZjMjFmYTIxZmIuLmRjMjA1YWMxMmNiMWMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xcbkBAIC0yNiwxMiArMjYsMTIgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFxcdTAwM2VcXG4tI2luY2x1ZGUgXFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJyODE2OS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicjgxNjlfZmlybXdhcmUuaFxcXCJcXG5AQCAtOTYsNiArOTYsMjYgQEBcXG4gI2RlZmluZSBKVU1CT185S1xcdCg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXFxuICNkZWZpbmUgSlVNQk9fMTZLXFx0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4gXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRFxcdFxcdDB4MjM0OFxcbisjZGVmaW5lIFI4MTI3X1NEU19BRERSXFx0XFx0MHgyMzRhXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfSU5cXHQweDIzNGNcXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcXHQweDIzNGVcXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUNcXHRCSVQoMClcXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX1dFXFx0QklUKDEpXFxuKyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1xcdDB4ZWIxMFxcbisjZGVmaW5lIE9DUF9TRFNfQ01EX1JFR1xcdFxcdDB4ZWIwZVxcbisjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcXHQweGViMTRcXG4rI2RlZmluZSBTRFNfQ01EX1JFQURcXHRcXHQweDAwMDFcXG4rI2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXFx0MHg0MFxcbisjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0VcXHQweDAwODBcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVFxcdFxcdDB4ZGMwMFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0tcXHQweDAwNzhcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcXHQweDAwMzBcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXFx0XFx0MHhkMDA2XFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXFx0MHgwMGZmXFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcXHQweDAwMDBcXG4rI2RlZmluZSBSVExfUE1fQ1RSTF9EM0hPVFxcdDB4MDNcXG4rXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XFxuIFxcdHUzMiBtYXNrO1xcbiBcXHR1MzIgdmFsO1xcbkBAIC0zMzQsMTEgKzM1NCwxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xcbiBcXHRBTERQU19MVFJcXHQ9IDB4ZTBhMixcXG4gXFx0TFRSX09CRkZfTE9DS1xcdD0gMHhlMDMyLFxcbiBcXHRMVFJfU05PT1BcXHQ9IDB4ZTAzNCxcXG4rXFx0U0VORF9MVFJfTVNHXFx0PSAweGUwMzgsXFxuIFxcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlxcdFxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cXHRcXHRCSVQoMClcXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlxcdFxcdEJJVCgxNClcXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cXHRcXHRcXHRHRU5NQVNLKDE1LCAxNClcXG4rI2RlZmluZSBMVFJfTVNHX0VOXFx0XFx0XFx0QklUKDApXFxuIH07XFxuIFxcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xcbkBAIC03MjgsNiArNzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSBydGxfc2ZwX21vZGUge1xcbitcXHRSVExfU0ZQX05PTkUsXFxuK1xcdFJUTF9TRlBfODE2OF9BRixcXG4rXFx0UlRMX1NGUF84MTI3X0FURixcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuQEAgLTczNiw2ICs3NjQsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XFxuIFxcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XFxuK1xcdGVudW0gcnRsX3NmcF9tb2RlIHNmcF9tb2RlO1xcbiBcXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG5AQCAtNzUwLDYgKzc3OSw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuIFxcdGludCBpcnE7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHNwZWVkO1xcbiBcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuQEAgLTc2Miw3ICs3OTIsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dW5zaWduZWQgc3VwcG9ydHNfZ21paToxO1xcbiBcXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcXG4gXFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XFxuLVxcdGJvb2wgc2ZwX21vZGU6MTtcXG4gXFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XFxuIFxcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcXG4gXFx0c3RydWN0IHJ0bDgxNjlfdGNfb2Zmc2V0cyB0Y19vZmZzZXQ7XFxuQEAgLTc3NCw2ICs4MDMsOSBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcXG4gXFxuIFxcdHUzMiBvY3BfYmFzZTtcXG4rXFx0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZztcXG4rXFx0c3RydWN0IHBoeWxpbmtfcGNzIHBjcztcXG4gfTtcXG4gXFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbkBAIC0xMTI4LDEwICsxMTYwLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXFxuIFxcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgXFx1MDAyNlxcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcXG4tXFx0XFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFxcdTAwMjYgMHhmZmZmO1xcbi1cXG4gXFx0UlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIFxcbiBcXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcXHUwMDI2cnRsX29jcF9ncGh5X2NvbmQsIDI1LCAxMCkgP1xcbkBAIC0xMTk5LDYgKzEyMjcsNzMgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX3Nkc19waHlfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xcbiB9XFxuIFxcbitERUNMQVJFX1JUTF9DT05EKHI4MTI3X3Nkc19jbWRfY29uZClcXG4re1xcbitcXHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgXFx1MDAyNiBSODEyN19TRFNfQ01EX0VYRUM7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcjgxMjdfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsIHUxNiByZWcpXFxuK3tcXG4rXFx0dTE2IGFkZHIgPSAoaW5kZXggXFx1MDAzY1xcdTAwM2MgMTEpIHwgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgNSkgfCByZWc7XFxuK1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyk7XFxuK1xcbitcXHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFxcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxcbitcXHRcXHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcXG4rXFx0XFx0XFx0ICAgdTE2IHJlZywgdTE2IHZhbClcXG4re1xcbitcXHR1MTYgYWRkciA9IChpbmRleCBcXHUwMDNjXFx1MDAzYyAxMSkgfCAocGFnZSBcXHUwMDNjXFx1MDAzYyA1KSB8IHJlZztcXG4rXFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19EQVRBX0lOLCB2YWwpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XFxuK1xcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xcbitcXG4rXFx0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcjgxMjdfc2RzX21vZGlmeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcXG4rXFx0XFx0XFx0ICAgICB1MTYgcmVnLCB1MTYgY2xlYXJtYXNrLCB1MTYgc2V0bWFzaylcXG4re1xcbitcXHRpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpO1xcbitcXG4rXFx0aWYgKHZhbCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHZhbCA9ICh2YWwgXFx1MDAyNiB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7XFxuK1xcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aW50IHZhbDtcXG4rXFxuK1xcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcXG4rXFxuK1xcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpO1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTtcXG4rXFxuK1xcdFJUTF9XMTYodHAsIDB4MjMzYSwgMHg4MDA0KTtcXG4rXFx0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcXHUwMDI2IH4weDMwMDMpIHwgMHgwMDAyKTtcXG4rXFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQwYSwgMHgwMDAwKTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDgsIDB4MDAwMCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwYSwgMHgwMDAwKTtcXG4rXFxuK1xcdHZhbCA9IHI4MTY4X3BoeV9vY3BfcmVhZCh0cCwgMHhjODA0KTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFxcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0aW50IHZhbDtcXG5AQCAtMTIxNywxMiArMTMxMiw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFxcdTAwMjYgfjB4MDAwZikgfCAweDAwMGMpO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLXtcXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbi1cXHRcXHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xcbi19XFxuLVxcbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG5AQCAtMTI4Myw2ICsxMzcyLDE1IEBAIHN0YXRpYyB2b2lkIG1hY19tY3Vfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcsIGludCB2YWx1ZSlcXG4gXFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXFx1MDAzZW9jcF9iYXNlICsgcmVnLCB2YWx1ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0cmV0dXJuIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9QS0dfREVURUNUKSBcXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XFxuK1xcdFxcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cXG4rXFx0XFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxcbiB7XFxuIFxcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVxcdTAwM2VvY3BfYmFzZSArIHJlZyk7XFxuQEAgLTE1NzgsNiArMTY3NiwyMCBAQCBzdGF0aWMgYm9vbCBydGxfZGFzaF9pc19lbmFibGVkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIH1cXG4gXFxuK3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4rXFx0XFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xcbitcXG4rXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4rXFx0XFx0XFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XFxuK1xcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcXG4rXFx0XFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIFJUTF9TRlBfTk9ORTtcXG4rfVxcbitcXG4gc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbkBAIC0xNjczLDE2ICsxNzg1LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0cnRsX3BjaV9jb21taXQodHApO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxcbiB7XFxuLVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cXHUwMDNlcGh5ZGV2O1xcbi1cXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XFxuIFxcdCAgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4tXFx0XFx0fSBlbHNlIGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMCkge1xcbitcXHRcXHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDFmKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE2OTIsNyArMTgwMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xcbiBcXHR9IGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XFxuIFxcdFxcdCAgIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0xNzAwLDcgKzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0yMDc0LDExICsyMTg0LDExIEBAIHJ0bF9jb2FsZXNjZV9pbmZvKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRjaSA9IHJ0bF9jb2FsZXNjZV9pbmZvXzgxNjhfODEzNjtcXG4gXFxuIFxcdC8qIGlmIHNwZWVkIGlzIHVua25vd24gYXNzdW1lIGhpZ2hlc3Qgb25lICovXFxuLVxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbitcXHRpZiAodHAtXFx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuIFxcdFxcdHJldHVybiBjaTtcXG4gXFxuIFxcdGZvciAoOyBjaS1cXHUwMDNlc3BlZWQ7IGNpKyspIHtcXG4tXFx0XFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkID09IGNpLVxcdTAwM2VzcGVlZClcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VzcGVlZCA9PSBjaS1cXHUwMDNlc3BlZWQpXFxuIFxcdFxcdFxcdHJldHVybiBjaTtcXG4gXFx0fVxcbiBcXG5AQCAtMjIzNiw3ICsyMzQ2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkO1xcbitcXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cXHUwMDNlc3BlZWQ7XFxuIFxcdHVuc2lnbmVkIGludCB0aW1lciA9IHRwLVxcdTAwM2V0eF9scGlfdGltZXI7XFxuIFxcbiBcXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuQEAgLTIyNTQsNyArMjM2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXFxuIFxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXFx1MDAzZXBoeWRldiwgZGF0YSk7XFxuK1xcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuQEAgLTIyNzAsNyArMjM4MCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXFxuIFxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEpO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjMwMSwxMyArMjQxMSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuLVxcdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xcbi1cXG4tXFx0cGh5X2dldF9wYXVzZSh0cC1cXHUwMDNlcGh5ZGV2LCBcXHUwMDI2dHhfcGF1c2UsIFxcdTAwMjZyeF9wYXVzZSk7XFxuIFxcbi1cXHRkYXRhLVxcdTAwM2VhdXRvbmVnID0gdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYXV0b25lZztcXG4tXFx0ZGF0YS1cXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xcbi1cXHRkYXRhLVxcdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XFxuK1xcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzE4LDkgKzI0MjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0aWYgKGRldi1cXHUwMDNlbXR1IFxcdTAwM2UgRVRIX0RBVEFfTEVOKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldiwgZGF0YS1cXHUwMDNlcnhfcGF1c2UsIGRhdGEtXFx1MDAzZXR4X3BhdXNlKTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzg2LDM0ICsyNDg5LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdGxlMzJfdG9fY3B1KHRwLVxcdTAwM2Vjb3VudGVycy1cXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuLVxcdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cXHUwMDNlcGh5ZGV2O1xcbi1cXHRpbnQgZHVwbGV4ID0gY21kLVxcdTAwM2ViYXNlLmR1cGxleDtcXG4tXFx0aW50IHNwZWVkID0gY21kLVxcdTAwM2ViYXNlLnNwZWVkO1xcbi1cXG4tXFx0aWYgKCF0cC1cXHUwMDNlc2ZwX21vZGUpXFxuLVxcdFxcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcXG4tXFxuLVxcdGlmIChjbWQtXFx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi1cXG4tXFx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG4rfVxcbiBcXG4tXFx0cGh5ZGV2LVxcdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gc3BlZWQ7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XFxuIFxcbi1cXHRydGxfc2ZwX2luaXQodHApO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuK31cXG4gXFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rc3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gfVxcbiBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbkBAIC0yNDMxLDEwICsyNTI3LDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG4gXFx0LmdldF9zc2V0X2NvdW50XFx0XFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxcbiBcXHQuZ2V0X2V0aHRvb2xfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXFxuIFxcdC5nZXRfdHNfaW5mb1xcdFxcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcXG4tXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsXFxuK1xcdC5ud2F5X3Jlc2V0XFx0XFx0PSBydGw4MTY5X253YXlfcmVzZXQsXFxuIFxcdC5nZXRfZWVlXFx0XFx0PSBydGw4MTY5X2dldF9lZWUsXFxuIFxcdC5zZXRfZWVlXFx0XFx0PSBydGw4MTY5X3NldF9lZWUsXFxuLVxcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHBoeV9ldGh0b29sX2dldF9saW5rX2tzZXR0aW5ncyxcXG4rXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5zZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuZ2V0X3JpbmdwYXJhbVxcdFxcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxcbiBcXHQuZ2V0X3BhdXNlX3N0YXRzXFx0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcXG5AQCAtMjQ5OSw5ICsyNTk1LDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHRwLVxcdTAwM2VvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7XFxuIFxcbiBcXHRcXHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cXG4tXFx0XFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVxcdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuLVxcdFxcdFxcdFxcdCAgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuLVxcdFxcdFxcdFxcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVxcdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICEodmFsIFxcdTAwMjYgQk1DUl9SRVNFVCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xcbiBcXHR9XFxuIH1cXG4gXFxuQEAgLTI1MzgsNiArMjYzNSw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuK1xcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXHRyODE2OV9od19waHlfY29uZmlnKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LCB0cC1cXHUwMDNlbWFjX3ZlcnNpb24pO1xcbiBcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XFxuQEAgLTI1NTIsOSArMjY1MSw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdCAgICB0cC1cXHUwMDNlcGNpX2Rldi1cXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXFxuIFxcdFxcdHBoeV93cml0ZV9wYWdlZCh0cC1cXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlKVxcbi1cXHRcXHRydGxfc2ZwX2luaXQodHApO1xcbi1cXG4gXFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xcbiBcXHRwaHlfc3BlZWRfdXAodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC0yNjU3LDE1ICsyNzUzLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdGlmIChwY2lfaXNfcGNpZSh0cC1cXHUwMDNlcGNpX2RldikgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuIFxcdFxcdHBjaWVfc2V0X3JlYWRycSh0cC1cXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcXG4tXFxuLVxcdC8qIENoaXAgZG9lc24ndCBzdXBwb3J0IHBhdXNlIGluIGp1bWJvIG1vZGUgKi9cXG4tXFx0aWYgKGp1bWJvKSB7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXFxuLVxcdFxcdFxcdFxcdCAgIHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWFkdmVydGlzaW5nKTtcXG4tXFx0XFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdHBoeV9zdGFydF9hbmVnKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHR9XFxuIH1cXG4gXFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcXG5AQCAtMjc4MCw3ICsyODY3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XFxuIFxcbiBcXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcXG4tXFx0XFx0cGh5X3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWRldiwgZmFsc2UpO1xcbitcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWxpbmssIGZhbHNlKTtcXG4gXFx0XFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjgzMiw2ICsyOTE5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cXHUwMDNlcGh5bGluaywgaWZyLCBjbWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcXG5AQCAtMzA5OCw4ICszMTk1LDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xcbiBcXHRcXHRSVExfVzgodHAsIENPTUJPX0xUUl9FWFRFTkQsIFJUTF9SOCh0cCwgQ09NQk9fTFRSX0VYVEVORCkgfCBDT01CT19MVFJfRVhURU5EX0VOKTtcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuQEAgLTMxMTksNiArMzIzMSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR9XFxuIFxcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xcbitcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgU0VORF9MVFJfTVNHLCAweDAwMDAsIExUUl9NU0dfRU4pO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcXG5AQCAtMzE1Miw2ICszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuIFxcdFxcdHJ0bF9lbmFibGVfbHRyKHRwKTtcXG4gXFx0XFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxcbitcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxcbiBcXHRcXHRcXHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cXG4gXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcXG5AQCAtMzE2NCw2ICszMjc4LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuQEAgLTM2NTcsNiArMzc3Miw0MSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuK3tcXG4rXFx0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVxcdTAwM2VkZXZmbik7XFxuK1xcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVxcdTAwM2VidXM7XFxuK1xcdGludCBmdW5jLCBwb3M7XFxuK1xcdHUxNiB2YWw7XFxuK1xcbitcXHRmb3IgKGZ1bmMgPSAyOyBmdW5jIFxcdTAwM2MgODsgZnVuYysrKSB7XFxuK1xcdFxcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcXG4rXFxuK1xcdFxcdHBvcyA9IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KGJ1cywgZGV2Zm4sIFBDSV9DQVBfSURfRVhQKTtcXG4rXFx0XFx0aWYgKHBvcykge1xcbitcXHRcXHRcXHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0XFx0XFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX1BNKTtcXG4rXFx0XFx0aWYgKHBvcykge1xcbitcXHRcXHRcXHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFxcdTAwMjZ2YWwpO1xcbitcXG4rXFx0XFx0XFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxcbitcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuK1xcdFxcdFxcdHZhbCBcXHUwMDI2PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSztcXG4rXFx0XFx0XFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcXG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuIFxcbi1cXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcXHUwMDI2IDB4M2ZmZjtcXG4tXFx0aWYgKHJnX3Nhd19jbnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHUxNiBzd19jbnRfMW1zX2luaTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpIHtcXG4rXFx0XFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuK1xcdFxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuIFxcbi1cXHRcXHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFxcdTAwMjYgMHgwZmZmO1xcbi1cXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcXG4rXFx0XFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4rXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xcbkBAIC00MTM5LDEyICs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXFx1MDAzZSBFVEhfREFUQV9MRU47XFxuIFxcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcXG4rXFxuK1xcdFxcdGlmICghanVtYm9fYWZ0ZXIpXFxuK1xcdFxcdFxcdGNhcHMgfD0gKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcbitcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MDk4LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxNDcsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXFxuIFxcdGJpdG1hcF96ZXJvKHRwLVxcdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcXG4gXFxuLVxcdHBoeV9zdG9wKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4gXFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbiBcXHRcXHRydGxfc2ZwX3Jlc2V0KHRwKTtcXG4gXFxuIFxcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcXG5AQCAtNTAzMiwxNCArNTE3MCwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XFxuIFxcbiBcXHRwY2lfc2V0X21hc3Rlcih0cC1cXHUwMDNlcGNpX2Rldik7XFxuLVxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xcbitcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4gXFx0ZW5hYmxlX3dvcmsoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrKTtcXG4gXFx0cnRsX3Jlc2V0X3dvcmsodHApO1xcbi1cXG4tXFx0cGh5X3N0YXJ0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTA0OSwxMyArNTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbitcXHRwaHlsaW5rX3N0b3AodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuIFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbiBcXG4gXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbiBcXG4tXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbiBcXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbkBAIC01MTEyLDExICs1MjQ5LDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuLVxcbitcXHRpZiAodHAtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XFxuK1xcdFxcdGlmIChyZXR2YWwpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbitcXHR9XFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbitcXHRwaHlsaW5rX3N0YXJ0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIG91dDpcXG5AQCAtNTIyMSw2ICs1MzYwLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIFxcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cXG4gXFx0cnRsX2luaXRfcnhjZmcodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC01Mjg4LDYgKzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXFx1MDAzZWxlZHMpO1xcbiBcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXFx1MDAzZWRldik7XFxuK1xcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG5AQCAtNTMxMCw3ICs1NDUzLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBydGxfc2V0X21hY19hZGRyZXNzLFxcbi1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXFxuK1xcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTY5X2lvY3RsLFxcbiBcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBydGxfc2V0X3J4X21vZGUsXFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiBcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gcnRsODE2OV9uZXRwb2xsLFxcbkBAIC01NDc0LDE2ICs1NjE3LDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyZXR1cm4gLUVVTkFUQ0g7XFxuIFxcdH1cXG4gXFxuLVxcdHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcXG4tXFx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxcbi1cXHRcXHRwaHlfc3VwcG9ydF9lZWUodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcbi1cXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuLVxcdFxcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVxcdTAwM2VwaHlkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcXG4tXFxuIFxcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cXG4gXFx0cGh5X3N1c3BlbmQodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC01NTk5LDYgKzU3MzIsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4rXFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XFxuK1xcbitcXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0aWYgKCF0cC1cXHUwMDNlcGNzLm9wcylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2dHAtXFx1MDAzZXBjcztcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XFxuK1xcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XFxuK1xcdFxcdHUxNiBzdGF0MTtcXG4rXFxuK1xcdFxcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xcbitcXG4rXFx0XFx0aWYgKCEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxcbitcXHRcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VsaW5rID0gISEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xcbitcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VsaW5rKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1MTYgYm1zciwgbHBhO1xcbitcXG4rXFx0XFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XFxuK1xcdFxcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcXG4rXFx0XFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcXG4rXFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIodHAtXFx1MDAzZWRldiwgXFxcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcXG4rXFx0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcXG4rXFx0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXFxuK1xcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcXG4rXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXFxuK1xcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFxuK1xcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXFxuK1xcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXFxuK1xcdCAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzI1MDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ181MDAwRkQ7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcXG4rXFxuK1xcdHJldHVybiBjYXBzO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xcbitcXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXFxuK1xcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcXG4rXFx0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2dHAtXFx1MDAzZWRldi1cXHUwMDNlZGV2O1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlc2ZwX21vZGUpIHtcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XFxuK1xcdFxcdHRwLVxcdTAwM2VwY3Mub3BzID0gXFx1MDAyNnI4MTY5X3Bjc19vcHM7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbitcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjIFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XFxuK1xcdFxcdFxcdFxcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcXG4rXFx0XFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVxcdTAwM2Vmd25vZGUsXFxuK1xcdFxcdFxcdCAgICBwaHlfbW9kZSwgXFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xcbitcXHRpZiAoSVNfRVJSKHBsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocGwpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmsgPSBwbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTY2Nyw2ICs2MDQxLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdFxcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XFxuIFxcdHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXFx1MDAzZW1hY192ZXJzaW9uO1xcbiBcXHR0cC1cXHUwMDNlZndfbmFtZSA9IGNoaXAtXFx1MDAzZWZ3X25hbWU7XFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuIFxcbiBcXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xcbiBcXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cXG5AQCAtNTY3OSwxMiArNjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR9XFxuIFxcdHRwLVxcdTAwM2Vhc3BtX21hbmFnZWFibGUgPSAhcmM7XFxuIFxcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuLVxcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGQwMDYpO1xcbi1cXG4tXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4tXFx0XFx0XFx0dHAtXFx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcXG4tXFx0fVxcbitcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG5AQCAtNTc4OCwxMyArNjE1OCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XFxuIFxcbi1cXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xcbitcXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XFxuK1xcdFxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0aWYgKHJjKVxcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgxNyw2ICs2MTk3LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggNTlkZmUzNWFmYTU0Zi4uMzRhMGU0ZjliM2RkZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xcbkBAIC0xODI4LDYgKzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4gXFxuKy8qKlxcbisgKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgaW5zdGFuY2VcXG4rICogQHBhdXNlX3N0YXRlOiBiaXRtYXNrIGluZGljYXRpbmcgdGhlIG5ldyBwYXVzZSBzdGF0ZVxcbisgKlxcbisgKiBVcGRhdGUgdGhlIE1BQyBwYXVzZSBmcmFtZSAoZmxvdyBjb250cm9sKSBzdGF0ZSBmb3IgdGhlIHBoeWxpbmsgaW5zdGFuY2UuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIGludCBwYXVzZV9zdGF0ZSlcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcXHUwMDI2cGwtXFx1MDAzZWxpbmtfY29uZmlnO1xcbitcXHRib29sIHR4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfVFgpO1xcbitcXHRib29sIHJ4X3BhdXNlID0gISEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfUlgpO1xcbitcXHRib29sIG1hbnVhbF9jaGFuZ2VkO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlZSB0aGUgY29tbWVudHMgZm9yIGxpbmttb2RlX3NldF9wYXVzZSgpLCB3cnQgdGhlIGRlZmljaWVuY2llc1xcbitcXHQgKiB3aXRoIHRoZSBjdXJyZW50IGltcGxlbWVudGF0aW9uLiAgQSBzb2x1dGlvbiB0byB0aGlzIGlzc3VlIHdvdWxkXFxuK1xcdCAqIGJlOlxcbitcXHQgKiBldGh0b29sICBMb2NhbCBkZXZpY2VcXG4rXFx0ICogIHJ4ICB0eCAgUGF1c2UgQXN5bURpclxcbitcXHQgKiAgMCAgIDAgICAwICAgICAwXFxuK1xcdCAqICAxICAgMCAgIDEgICAgIDFcXG4rXFx0ICogIDAgICAxICAgMCAgICAgMVxcbitcXHQgKiAgMSAgIDEgICAxICAgICAxXFxuK1xcdCAqIGFuZCB0aGVuIHVzZSB0aGUgZXRodG9vbCByeC90eCBlbmFibGVtZW50IHN0YXR1cyB0byBtYXNrIHRoZVxcbitcXHQgKiByeC90eCBwYXVzZSByZXNvbHV0aW9uLlxcbitcXHQgKi9cXG4rXFx0bGlua21vZGVfc2V0X3BhdXNlKGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLFxcbitcXHRcXHRcXHQgICByeF9wYXVzZSk7XFxuK1xcbitcXHRtYW51YWxfY2hhbmdlZCA9IChjb25maWctXFx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFxcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XFxuK1xcdFxcdFxcdCAoIShwYXVzZV9zdGF0ZSBcXHUwMDI2IE1MT19QQVVTRV9BTikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgKGNvbmZpZy1cXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXFx1MDAyNiBNTE9fUEFVU0VfVFhSWF9NQVNLKTtcXG4rXFxuK1xcdGNvbmZpZy1cXHUwMDNlcGF1c2UgPSBwYXVzZV9zdGF0ZTtcXG4rXFxuK1xcdC8qIFVwZGF0ZSBvdXIgaW4tYmFuZCBhZHZlcnRpc2VtZW50LCB0cmlnZ2VyaW5nIGEgcmVuZWdvdGlhdGlvbiBpZlxcbitcXHQgKiB0aGUgYWR2ZXJ0aXNlbWVudCBjaGFuZ2VkLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFwbC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcXG4rXFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4rXFxuK1xcdC8qIElmIHdlIGhhdmUgYSBQSFksIGEgY2hhbmdlIG9mIHRoZSBwYXVzZSBmcmFtZSBhZHZlcnRpc2VtZW50IHdpbGxcXG4rXFx0ICogY2F1c2UgcGh5bGliIHRvIHJlbmVnb3RpYXRlIChpZiBBTiBpcyBlbmFibGVkKSB3aGljaCB3aWxsIGluIHR1cm5cXG4rXFx0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XFxuK1xcdCAqIHdlIGNhbid0IGhvbGQgb3VyIHN0YXRlIG11dGV4IHdoaWxlIGNhbGxpbmcgcGh5X3NldF9hc3ltX3BhdXNlKCkuXFxuK1xcdCAqL1xcbitcXHRpZiAocGwtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0cGh5X3NldF9hc3ltX3BhdXNlKHBsLVxcdTAwM2VwaHlkZXYsIHJ4X3BhdXNlLCB0eF9wYXVzZSk7XFxuK1xcbitcXHQvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGFcXG4rXFx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXFxuK1xcdCAqIGxpbmsgd2lsbCBjeWNsZS5cXG4rXFx0ICovXFxuK1xcdGlmIChtYW51YWxfY2hhbmdlZCkge1xcbitcXHRcXHRwbC1cXHUwMDNlbGlua19mYWlsZWQgPSB0cnVlO1xcbitcXHRcXHRwaHlsaW5rX3J1bl9yZXNvbHZlKHBsKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKipcXG4rICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4rICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXFxuKyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlO1xcbitcXHRpbnQgcGF1c2Vfc3RhdGU7XFxuK1xcbitcXHRBU1NFUlRfUlROTCgpO1xcbitcXG4rXFx0aWYgKG1hY19wYXVzZSBcXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xcbitcXHRcXHRwaHlsaW5rX2VycihwbCwgXFxcIkF0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcXFxcblxcXCIpO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdG9sZF9wYXVzZSA9IHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgXFx1MDAyNiAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcXG4rXFx0aWYgKG9sZF9wYXVzZSA9PSBtYWNfcGF1c2UpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRwbC1cXHUwMDNlY29uZmlnLVxcdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFxcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcXG4rXFx0cGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBtYWNfcGF1c2U7XFxuK1xcbitcXHRwaHlsaW5rX3NldChwbC1cXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSk7XFxuK1xcdHBoeWxpbmtfc2V0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpO1xcbitcXG4rXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdGxpbmttb2RlX2FuZChwbC1cXHUwMDNlc3VwcG9ydGVkLCBwbC1cXHUwMDNlc3VwcG9ydGVkLCBwbC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRlbHNlIGlmIChwbC1cXHUwMDNlc2ZwX2J1cylcXG4rXFx0XFx0bGlua21vZGVfYW5kKHBsLVxcdTAwM2VzdXBwb3J0ZWQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQsIHBsLVxcdTAwM2VzZnBfc3VwcG9ydCk7XFxuK1xcbitcXHRwaHlsaW5rX3ZhbGlkYXRlKHBsLCBwbC1cXHUwMDNlc3VwcG9ydGVkLCBjb25maWcpO1xcbitcXG4rXFx0cGF1c2Vfc3RhdGUgPSBjb25maWctXFx1MDAzZXBhdXNlO1xcbitcXG4rXFx0aWYgKCFwaHlsaW5rX3Rlc3QocGwtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKSB7XFxuK1xcdFxcdHBhdXNlX3N0YXRlIFxcdTAwMjY9IH4oTUxPX1BBVVNFX1JYIHwgTUxPX1BBVVNFX1RYKTtcXG4rXFx0fSBlbHNlIGlmICghcGh5bGlua190ZXN0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKSB7XFxuK1xcdFxcdGlmICgocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKHBhdXNlX3N0YXRlIFxcdTAwMjYgTUxPX1BBVVNFX1RYKSlcXG4rXFx0XFx0XFx0cGF1c2Vfc3RhdGUgXFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xcbitcXG4gLyoqXFxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXFxuICAqIEBjb25maWc6IGEgcG9pbnRlciB0byB0aGUgdGFyZ2V0IFxcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcXG5AQCAtMzE5MCw4ICszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcXG4gaW50IHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxcbiB7XFxuLVxcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuLVxcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XFxuIFxcdGludCBwYXVzZV9zdGF0ZTtcXG4gXFxuIFxcdEFTU0VSVF9SVE5MKCk7XFxuQEAgLTMyMTUsNTQgKzMzMzMsNyBAQCBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcXG4gXFx0aWYgKHBhdXNlLVxcdTAwM2V0eF9wYXVzZSlcXG4gXFx0XFx0cGF1c2Vfc3RhdGUgfD0gTUxPX1BBVVNFX1RYO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXN0YXRlX211dGV4KTtcXG4tXFx0LypcXG4tXFx0ICogU2VlIHRoZSBjb21tZW50cyBmb3IgbGlua21vZGVfc2V0X3BhdXNlKCksIHdydCB0aGUgZGVmaWNpZW5jaWVzXFxuLVxcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcXG4tXFx0ICogYmU6XFxuLVxcdCAqIGV0aHRvb2wgIExvY2FsIGRldmljZVxcbi1cXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXFxuLVxcdCAqICAwICAgMCAgIDAgICAgIDBcXG4tXFx0ICogIDEgICAwICAgMSAgICAgMVxcbi1cXHQgKiAgMCAgIDEgICAwICAgICAxXFxuLVxcdCAqICAxICAgMSAgIDEgICAgIDFcXG4tXFx0ICogYW5kIHRoZW4gdXNlIHRoZSBldGh0b29sIHJ4L3R4IGVuYWJsZW1lbnQgc3RhdHVzIHRvIG1hc2sgdGhlXFxuLVxcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXFxuLVxcdCAqL1xcbi1cXHRsaW5rbW9kZV9zZXRfcGF1c2UoY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgcGF1c2UtXFx1MDAzZXR4X3BhdXNlLFxcbi1cXHRcXHRcXHQgICBwYXVzZS1cXHUwMDNlcnhfcGF1c2UpO1xcbi1cXG4tXFx0bWFudWFsX2NoYW5nZWQgPSAoY29uZmlnLVxcdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcXHUwMDI2IE1MT19QQVVTRV9BTiB8fFxcbi1cXHRcXHRcXHQgKCEocGF1c2Vfc3RhdGUgXFx1MDAyNiBNTE9fUEFVU0VfQU4pIFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdFxcdCAgIChjb25maWctXFx1MDAzZXBhdXNlIF4gcGF1c2Vfc3RhdGUpIFxcdTAwMjYgTUxPX1BBVVNFX1RYUlhfTUFTSyk7XFxuLVxcbi1cXHRjb25maWctXFx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XFxuLVxcbi1cXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcXG4tXFx0ICogdGhlIGFkdmVydGlzZW1lbnQgY2hhbmdlZC5cXG4tXFx0ICovXFxuLVxcdGlmICghcGwtXFx1MDAzZXBoeWRldilcXG4tXFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuLVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuLVxcbi1cXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXFxuLVxcdCAqIGNhdXNlIHBoeWxpYiB0byByZW5lZ290aWF0ZSAoaWYgQU4gaXMgZW5hYmxlZCkgd2hpY2ggd2lsbCBpbiB0dXJuXFxuLVxcdCAqIGNhbGwgb3VyIHBoeWxpbmtfcGh5X2NoYW5nZSgpIGFuZCB0cmlnZ2VyIGEgcmVzb2x2ZS4gIE5vdGUgdGhhdFxcbi1cXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxcbi1cXHQgKi9cXG4tXFx0aWYgKHBsLVxcdTAwM2VwaHlkZXYpXFxuLVxcdFxcdHBoeV9zZXRfYXN5bV9wYXVzZShwbC1cXHUwMDNlcGh5ZGV2LCBwYXVzZS1cXHUwMDNlcnhfcGF1c2UsXFxuLVxcdFxcdFxcdFxcdCAgIHBhdXNlLVxcdTAwM2V0eF9wYXVzZSk7XFxuLVxcbi1cXHQvKiBJZiB0aGUgbWFudWFsIHBhdXNlIHNldHRpbmdzIGNoYW5nZWQsIG1ha2Ugc3VyZSB3ZSB0cmlnZ2VyIGFcXG4tXFx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXFxuLVxcdCAqIGxpbmsgd2lsbCBjeWNsZS5cXG4tXFx0ICovXFxuLVxcdGlmIChtYW51YWxfY2hhbmdlZCkge1xcbi1cXHRcXHRwbC1cXHUwMDNlbGlua19mYWlsZWQgPSB0cnVlO1xcbi1cXHRcXHRwaHlsaW5rX3J1bl9yZXNvbHZlKHBsKTtcXG4tXFx0fVxcbitcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbmluZGV4IGI2NWQwZjVmYTFhMDEuLjQ3MjFiYTA3MWNiYmUgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicmVhbHRlay5oXFxcIlxcbkBAIC0yNjQ2LDQ1ICsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLXtcXG4tXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwMGJhc2VUX0Z1bGxfQklULFxcbi1cXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbi1cXG4tXFx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBvcnQgPSBQT1JUX0ZJQlJFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdGludCB2YWwsIGVycjtcXG4tXFxuLVxcdGVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpO1xcbi1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHZhbDtcXG4tXFxuLVxcdHJ0bGdlbl9kZWNvZGVfcGh5c3IocGh5ZGV2LCB2YWwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxcbkBAIC0yOTM0LDIwICsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQud3JpdGVfcGFnZVxcdD0gcnRsODIxeF93cml0ZV9wYWdlLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXFxuIFxcdFxcdC53cml0ZV9tbWRcXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxcbi1cXHR9LCB7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUmVhbHRlayBTRlAgUEhZIE1vZGVcXFwiLFxcbi1cXHRcXHQuZmxhZ3NcXHRcXHQ9IFBIWV9JU19JTlRFUk5BTCxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSBydGw4MjJ4X3Byb2JlLFxcbi1cXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gcnRsZ2VuX3Jlc3VtZSxcXG4tXFx0XFx0LnJlYWRfcGFnZVxcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5yZWFkX21tZFxcdD0gcnRsODIyeF9yZWFkX21tZCxcXG4tXFx0XFx0LndyaXRlX21tZFxcdD0gcnRsODIyeF93cml0ZV9tbWQsXFxuIFxcdH0sIHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLFxcbiBcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlJUTDgyMjQgMi41R2JwcyBQSFlcXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuQEAgLTg0Miw0ICs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcXG4gXFxuIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcXG4gXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTtcXG4rXFxuICNlbmRpZlxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaCBiL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMFxcbi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFxuKysrIC9kZXYvbnVsbFxcbkBAIC0xLDcgKzAsMCBAQFxcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xcbi0jaWZuZGVmIF9SRUFMVEVLX1BIWV9IXFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcXG4tXFxuLSNkZWZpbmVcXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFxcdDB4MDAxY2NiZmZcXG4tXFxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDoxNS41NDM2MTk5NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjg3ODIzOTA3NDE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCIsXG4gICAgXCJORVRfVkVORE9SX1JFQUxURUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBuZXRkZXYgYW5kIGV0aHRvb2wgY2FsbGJhY2tzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IHBoeWxpbmsgaW50ZWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGM2YWZmNWIxYTJhZjU0MGFmZjAwNmFhOGYyMDU0ZmY4YTVkNmMyZTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAxNjo0MDoxNCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYS4uNTgxOGE5YTUwMGE4NiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5AQCAtODYsOCArODYsOCBAQCBjb25maWcgUjgxNjlcbiBcdGRlcGVuZHMgb24gUENJXG4gXHRzZWxlY3QgRldfTE9BREVSXG4gXHRzZWxlY3QgQ1JDMzJcbi1cdHNlbGVjdCBQSFlMSUJcbiBcdHNlbGVjdCBSRUFMVEVLX1BIWVxuK1x0c2VsZWN0IFBIWUxJTktcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cbiBcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiLi5kYzIwNWFjMTJjYjFjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjYsMTIgKzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9waHlsaW5rLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wcmVmZXRjaC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaXB2Ni5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdW5hbGlnbmVkLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X2NoZWNrc3VtLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZGV2X3F1ZXVlcy5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCJyODE2OS5oXCJcbiAjaW5jbHVkZSBcInI4MTY5X2Zpcm13YXJlLmhcIlxuQEAgLTk2LDYgKzk2LDI2IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbisjZGVmaW5lIFI4MTI3X1NEU19DTURcdFx0MHgyMzQ4XG4rI2RlZmluZSBSODEyN19TRFNfQUREUlx0XHQweDIzNGFcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX09VVFx0MHgyMzRlXG4rI2RlZmluZSBSODEyN19TRFNfQ01EX0VYRUNcdEJJVCgwKVxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4rI2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXHQweGViMTBcbisjZGVmaW5lIE9DUF9TRFNfQ01EX1JFR1x0XHQweGViMGVcbisjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuKyNkZWZpbmUgU0RTX0NNRF9SRUFEXHRcdDB4MDAwMVxuKyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRVx0MHg0MFxuKyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVFx0XHQweGRjMDBcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUX01BU0tcdDB4MDA3OFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURcdFx0MHhkMDA2XG4rI2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0tcdDB4MDBmZlxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuKyNkZWZpbmUgUlRMX1BNX0NUUkxfRDNIT1RcdDB4MDNcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSArMzU0LDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuK1x0U0VORF9MVFJfTVNHXHQ9IDB4ZTAzOCxcbiBcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlx0XHRCSVQoMClcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXHRcdEJJVCgxNClcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlx0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiArNzUwLDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcbitcdFJUTF9TRlBfTk9ORSxcbitcdFJUTF9TRlBfODE2OF9BRixcbitcdFJUTF9TRlBfODEyN19BVEYsXG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiArNzY0LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuK1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICs3NzksNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgc3BlZWQ7XG4gXG4gXHRzdHJ1Y3Qge1xuIFx0XHRERUNMQVJFX0JJVE1BUChmbGFncywgUlRMX0ZMQUdfTUFYKTtcbkBAIC03NjIsNyArNzkyLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiArODAzLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCArMTE2MCw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuIFx0aWYgKHJ0bF9vY3BfcmVnX2ZhaWx1cmUocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBSZXR1cm4gZHVtbXkgTUlJX1BIWVNJRDIgaW4gU0ZQIG1vZGUgdG8gbWF0Y2ggU0ZQIFBIWSBkcml2ZXIgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSBcdTAwMjZcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICsxMjI3LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuK0RFQ0xBUkVfUlRMX0NPTkQocjgxMjdfc2RzX2NtZF9jb25kKVxuK3tcbitcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbitcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuK1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4re1xuK1x0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcbitcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbitcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbitcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xuK1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuK1xuK1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuK1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuK1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuK1xuK1x0dmFsID0gcjgxNjhfcGh5X29jcF9yZWFkKHRwLCAweGM4MDQpO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpbnQgdmFsO1xuQEAgLTEyMTcsMTIgKzEzMTIsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiArMTM3MiwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFx1MDAyNlx1MDAyNlxuK1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4rXHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cbitcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxuIHtcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVx1MDAzZW9jcF9iYXNlICsgcmVnKTtcbkBAIC0xNTc4LDYgKzE2NzYsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XG4rXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbitcdFx0XHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcbitcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbitcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbitcdH1cbitcbitcdHJldHVybiBSVExfU0ZQX05PTkU7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgKzE3ODUsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4rXHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICsxODAyLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcbiBcdFx0ICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgKzE4MTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMjA3NCwxMSArMjE4NCwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuK1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2krKykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuK1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyArMjM0Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkO1xuK1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICsyMzY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcwLDcgKzIzODAsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyArMjQxMSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XG4tXG4tXHRwaHlfZ2V0X3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgXHUwMDI2dHhfcGF1c2UsIFx1MDAyNnJ4X3BhdXNlKTtcbiBcbi1cdGRhdGEtXHUwMDNlYXV0b25lZyA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhdXRvbmVnO1xuLVx0ZGF0YS1cdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XG4tXHRkYXRhLVx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcbitcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICsyNDIzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzODYsMzQgKzI0ODksMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdGludCBkdXBsZXggPSBjbWQtXHUwMDNlYmFzZS5kdXBsZXg7XG4tXHRpbnQgc3BlZWQgPSBjbWQtXHUwMDNlYmFzZS5zcGVlZDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcbi1cbi1cdGlmIChjbWQtXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRydGxfc2ZwX2luaXQodHApO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4rfVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG5AQCAtMjQzMSwxMCArMjUyNywxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbkBAIC0yNDk5LDkgKzI1OTUsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiArMjYzNSw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICsyNjUxLDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdCAgICB0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxuIFx0XHRwaHlfd3JpdGVfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XG4gXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJ0bF9zZnBfaW5pdCh0cCk7XG4tXG4gXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXG4gXHRwaHlfc3BlZWRfdXAodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC0yNjU3LDE1ICsyNzUzLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgKzI4NjcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI5MTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE5NSwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiArMzIzMSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIFx0LyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xuK1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICszMjY1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4rXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XG4gXHRcdFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXG4gXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcbkBAIC0zMTY0LDYgKzMyNzgsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICszNzcyLDQxIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZXBfMyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbitcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbitcdGludCBmdW5jLCBwb3M7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYysrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuK1x0XHRpZiAocG9zKSB7XG4rXHRcdFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuK1xuK1x0XHRcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4rXHRcdH1cbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4rXHRcdGlmIChwb3MpIHtcbitcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4rXG4rXHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4rXHRcdFx0dmFsIHw9IChSVExfUE1fQ1RSTF9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9TVEFUVVMpO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIHZhbCk7XG4rXHRcdH1cbitcdH1cbit9XG4rXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICszODQzLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIFx0cnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTtcbiBcbi1cdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbi1cdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4tXHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbitcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuK1x0XHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuK1x0XHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbiBcbi1cdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuLVx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbitcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4rXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcbkBAIC00MTM5LDEyICs0MjkxLDIzIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXHUwMDNlbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4rXHRib29sIGp1bWJvX2FmdGVyID0gbmV3X210dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuIFxuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuIFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcbiBcbitcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbitcdFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcbitcbitcdFx0aWYgKCFqdW1ib19hZnRlcilcbitcdFx0XHRjYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1xuK1x0XHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVx1MDAzZXBoeWxpbmssIGNhcHMpO1xuK1x0fVxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4NjksOCArNTAzMiwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpXG4tXHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4rXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKSB7XG4rXHRcdGlmICh0cC1cdTAwM2VwaHlkZXYpXG4rXHRcdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4rXHRcdFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVx1MDAzZXBoeWxpbmssXG4rXHRcdFx0XHRcdCAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSBcdTAwMjYgTGlua1N0YXR1cykpO1xuK1x0fVxuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5AQCAtNDkzMCw5ICs1MDk4LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiB7XG4tXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdC8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqL1xuQEAgLTQ5NjMsNDAgKzUxMjgsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0fVxuIH1cbiBcbi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpXG4te1xuLVx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuLVxuLVx0aWYgKG5ldGlmX2NhcnJpZXJfb2sobmRldikpIHtcbi1cdFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwKTtcbi1cdFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VlbmFibGVfdHhfbHBpKTtcbi1cdFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4tXHR9IGVsc2Uge1xuLVx0XHRwbV9ydW50aW1lX2lkbGUoZCk7XG4tXHR9XG4tXG4tXHRwaHlfcHJpbnRfc3RhdHVzKHRwLVx1MDAzZXBoeWRldik7XG4tfVxuLVxuIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiBcdGludCByZXQ7XG4gXG4tXHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4tXHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4tXG4tXHRyZXQgPSBwaHlfY29ubmVjdF9kaXJlY3QodHAtXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcbi1cdFx0XHRcdCBwaHlfbW9kZSk7XG4tXHRpZiAocmV0KVxuK1x0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rLCB0cC1cdTAwM2VwaHlkZXYpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gY29ubmVjdCBwaHlcXG5cIik7XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4tXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi1cbi1cdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG4rXHR9XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtNTAwNywxMCArNTE0Nyw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4tXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4gXHRcdHJ0bF9zZnBfcmVzZXQodHApO1xuIFxuIFx0cnRsODE2OV91cGRhdGVfY291bnRlcnModHApO1xuQEAgLTUwMzIsMTQgKzUxNzAsMTIgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbitcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4tXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5AQCAtNTA0OSwxMyArNTE4NSwxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuK1x0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0bmV0aWZfc3RvcF9xdWV1ZShkZXYpO1xuIFx0cnRsODE2OV9kb3duKHRwKTtcbiBcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xuIFxuIFx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4gXG4tXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiwxMSArNTI0OSwxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbi1cbitcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuK1x0XHRpZiAocmV0dmFsKVxuK1x0XHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuK1x0fVxuIFx0cnRsODE2OV91cCh0cCk7XG4rXHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIG91dDpcbkBAIC01MjIxLDYgKzUzNjAsOSBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldmljZSlcbiBcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cbiBcdHJ0bF9pbml0X3J4Y2ZnKHRwKTtcbiBcbitcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbitcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4rXG4gXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xuIH1cbiBcbkBAIC01Mjg4LDYgKzU0MzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXHUwMDNlbGVkcyk7XG4gXG4gXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cdTAwM2VkZXYpO1xuK1x0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgKzU0NTMsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuK1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQ3NCwxNiArNTYxNyw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICs1NzMyLDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuK1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4rXG4rXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0aWYgKCF0cC1cdTAwM2VwY3Mub3BzKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4rXHRcdHJldHVybiBcdTAwMjZ0cC1cdTAwM2VwY3M7XG4rXG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbit9XG4rXG4rc3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTE2IHZhbCA9IDA7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4rXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHR1MTYgc3RhdDE7XG4rXG4rXHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xuK1xuK1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbitcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuK1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4rXHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xuK1x0XHRlbHNlXG4rXHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbitcbitcdFx0c3RhdGUtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4rXHR9IGVsc2Uge1xuK1x0XHR1MTYgYm1zciwgbHBhO1xuK1xuK1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSArIE1JSV9CTVNSKTtcbitcdFx0bHBhID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSArIE1JSV9MUEEpO1xuK1x0XHRwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuK1x0XHRcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxuK1x0XHRcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHRzd2l0Y2ggKGludGVyZmFjZSkge1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjpcbitcdFx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XG4rXHRcdFx0cjgxMjdfc2ZwX2luaXRfMWcodHApO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXG5cIixcbitcdFx0XHRcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbitcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXHRcdH1cbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4rXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbit7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xuK31cbitcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XG4rXHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4rXHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxuK1x0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXG4rXHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4rXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcbitcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcbit9O1xuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4rXG4rXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuK1xuK1x0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnNcbitcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXG4rXHQgKi9cbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4rXHRcdGNhcHMgfD0gTUFDXzI1MDBGRDtcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbitcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuK1x0XHRjYXBzIHw9IE1BQ18xMDAwMEZEO1xuK1xuK1x0cmV0dXJuIGNhcHM7XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XG4rXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXG4rXHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbitcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxuK1x0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcbit9O1xuK1xuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4rXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4rXG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcdTAwMjZ0cC1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xuK1xuK1x0c3dpdGNoICh0cC1cdTAwM2VzZnBfbW9kZSkge1xuK1x0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XG4rXHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuK1x0XHRicmVhaztcbitcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcbitcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4rXHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdF9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRcdGJyZWFrO1xuK1x0ZGVmYXVsdDpcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XG4rXHRcdGVsc2VcbitcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbitcdFx0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbitcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdGlmICh0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzKVxuK1x0XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9pbnRlcmZhY2VzKTtcbitcbitcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuK1x0XHRcdCAgICBwaHlfbW9kZSwgXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XG4rXHRpZiAoSVNfRVJSKHBsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiArNjA0MSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcbiBcdHRwLVx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cdTAwM2VtYWNfdmVyc2lvbjtcbiBcdHRwLVx1MDAzZWZ3X25hbWUgPSBjaGlwLVx1MDAzZWZ3X25hbWU7XG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiArNjA1NCw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbitcdHRwLVx1MDAzZXNmcF9tb2RlID0gcnRsX2dldF9zZnBfbW9kZSh0cCk7XG4gXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbkBAIC01Nzg4LDEzICs2MTU4LDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XG4rXHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4rXHRpZiAocmMpIHtcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDYgKzYxOTcsOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuK1x0aWYgKHJ0bF9pc184MTE2YWYodHApKVxuK1x0XHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cdTAwM2VwY2lfZGV2KTtcbitcbiBcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggNTlkZmUzNWFmYTU0Zi4uMzRhMGU0ZjliM2RkZSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xODI4LDYgKzE4MjgsMTI2IEBAIGludCBwaHlsaW5rX3NldF9maXhlZF9saW5rKHN0cnVjdCBwaHlsaW5rICpwbCxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zZXRfZml4ZWRfbGluayk7XG4gXG4rLyoqXG4rICogcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoKSAtIFVwZGF0ZSB0aGUgcGh5bGluayBwYXVzZSBmcmFtZSBjb25maWd1cmF0aW9uXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayBpbnN0YW5jZVxuKyAqIEBwYXVzZV9zdGF0ZTogYml0bWFzayBpbmRpY2F0aW5nIHRoZSBuZXcgcGF1c2Ugc3RhdGVcbisgKlxuKyAqIFVwZGF0ZSB0aGUgTUFDIHBhdXNlIGZyYW1lIChmbG93IGNvbnRyb2wpIHN0YXRlIGZvciB0aGUgcGh5bGluayBpbnN0YW5jZS5cbisgKi9cbitzdGF0aWMgdm9pZCBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShzdHJ1Y3QgcGh5bGluayAqcGwsIGludCBwYXVzZV9zdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbitcdGJvb2wgdHhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX1RYKTtcbitcdGJvb2wgcnhfcGF1c2UgPSAhIShwYXVzZV9zdGF0ZSBcdTAwMjYgTUxPX1BBVVNFX1JYKTtcbitcdGJvb2wgbWFudWFsX2NoYW5nZWQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdC8qXG4rXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBsaW5rbW9kZV9zZXRfcGF1c2UoKSwgd3J0IHRoZSBkZWZpY2llbmNpZXNcbitcdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbitcdCAqIGJlOlxuK1x0ICogZXRodG9vbCAgTG9jYWwgZGV2aWNlXG4rXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4rXHQgKiAgMCAgIDAgICAwICAgICAwXG4rXHQgKiAgMSAgIDAgICAxICAgICAxXG4rXHQgKiAgMCAgIDEgICAwICAgICAxXG4rXHQgKiAgMSAgIDEgICAxICAgICAxXG4rXHQgKiBhbmQgdGhlbiB1c2UgdGhlIGV0aHRvb2wgcngvdHggZW5hYmxlbWVudCBzdGF0dXMgdG8gbWFzayB0aGVcbitcdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4rXHQgKi9cbitcdGxpbmttb2RlX3NldF9wYXVzZShjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHR4X3BhdXNlLFxuK1x0XHRcdCAgIHJ4X3BhdXNlKTtcbitcbitcdG1hbnVhbF9jaGFuZ2VkID0gKGNvbmZpZy1cdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XG4rXHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgIChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9UWFJYX01BU0spO1xuK1xuK1x0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4rXG4rXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcbitcdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4rXHQgKi9cbitcdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuK1x0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbitcbitcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4rXG4rXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXG4rXHQgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVyblxuK1x0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4rXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxuK1x0ICovXG4rXHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuK1x0XHRwaHlfc2V0X2FzeW1fcGF1c2UocGwtXHUwMDNlcGh5ZGV2LCByeF9wYXVzZSwgdHhfcGF1c2UpO1xuK1xuK1x0LyogSWYgdGhlIG1hbnVhbCBwYXVzZSBzZXR0aW5ncyBjaGFuZ2VkLCBtYWtlIHN1cmUgd2UgdHJpZ2dlciBhXG4rXHQgKiByZXNvbHZlIHRvIHVwZGF0ZSB0aGVpciBzdGF0ZTsgd2UgY2FuIG5vdCBndWFyYW50ZWUgdGhhdCB0aGVcbitcdCAqIGxpbmsgd2lsbCBjeWNsZS5cbitcdCAqL1xuK1x0aWYgKG1hbnVhbF9jaGFuZ2VkKSB7XG4rXHRcdHBsLVx1MDAzZWxpbmtfZmFpbGVkID0gdHJ1ZTtcbitcdFx0cGh5bGlua19ydW5fcmVzb2x2ZShwbCk7XG4rXHR9XG4rfVxuK1xuKy8qKlxuKyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFx1MDAyNnN0cnVjdCBwaHlsaW5rIHJldHVybmVkIGZyb20gcGh5bGlua19jcmVhdGUoKVxuKyAqIEBtYWNfcGF1c2U6IHRoZSBuZXcgTUFDIHBhdXNlIGNhcGFiaWxpdGllcyBtYXNrXG4rICpcbisgKiBUaGlzIGZ1bmN0aW9uIGFsbG93cyBhIE1BQyBkcml2ZXIgdG8gZHluYW1pY2FsbHkgY2hhbmdlIGl0cyBwYXVzZSBzdGF0ZSxcbisgKiBzdWNoIGFzIGxvc2luZy9nYWluaW5nIFBhdXNlIGZyYW1lIHN1cHBvcnQgYmFzZWQgb24gTVRVIHNpemUuXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbisgKi9cbit2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSlcbit7XG4rXHRzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpjb25maWcgPSBcdTAwMjZwbC1cdTAwM2VsaW5rX2NvbmZpZztcbitcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlO1xuK1x0aW50IHBhdXNlX3N0YXRlO1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuK1x0XHRwaHlsaW5rX2VycihwbCwgXCJBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbGRfcGF1c2UgPSBwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjYgKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XG4rXHRpZiAob2xkX3BhdXNlID09IG1hY19wYXVzZSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4rXG4rXHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbitcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTtcbitcbitcdHBoeWxpbmtfc2V0KHBsLVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpO1xuK1x0cGh5bGlua19zZXQocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKTtcbitcbitcdGlmIChwbC1cdTAwM2VwaHlkZXYpXG4rXHRcdGxpbmttb2RlX2FuZChwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXN1cHBvcnRlZCwgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4rXHRlbHNlIGlmIChwbC1cdTAwM2VzZnBfYnVzKVxuK1x0XHRsaW5rbW9kZV9hbmQocGwtXHUwMDNlc3VwcG9ydGVkLCBwbC1cdTAwM2VzdXBwb3J0ZWQsIHBsLVx1MDAzZXNmcF9zdXBwb3J0KTtcbitcbitcdHBoeWxpbmtfdmFsaWRhdGUocGwsIHBsLVx1MDAzZXN1cHBvcnRlZCwgY29uZmlnKTtcbitcbitcdHBhdXNlX3N0YXRlID0gY29uZmlnLVx1MDAzZXBhdXNlO1xuK1xuK1x0aWYgKCFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSkpIHtcbitcdFx0cGF1c2Vfc3RhdGUgXHUwMDI2PSB+KE1MT19QQVVTRV9SWCB8IE1MT19QQVVTRV9UWCk7XG4rXHR9IGVsc2UgaWYgKCFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlc3VwcG9ydGVkLCBBc3ltX1BhdXNlKSkge1xuK1x0XHRpZiAoKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxuK1x0XHRcdHBhdXNlX3N0YXRlIFx1MDAyNj0gfihNTE9fUEFVU0VfUlggfCBNTE9fUEFVU0VfVFgpO1xuK1x0fVxuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlKHBsLCBwYXVzZV9zdGF0ZSk7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xuK1xuIC8qKlxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXG4gICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXG5AQCAtMzE5MCw4ICszMzEwLDYgQEAgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKTtcbiBpbnQgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHN0cnVjdCBwaHlsaW5rICpwbCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKnBhdXNlKVxuIHtcbi1cdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFx1MDAyNnBsLVx1MDAzZWxpbmtfY29uZmlnO1xuLVx0Ym9vbCBtYW51YWxfY2hhbmdlZDtcbiBcdGludCBwYXVzZV9zdGF0ZTtcbiBcbiBcdEFTU0VSVF9SVE5MKCk7XG5AQCAtMzIxNSw1NCArMzMzMyw3IEBAIGludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxuIFx0aWYgKHBhdXNlLVx1MDAzZXR4X3BhdXNlKVxuIFx0XHRwYXVzZV9zdGF0ZSB8PSBNTE9fUEFVU0VfVFg7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbi1cdC8qXG4tXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGZvciBsaW5rbW9kZV9zZXRfcGF1c2UoKSwgd3J0IHRoZSBkZWZpY2llbmNpZXNcbi1cdCAqIHdpdGggdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24uICBBIHNvbHV0aW9uIHRvIHRoaXMgaXNzdWUgd291bGRcbi1cdCAqIGJlOlxuLVx0ICogZXRodG9vbCAgTG9jYWwgZGV2aWNlXG4tXHQgKiAgcnggIHR4ICBQYXVzZSBBc3ltRGlyXG4tXHQgKiAgMCAgIDAgICAwICAgICAwXG4tXHQgKiAgMSAgIDAgICAxICAgICAxXG4tXHQgKiAgMCAgIDEgICAwICAgICAxXG4tXHQgKiAgMSAgIDEgICAxICAgICAxXG4tXHQgKiBhbmQgdGhlbiB1c2UgdGhlIGV0aHRvb2wgcngvdHggZW5hYmxlbWVudCBzdGF0dXMgdG8gbWFzayB0aGVcbi1cdCAqIHJ4L3R4IHBhdXNlIHJlc29sdXRpb24uXG4tXHQgKi9cbi1cdGxpbmttb2RlX3NldF9wYXVzZShjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlLVx1MDAzZXR4X3BhdXNlLFxuLVx0XHRcdCAgIHBhdXNlLVx1MDAzZXJ4X3BhdXNlKTtcbi1cbi1cdG1hbnVhbF9jaGFuZ2VkID0gKGNvbmZpZy1cdTAwM2VwYXVzZSBeIHBhdXNlX3N0YXRlKSBcdTAwMjYgTUxPX1BBVVNFX0FOIHx8XG4tXHRcdFx0ICghKHBhdXNlX3N0YXRlIFx1MDAyNiBNTE9fUEFVU0VfQU4pIFx1MDAyNlx1MDAyNlxuLVx0XHRcdCAgIChjb25maWctXHUwMDNlcGF1c2UgXiBwYXVzZV9zdGF0ZSkgXHUwMDI2IE1MT19QQVVTRV9UWFJYX01BU0spO1xuLVxuLVx0Y29uZmlnLVx1MDAzZXBhdXNlID0gcGF1c2Vfc3RhdGU7XG4tXG4tXHQvKiBVcGRhdGUgb3VyIGluLWJhbmQgYWR2ZXJ0aXNlbWVudCwgdHJpZ2dlcmluZyBhIHJlbmVnb3RpYXRpb24gaWZcbi1cdCAqIHRoZSBhZHZlcnRpc2VtZW50IGNoYW5nZWQuXG4tXHQgKi9cbi1cdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuLVx0XHRwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTtcbi1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4tXG4tXHQvKiBJZiB3ZSBoYXZlIGEgUEhZLCBhIGNoYW5nZSBvZiB0aGUgcGF1c2UgZnJhbWUgYWR2ZXJ0aXNlbWVudCB3aWxsXG4tXHQgKiBjYXVzZSBwaHlsaWIgdG8gcmVuZWdvdGlhdGUgKGlmIEFOIGlzIGVuYWJsZWQpIHdoaWNoIHdpbGwgaW4gdHVyblxuLVx0ICogY2FsbCBvdXIgcGh5bGlua19waHlfY2hhbmdlKCkgYW5kIHRyaWdnZXIgYSByZXNvbHZlLiAgTm90ZSB0aGF0XG4tXHQgKiB3ZSBjYW4ndCBob2xkIG91ciBzdGF0ZSBtdXRleCB3aGlsZSBjYWxsaW5nIHBoeV9zZXRfYXN5bV9wYXVzZSgpLlxuLVx0ICovXG4tXHRpZiAocGwtXHUwMDNlcGh5ZGV2KVxuLVx0XHRwaHlfc2V0X2FzeW1fcGF1c2UocGwtXHUwMDNlcGh5ZGV2LCBwYXVzZS1cdTAwM2VyeF9wYXVzZSxcbi1cdFx0XHRcdCAgIHBhdXNlLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdC8qIElmIHRoZSBtYW51YWwgcGF1c2Ugc2V0dGluZ3MgY2hhbmdlZCwgbWFrZSBzdXJlIHdlIHRyaWdnZXIgYVxuLVx0ICogcmVzb2x2ZSB0byB1cGRhdGUgdGhlaXIgc3RhdGU7IHdlIGNhbiBub3QgZ3VhcmFudGVlIHRoYXQgdGhlXG4tXHQgKiBsaW5rIHdpbGwgY3ljbGUuXG4tXHQgKi9cbi1cdGlmIChtYW51YWxfY2hhbmdlZCkge1xuLVx0XHRwbC1cdTAwM2VsaW5rX2ZhaWxlZCA9IHRydWU7XG4tXHRcdHBoeWxpbmtfcnVuX3Jlc29sdmUocGwpO1xuLVx0fVxuK1x0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcbiBcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxLi40NzIxYmEwNzFjYmJlIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyArMTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL3BoeWxpYi5oXCJcbiAjaW5jbHVkZSBcInJlYWx0ZWsuaFwiXG5AQCAtMjY0Niw0NSArMjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgKzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCJSZWFsdGVrIFNGUCBQSFkgTW9kZVwiLFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCJSVEw4MjI0IDIuNUdicHMgUEhZXCIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuaW5kZXggMmJjMGRiM2Q1MmFjOC4uZTNjNzgyMjEwMGFiYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuQEAgLTg0Miw0ICs4NDIsNiBAQCB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfYmVnaW4oc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbiB2b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpO1xuK1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZDY4M2JjMWIwNjU5Yy4uMDAwMDAwMDAwMDAwMFxuLS0tIGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbisrKyAvZGV2L251bGxcbkBAIC0xLDcgKzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6MTUuNTQzNjQ5OTI5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjcwNTY0NDk3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGZWFzaWJpbGl0eSBBbmFseXNpcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIFwiQ2FuIHdlIGZ1enogdGhlc2UgY2hhbmdlcz9cIiBJdCBsb29rcyBsaWtlIHdlJ3ZlIGdvdCBtb2RpZmljYXRpb25zIHRvIGByODE2OV9tYWluLmNgLCBgcGh5bGluay5jYCwgYW5kIGEgZmV3IHJlbGF0ZWQgaW5jbHVkZSBmaWxlcy4gVGhlIGRyaXZlcidzIGJlaW5nIGNvbnZlcnRlZCB0byB1c2UgcGh5bGluaywgc3VwcG9ydCBmb3IgbmV3IE1BQyB2ZXJzaW9ucyBpcyBhZGRlZCwgYW5kIHRoZXJlJ3MgYSBuZXcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBNeSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6IFwiQ2FuIHN5emthbGxlciBnZXQgdG8gaXQ/XCJcblxuVGhlIGByODE2OWAgZHJpdmVyIGlzIGZvciBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXJzLiBRRU1VIGVtdWxhdGVzIHRoZSBvbGRlciBgcnRsODEzOWAsIG5vdCBgcjgxNjlgLCBzbyB0aGF0J3MgYSBkZWFkIGVuZCBmb3IgZGlyZWN0IFFFTVUgZW11bGF0aW9uLiBCdXQsIHdhaXQuLi4gZG9lcyB0aGF0ICpyZWFsbHkqIG1hdHRlcj8gU3l6a2FsbGVyIGhhcyB0aGlzIFBDSSBmdXp6ZXIsIHJpZ2h0PyBJdCBjYW4gZnV6eiAqYW55KiBQQ0kgZHJpdmVyIGJlY2F1c2UgaXQgY3JlYXRlcyB2aXJ0dWFsIFBDSSBkZXZpY2VzIHZpYSBgc3l6X3BjaV9zZXR1cGAuIEl0IGRvZXNuJ3QgbmVlZCB0aGUgc3BlY2lmaWMgZGV2aWNlIHRvIGJlIGVtdWxhdGVkIGJ5IHRoZSBWTS4gVGhhdCdzIGtleS4gU3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gcG9rZSBhdCBgcjgxNjlfbWFpbi5jYCBubyBwcm9ibGVtLCBJIHRoaW5rLlxuXG5UaGUgcGF0Y2ggYWxzbyB0b3VjaGVzIGBwaHlsaW5rLmNgLCB3aGljaCBpcyBjb3JlIFBIWSBsaW5rIGNvZGUuIFRoZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgZnVuY3Rpb24gaXMgYWRkZWQgYW5kIGV4cG9ydGVkLiBQaHlsaW5rIGlzIHVzZWQgYnkgbG90cyBvZiBuZXR3b3JrIGRyaXZlcnMuIFRoZSBmdW5jdGlvbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAgc28gdGhpcyBpcyByZWFjaGFibGUuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIHRoaXMgcGF0Y2ggZmFsbHMgaW50byB0aGUgXCJub3Qgd29ydGggZnV6emluZ1wiIGNhdGVnb3J5LiBUaGUgcHJvbXB0IHNheXMgd2Ugc2hvdWxkIHNraXAgY29kZSB0aGF0IGlzIFwiaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZVwiLiBJdCBhbHNvIHNheXMgd2Ugc2hvdWxkIHNraXAgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGxpa2UgU21hcnROSUMgb3IgR1BVIGRyaXZlcnMgdGhhdCByZXF1aXJlIHBoeXNpY2FsIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBJcyBgcjgxNjlgIGEgdmVuZG9yLXNwZWNpZmljIFNtYXJ0TklDIG9yIHN3aXRjaD8gTm8sIGl0J3MganVzdCBhIHJlZ3VsYXIgRXRoZXJuZXQgTklDLlxuXG5TeXprYWxsZXIncyBQQ0kgZnV6emVyIGNhbiBkZWZpbml0ZWx5IGZ1enogdGhpcyBpZiB0aGUgUENJIGRyaXZlciBjYW4gYmUgZm91bmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgYHI4MTY5YCBpcyBpbiBzeXprYWxsZXIncyBrZXJuZWwgY29uZmlnLCBzbyBsZXQgbWUgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIGZpbGUuIFl1cCwgdGhlcmUgaXMgYW4gYFI4MTY5YCB0aGF0IGlzIGRlcGVuZGVudCBvbiBgUENJYC4gQW5kLCB0aGVyZSBhcmUgYHJ0bDgxNjlfcGNpX3RibGAgc28gd2UgaGF2ZSBzcGVjaWZpYyBQQ0kgSURzLiBFeGNlbGxlbnQhXG5cbk9rYXksIHNvIGlzIHBoeWxpbmsgcmVhY2hhYmxlPyBJdCBpcyBiZWNhdXNlIHRoZSBmdW5jdGlvbnMgYHBoeWxpbmsuY2AgYXJlIGNvcmUgbmV0d29ya2luZyBjb2RlIHVzZWQgYnkgUEhZcy4gVGhpcyBjYW4gYmUgcmVhY2hhYmxlIGJ5IGFueSBlbXVsYXRlZCBkZXZpY2UgdGhhdCB1c2VzIGBwaHlsaW5rYCwgYW5kIHRoZXJlIGFyZSBzb21lLlxuXG5TbywgbGV0J3MgbG9vayBhdCB0aGUgYWN0dWFsIGNoYW5nZXMgaW4gYHI4MTY5X21haW4uY2AuIEl0IGxvb2tzIGxpa2UgdGhlcmUgYXJlIG5ldyBmdW5jdGlvbnMgYmVpbmcgYWRkZWQgdGhhdCBjb25maWd1cmUgdGhlIE1BQyAoaW5jbHVkaW5nIG9uZSB0aGF0IGRpc2FibGVzIFRYIExQSSBhbmQgZW5hYmxlcyBpdCksIGFuZCBleGlzdGluZyBmdW5jdGlvbnMgYXJlIGJlaW5nIG1vZGlmaWVkIChsaWtlIGBydGw4MTY5X2NoYW5nZV9tdHVgIGFuZCBgcnRsODE2OV9pb2N0bGApIHNvIHRob3NlIG5lZWQgdG8gYmUgY2hlY2tlZC4gU2luY2UgdGhlIGNoYW5nZXMgaGVyZSBhZGQgbmV3IGNvZGUgYW5kIG1vZGlmeSBleGlzdGluZyBjb2RlLCBhbmQgc2luY2Ugc3l6a2FsbGVyJ3MgUENJIGZ1enplciBjYW4gKmRlZmluaXRlbHkqIGJlIHVzZWQgdG8gdGVzdCB0aGUgY2hhbmdlcyB3aXRoaW4gYHI4MTY5YCwgSSdtIGdvaW5nIHRvIHNheSB0aGlzIGlzIGFic29sdXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgdGhpbmtpbmcgaXMgdGhhdCBldmVuIGlmIHRoZSBRRU1VIGRvZXNuJ3QgZW11bGF0ZSB0aGUgc3BlY2lmaWMgZGV2aWNlIHRoZSBzeXprYWxsZXIgUENJIGZ1enplciBzaW11bGF0ZXMgdGhlIFBDSSBkZXZpY2UgYW5kIHRoZW4gcmVhZHMgYW5kIHdyaXRlcyB0aGUgTU1JTy9QSU8uXG5cbmByODE2OWAgaXMgYSBzdGFuZGFyZCBQQ0kgZHJpdmVyLCBhbmQgc3l6a2FsbGVyIGhhcyBhIFBDSSBmdXp6ZXIuIFRoaXMgc2hvdWxkIGJlIGdvb2QuIEFsc28sIGBwaHlsaW5rLmNgIGlzIGJlaW5nIG1vZGlmaWVkLCBzbyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBpZiBhbiBlbXVsYXRlZCBkcml2ZXIgdXNlcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIwODAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDA6NDIuNjAwMTAyMzIxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNTY1ODEwMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwaHlsaW5rX2NyZWF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9jYWRlbmNlL21hY2JfbWFpbi5jPTEwMjM9c3RhdGljIGludCBtYWNiX21paV9wcm9iZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvY2FkZW5jZS9tYWNiX21haW4uYy0xMDg1LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmM6MTA4NjpcXHRicC1cXHUwMDNlcGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZicC1cXHUwMDNlcGh5bGlua19jb25maWcsIGJwLVxcdTAwM2VwZGV2LVxcdTAwM2VkZXYuZndub2RlLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2NhZGVuY2UvbWFjYl9tYWluLmMtMTA4Ny1cXHRcXHRcXHRcXHQgICAgIGJwLVxcdTAwM2VwaHlfaW50ZXJmYWNlLCBcXHUwMDI2bWFjYl9waHlsaW5rX29wcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjQyLjkxNTc2NjM4MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwNjg0MzUxMzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgTGluZSBvZiBJbnF1aXJ5OiBQSFkgTGlua3MgYW5kIFJlbGV2YW50IENvbnRyb2xsZXJzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyBuZXR3b3JrIGNvbnRyb2xsZXJzIGFyZSBpbXBsZW1lbnRlZCBpbiB0aGlzIGVtYmVkZGVkIHN5c3RlbXMgY29udGV4dCwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgUEhZIGxheWVyIGludGVyYWN0aW9ucy4gSSdtIHByZXR0eSBjZXJ0YWluIHRoYXQgdGhlIGBtYWNiYCBkcml2ZXIgdXRpbGl6ZXMgYHBoeWxpbmtgLCB0aGF0IG11Y2ggSSBrbm93LiBOb3csIEknbSB0cnlpbmcgdG8gbWFrZSBhIGNvbm5lY3Rpb24gcmVnYXJkaW5nIGBmZWNgLCB0aGUgRnJlZXNjYWxlIEZhc3QgRXRoZXJuZXQgQ29udHJvbGxlciwgYmVjYXVzZSBJIHJlbWVtYmVyIGl0J3MgZW11bGF0ZWQgYnkgUUVNVSB3aGVuIHJ1bm5pbmcgaS5NWCBib2FyZCBpbWFnZXMuIFRoZSBxdWVzdGlvbiB0aGF0IGhhcyBwb3BwZWQgaW50byBteSBoZWFkIGlzLCBkb2VzIGBmZWNgLCB3aGVuIGVtdWxhdGVkLCBhbHNvIHJlbHkgb24gYHBoeWxpbmtgPyBJIG5lZWQgdG8gY2xhcmlmeSBpZiB0aGVyZSBpcyBhIGNvbnNpc3RlbnQgYXBwcm9hY2ggYWNyb3NzIHRoZXNlIGltcGxlbWVudGF0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU0MjQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ni45ODQyMDU0OTdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxMTkzNTQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfY3JlYXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYz0yMDE9c3RhdGljIGludCBkcGFhX25ldGRldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRfZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEvZHBhYV9ldGguYy0yNzQtXFx0bWFjX2Rldi1cXHUwMDNldXBkYXRlX3NwZWVkID0gZHBhYV9ldGhfY2dyX3NldF9zcGVlZDtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYS9kcGFhX2V0aC5jOjI3NTpcXHRtYWNfZGV2LVxcdTAwM2VwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNm1hY19kZXYtXFx1MDAzZXBoeWxpbmtfY29uZmlnLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9kcGFhL2RwYWFfZXRoLmMtMjc2LVxcdFxcdFxcdFxcdFxcdCAgZGV2X2Z3bm9kZShtYWNfZGV2LVxcdTAwM2VkZXYpLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jPTU2MD1pbnQgZHBhYTJfbWFjX2Nvbm5lY3Qoc3RydWN0IGRwYWEyX21hYyAqbWFjKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2RwYWEyL2RwYWEyLW1hYy5jLTYyNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmM6NjI1OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2bWFjLVxcdTAwM2VwaHlsaW5rX2NvbmZpZyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZHBhYTIvZHBhYTItbWFjLmMtNjI2LVxcdFxcdFxcdFxcdCBkcG1hY19ub2RlLCBtYWMtXFx1MDAzZWlmX21vZGUsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM9OTMxPXN0YXRpYyBpbnQgZW5ldGM0X2xpbmtfaW5pdChzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk0OS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTUwOlxcdGVyciA9IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHByaXYsIG5vZGUsIFxcdTAwMjZlbmV0Y19wbF9tYWNfb3BzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUxLVxcdGlmIChlcnIpIHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTUyLVxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBwaHlsaW5rXFxcXG5cXFwiKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTUzOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0YzRfcGYuYy05NTQtXFx0fVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjNF9wZi5jLTk1Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmM6OTU4OmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGM0X3BmLmMtOTU5LVxcdGVuZXRjX21kaW9idXNfZGVzdHJveShwZik7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYz03OTU9c3RhdGljIGludCBlbmV0Y19wZl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg3Ny1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYzo4Nzg6XFx0ZXJyID0gZW5ldGNfcGh5bGlua19jcmVhdGUocHJpdiwgbm9kZSwgXFx1MDAyNmVuZXRjX21hY19waHlsaW5rX29wcyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmMtODc5LVxcdGlmIChlcnIpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODgwOlxcdFxcdGdvdG8gZXJyX3BoeWxpbmtfY3JlYXRlO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg4MS1cXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZi5jLTg4OS1cXHRlbmV0Y19waHlsaW5rX2Rlc3Ryb3kocHJpdik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmLmM6ODkwOmVycl9waHlsaW5rX2NyZWF0ZTpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGYuYy04OTEtXFx0ZW5ldGNfbWRpb2J1c19kZXN0cm95KHBmKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYz00MTk9RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfbWRpb2J1c19kZXN0cm95KTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDIwLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0MjE6aW50IGVuZXRjX3BoeWxpbmtfY3JlYXRlKHN0cnVjdCBlbmV0Y19uZGV2X3ByaXYgKnByaXYsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDIyLVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYxLVxcdHBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzID0gbWFjX2NhcHM7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5jOjQ2MjpcXHRwaHlsaW5rID0gcGh5bGlua19jcmVhdGUoXFx1MDAyNnBmLVxcdTAwM2VwaHlsaW5rX2NvbmZpZywgb2ZfZndub2RlX2hhbmRsZShub2RlKSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmMtNDYzLVxcdFxcdFxcdFxcdCBwZi1cXHUwMDNlaWZfbW9kZSwgb3BzKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NzItfVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYzo0NzM6RVhQT1JUX1NZTUJPTF9HUEwoZW5ldGNfcGh5bGlua19jcmVhdGUpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9lbmV0Yy9lbmV0Y19wZl9jb21tb24uYy00NzQtXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZW5ldGMvZW5ldGNfcGZfY29tbW9uLmg9MTI9dm9pZCBlbmV0Y19tZGlvYnVzX2Rlc3Ryb3koc3RydWN0IGVuZXRjX3BmICpwZik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oOjEzOmludCBlbmV0Y19waHlsaW5rX2NyZWF0ZShzdHJ1Y3QgZW5ldGNfbmRldl9wcml2ICpwcml2LCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2VuZXRjL2VuZXRjX3BmX2NvbW1vbi5oLTE0LVxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzICpvcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL2ZzX2VuZXQvZnNfZW5ldC1tYWluLmM9ODUzPXN0YXRpYyBpbnQgZnNfZW5ldF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpvZmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2ZyZWVzY2FsZS9mc19lbmV0L2ZzX2VuZXQtbWFpbi5jLTkzMi1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYzo5MzM6XFx0cGh5bGluayA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZmZXAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKGZlcC1cXHUwMDNlZGV2KSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvZnNfZW5ldC9mc19lbmV0LW1haW4uYy05MzQtXFx0XFx0XFx0XFx0IHBoeV9tb2RlLCBcXHUwMDI2ZnNfZW5ldF9waHlsaW5rX21hY19vcHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmM9MzQxOT1zdGF0aWMgaW50IHVjY19nZXRoX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UqIG9mZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9mcmVlc2NhbGUvdWNjX2dldGguYzozNTc0OlxcdHBoeWxpbmsgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dWdldGgtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCBkZXZfZndub2RlKFxcdTAwMjZkZXYtXFx1MDAzZWRldiksXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvZnJlZXNjYWxlL3VjY19nZXRoLmMtMzU3NS1cXHRcXHRcXHRcXHQgcGh5X2ludGVyZmFjZSwgXFx1MDAyNnVnZXRoX21hY19vcHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo0Ny4yNjU0MDY3NTFaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjIxOTQzNzE2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIGByODE2OWAgRHJpdmVyOiBBIFF1aWNrIEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBzbyBgcGh5bGlua2AgaXMgYSBkZXBlbmRlbmN5LCBhbmQgdGhpcyBwYXRjaCB0b3VjaGVzIGByODE2OV9tYWluLmNgIGRpcmVjdGx5LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBgcjgxNjlgIGlzIGEgd29ydGh3aGlsZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0J3MgYSBzdGFuZGFyZCBOSUMgZHJpdmVyLCBhbmQgdGhvc2UgYXJlIGFsd2F5cyBpbnRlcmVzdGluZyBhdHRhY2sgc3VyZmFjZXMuIE5vdywgbGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cy4gV2UgZGVmaW5pdGVseSBuZWVkIGBDT05GSUdfUjgxNjlgLCBvZiBjb3Vyc2UuIEFuZCwgdGhlIGZhY3QgdGhhdCBgUjgxNjlgIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCBtZWFucyB0aGF0J3MgYXV0b21hdGljYWxseSBpbmNsdWRlZCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBUbyBiZSBhYnNvbHV0ZWx5IHN1cmUsIEknbGwgcXVpY2tseSBnbGFuY2UgYXQgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ2AgdG8gY29uZmlybSBhbnkgb3RoZXIgZGVwZW5kZW5jaWVzIG9yIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI3NTY0LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjUxLjQ4NzM1MzEyNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2MjIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA4MDpcXHRcXHQgIFJYLXJlc2V0IG1ldGhvZCBzaG91bGQgYmUgYWRlcXVhdGUgZm9yIGFsbCBib2FyZHMuICBCdXQgaWYgeW91XFxuICA4MTpcXHRcXHQgIGV4cGVyaWVuY2UgcHJvYmxlbXMsIHlvdSBjYW4gZW5hYmxlIHRoaXMgb3B0aW9uIHRvIHJlc3RvcmUgdGhlXFxuICA4MjpcXHRcXHQgIG9sZCBSWC1yZXNldCBiZWhhdmlvci4gIElmIHVuc3VyZSwgc2F5IE4uXFxuICA4MzpcXHRcXG4gIDg0OlxcdGNvbmZpZyBSODE2OVxcbiAgODU6XFx0XFx0dHJpc3RhdGUgXFxcIlJlYWx0ZWsgODE2OS84MTY4LzgxMDEvODEyNSBldGhlcm5ldCBzdXBwb3J0XFxcIlxcbiAgODY6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDg3OlxcdFxcdHNlbGVjdCBGV19MT0FERVJcXG4gIDg4OlxcdFxcdHNlbGVjdCBDUkMzMlxcbiAgODk6XFx0XFx0c2VsZWN0IFJFQUxURUtfUEhZXFxuICA5MDpcXHRcXHRzZWxlY3QgUEhZTElOS1xcbiAgOTE6XFx0XFx0aGVscFxcbiAgOTI6XFx0XFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xcbiAgOTM6XFx0XFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbiAgOTQ6XFx0XFx0ICBSVEw4MTY5IEdpZ2FiaXQgRXRoZXJuZXRcXG4gIDk1OlxcdFxcdCAgUlRMODE2OCBHaWdhYml0IEV0aGVybmV0XFxuICA5NjpcXHRcXHQgIFJUTDgxMDEgRmFzdCBFdGhlcm5ldFxcbiAgOTc6XFx0XFx0ICBSVEw4MTI1IDIuNUdCaXQgRXRoZXJuZXRcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjUxLjQ4NzQ0MTQxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc4NTQwNzk1MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IFJlYWx0ZWsgRHJpdmVyIHdpdGggUGh5bGluayBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgUmVhbHRlayBkcml2ZXIgcGF0Y2gsIHNwZWNpZmljYWxseSB0aGUgb25lIHJlbGF0ZWQgdG8gYENPTkZJR19SODE2OWAuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgY29uZmlnIG9wdGlvbi4gTm93LCBgQ09ORklHX1JFQUxURUtfUEhZYCBpcyBpbnRlcmVzdGluZywgaXQncyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyBhIGRlcGVuZGVuY3kuIE9mIGNvdXJzZSwgYENPTkZJR19QQ0lgIGlzIGEgYmFzZSBkZXBlbmRlbmN5IGFzIHdlbGwuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGZ1bmN0aW9ucyBhcmUgbW9zdCBsaWtlbHkgdG8geWllbGQgaW50ZXJlc3RpbmcgZnV6emluZyByZXN1bHRzLlxuXG5UaGUga2V5IGNoYW5nZSBpcyB0aGUgaW50ZWdyYXRpb24gd2l0aCBgcGh5bGlua2AsIGluZGljYXRlZCBieSB0aGUgcGF0Y2ggbW9kaWZ5aW5nIGByODE2OV9tYWluLmNgLiBMZXQncyBzZWUuLi4gYSBidW5jaCBvZiBmdW5jdGlvbnMgYXJlIGFkZGVkIG9yIG1vZGlmaWVkOiBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX3ZhbGlkYXRlYCwgYHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnRgLCBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX2luaXRfcGh5bGlua2AsIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X253YXlfcmVzZXRgLCBhbmQgdGhlbiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaW4gYHBoeWxpbmsuY2AuXG5cbk9rYXksIHNvIEknbSBnb2luZyB0byBjaGVjayB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLiBJdCdzIGluIGBwaHlsaW5rLmNgLCBzbyBpdCBtaWdodCBiZSBleHBvcnRlZC4gWWVwLCBgRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyk7YC4gVGhhdCdzIGdvb2QuIEFuZCBpdCdzIGNhbGxlZCBmcm9tIGBydGw4MTY5X2NoYW5nZV9tdHVgLiBTaW5jZSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgYW4gaW50ZXJlc3RpbmcgZnVuY3Rpb24sIEkgc2hvdWxkIGZvY3VzIGZ1enppbmcgZWZmb3J0cyBvbiBgcnRsODE2OV9jaGFuZ2VfbXR1YCB0b28uXG5cbkFsc28sIHNpbmNlIGBydGw4MTY5X2lvY3RsYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYW5kIGBydGw4MTY5X253YXlfcmVzZXRgIGFyZSBleHBvc2VkIGFzIGV0aHRvb2wgYW5kIG5ldGRldiBvcHMsIEkga25vdyB0aGV5IGFyZSByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBpb2N0bCBvciBuZXRsaW5rLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB3b3J0aCBhIGNsb3NlciBsb29rIGFzIHdlbGwuIFRoZXNlIGxvb2sgbGlrZSBnb29kIHN0YXJ0aW5nIHBvaW50cyBmb3IgZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyMTMsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MjUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MDo1OS4zNDE1MjMwNDRaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMzg4OTM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI1Nj1zdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNDI5MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo0MjkxOnN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQyOTIte1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NTQ0ND1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1MS1cXHQubmRvX3ZhbGlkYXRlX2FkZHJcXHQ9IGV0aF92YWxpZGF0ZV9hZGRyLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU0NTI6XFx0Lm5kb19jaGFuZ2VfbXR1XFx0XFx0PSBydGw4MTY5X2NoYW5nZV9tdHUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTQ1My1cXHQubmRvX2ZpeF9mZWF0dXJlc1xcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQwOjU5LjQ1NTQxNzQzN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTE2MDg2MjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBSZWFsdGVrIDgxNjkgRHJpdmVyIEludGVyZmFjZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEknbSBjb25maXJtaW5nIHRoZSBjYWxsYmFjayBtYXBwaW5ncy4gYHJ0bDgxNjlfY2hhbmdlX210dWAgY29ycmVzcG9uZHMgdG8gdGhlIGBuZG9fY2hhbmdlX210dWAgY2FsbGJhY2ssIHN0cmFpZ2h0Zm9yd2FyZC4gYHJ0bDgxNjlfaW9jdGxgIGlzIGhhbmRsaW5nIGBuZG9fZXRoX2lvY3RsYCwgYXMgZXhwZWN0ZWQuIEknbSBhbHNvIGNvbmZpcm1pbmcgdGhlIGV0aHRvb2wgb3BlcmF0aW9uczogYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCBmb3IgYGdldF9saW5rX2tzZXR0aW5nc2AsIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AgZm9yIGBzZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAgZm9yIHRoZSBgbndheV9yZXNldGAgb3BlcmF0aW9uLiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIHBoeWxpbmsgY29yZSBmdW5jdGlvbi5cblxuTm93LCBJIG5lZWQgdG8gbGlzdCB0aGUga2V5IGZ1bmN0aW9ucyBJIHNob3VsZCBmb2N1cyBvbiB3aXRoaW4gdGhpcyBzcGVjaWZpYyBkcml2ZXIgY29udGV4dC4gSSBoYXZlOlxuXG4qICAgYHJ0bDgxNjlfY2hhbmdlX210dWBcbiogICBgcnRsODE2OV9pb2N0bGBcbiogICBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgXG4qICAgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYFxuKiAgIGBydGw4MTY5X253YXlfcmVzZXRgXG4qICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgXG5cbldhaXQgYSBtaW51dGUsIEkgc2hvdWxkIGFsc28gbm90ZSB0aGF0IG90aGVyIHBvdGVudGlhbGx5IGltcG9ydGFudCBmdW5jdGlvbnMgc3VjaCBhcyBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX3ZhbGlkYXRlYCwgYHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnRgLCBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAsIGFuZCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYXBwZWFyIHRvIGJlIHN0YXRpYyBmdW5jdGlvbnMgaW4gYHI4MTY5X21haW4uY2AuIFRoZXNlIG1heSBiZSBpbmxpbmVkLCBzbyBpdCBpcyBiZXR0ZXIgdG8gcHJpb3JpdGl6ZSB0aGUgZW50cnkgcG9pbnRzLCB3aGljaCByZW1haW46XG5cbiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YFxuKiAgIGBydGw4MTY5X2lvY3RsYFxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2BcbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG4qICAgYHJ0bDgxNjlfbndheV9yZXNldGBcbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2BcblxuRmluYWxseSwgYmVmb3JlIEkgZGlnIGZ1cnRoZXIsIEknbGwgcXVpY2tseSBjaGVjayBpZiBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGEgc3RhdGljIGZ1bmN0aW9uLCBhcyBJIGhhdmUganVzdCBub3RlZCB0aGUgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTcwMCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTowNy4zNzE1MDYyODFaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MTQ4MTM2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODMxLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZSgpIC0gVXBkYXRlIHRoZSBwaHlsaW5rIHBhdXNlIGZyYW1lIGNvbmZpZ3VyYXRpb25cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzMtICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcXHUwMDI2c3RydWN0IHBoeWxpbmsgaW5zdGFuY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzNy0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4Mzg6c3RhdGljIHZvaWQgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUoc3RydWN0IHBoeWxpbmsgKnBsLCBpbnQgcGF1c2Vfc3RhdGUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODM5LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTkwND12b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTk0Ni1cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5NDc6XFx0cGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGUocGwsIHBhdXNlX3N0YXRlKTtcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5NDgtfVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0zMzEwPWludCBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0oc3RydWN0IHBoeWxpbmsgKnBsLFxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0zMzM1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MzMzNjpcXHRwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZShwbCwgcGF1c2Vfc3RhdGUpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMzMzNy1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMTY6NDE6MDcuNDUwNjU5ODM2WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0NjM2ODk4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgUGF1c2UgRnJhbWUgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIGBwaHlsaW5rX3VwZGF0ZV9wYXVzZV9zdGF0ZWAgaXMgZGVmaW5pdGVseSBzdGF0aWMg4oCTIHRoYXQncyBnb29kIHRvIGtub3csIHdlIGNhbiBkaXNyZWdhcmQgdGhhdCBmdW5jdGlvbiBkaXJlY3RseS4gSSdsbCBmb2N1cyBteSBhdHRlbnRpb24gb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBpbnN0ZWFkLCBzaW5jZSB0aG9zZSBhcmUgdGhlIGFjdGl2ZSBjb21wb25lbnRzLlxuXG5Ob3csIGxldCdzIHNlZSBpZiBgcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtYCBoYXMgYmVlbiBjaGFuZ2VkLiBBaCwgeWVzLCBpdCAqaGFzKiBiZWVuIG1vZGlmaWVkOyBpdCBjYWxscyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgLCB3aGljaCBjb25maXJtcyBpdCdzIHJlbGV2YW50IHRvIHRoZSBjdXJyZW50IGludmVzdGlnYXRpb24uXG5cblRoZSBuZXh0IHBvaW50IEkgbmVlZCB0byBjb25zaWRlciBpcyB3aGV0aGVyIHRoZXJlIGFyZSBhbnkgb3RoZXIgY29uZmlndXJhdGlvbnMgdGhhdCBhcmUgKm5lZWRlZCouIExldCdzIHNlZS4uLiB0aGUgdGV4dCBtZW50aW9ucyBgQ09ORklHX1I4MTY5YCBhbmQgYENPTkZJR19QSFlMSU5LYC4gYENPTkZJR19QSFlMSU5LYCBpcyBhdXRvbWF0aWNhbGx5IHNlbGVjdGVkIGJ5IGBSODE2OWAsIGJ1dCB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgSSBzaG91bGQgbGlzdCBpdCBleHBsaWNpdGx5IGFueXdheSwgc28gSSB3aWxsLiBBbmQgYWNjb3JkaW5nIHRvIHRoZSBpbnN0cnVjdGlvbnMgSSBuZWVkIHRvIGNoZWNrIHRoZSBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiB0aGUgS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cblxuYFI4MTY5YCBkZXBlbmRzIG9uIGBQQ0lgLiBgUENJYCBpcyBzdGFuZGFyZCwgc28gSSBkb24ndCBuZWVkIHRvIHNwZWNpZnkgdGhhdC4gSSdtIGdvaW5nIHRvIGRvdWJsZS1jaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnYCBqdXN0IHRvIG1ha2Ugc3VyZSBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLiBBaCwgeWVzLCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBpcyB1bmRlciBgTkVUX1ZFTkRPUl9SRUFMVEVLYC4gR29vZCB0byBrZWVwIGluIG1pbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMxMjQ3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjY0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTMxVDE2OjQxOjEyLjkxNDM1Mjg0N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk1MzkyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVF9WRU5ET1JfUkVBTFRFS1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6Njpjb25maWcgTkVUX1ZFTkRPUl9SRUFMVEVLXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTctXFx0Ym9vbCBcXFwiUmVhbHRlayBkZXZpY2VzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxMi45NzM5MDAzOTNaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1MzM1NTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgYE5FVF9WRU5ET1JfUkVBTFRFS2AgRGVwZW5kZW5jaWVzKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byBgTkVUX1ZFTkRPUl9SRUFMVEVLYC4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGl0cyBkZXBlbmRlbmNpZXMuIEknbSB0aGlua2luZywgXCJ3aGF0IG90aGVyIGtlcm5lbCBtb2R1bGVzIG9yIHN1YnN5c3RlbXMgcmVseSBvbiB0aGlzIHBhcnRpY3VsYXIgZHJpdmVyP1wiIElzIGl0IHB1cmVseSBzZWxmLWNvbnRhaW5lZCwgb3IgZG9lcyBpdCB0b3VjaCBhcmVhcyBsaWtlIG5ldHdvcmtpbmcgc3RhY2sgaW50ZXJuYWxzLCBwb3dlciBtYW5hZ2VtZW50LCBvciBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllcnM/IEtub3dpbmcgdGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBwb3RlbnRpYWwgaW1wYWN0IG9mIGFueSBjaGFuZ2VzIG9yIGRlYnVnZ2luZyBhbnkgaXNzdWVzLiBJJ2xsIG5lZWQgdG8gdHJhY2UgdGhlIG1vZHVsZSdzIGludGVyYWN0aW9ucyB0byBlbnN1cmUgbm90aGluZyBnZXRzIG92ZXJsb29rZWQgZHVyaW5nIHRyb3VibGVzaG9vdGluZy4gVGltZSB0byBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzE5NjAsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxNi4xMjcyNTkxODNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTMxMzcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBSZWFsdGVrIGRldmljZSBjb25maWd1cmF0aW9uXFxuICAgNDpcXHQjXFxuICAgNTpcXHRcXG4gICA2OlxcdGNvbmZpZyBORVRfVkVORE9SX1JFQUxURUtcXG4gICA3OlxcdFxcdGJvb2wgXFxcIlJlYWx0ZWsgZGV2aWNlc1xcXCJcXG4gICA4OlxcdFxcdGRlZmF1bHQgeVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQQ0lcXG4gIDEwOlxcdFxcdGhlbHBcXG4gIDExOlxcdFxcdCAgSWYgeW91IGhhdmUgYSBuZXR3b3JrIChFdGhlcm5ldCkgY2FyZCBiZWxvbmdpbmcgdG8gdGhpcyBjbGFzcywgc2F5IFkuXFxuICAxMjpcXHRcXG4gIDEzOlxcdFxcdCAgTm90ZSB0aGF0IHRoZSBhbnN3ZXIgdG8gdGhpcyBxdWVzdGlvbiBkb2Vzbid0IGRpcmVjdGx5IGFmZmVjdCB0aGVcXG4gIDE0OlxcdFxcdCAga2VybmVsOiBzYXlpbmcgTiB3aWxsIGp1c3QgY2F1c2UgdGhlIGNvbmZpZ3VyYXRvciB0byBza2lwIGFsbFxcbiAgMTU6XFx0XFx0ICB0aGUgcXVlc3Rpb25zIGFib3V0IFJlYWx0ZWsgZGV2aWNlcy4gSWYgeW91IHNheSBZLCB5b3Ugd2lsbCBiZSBhc2tlZCBmb3JcXG4gIDE2OlxcdFxcdCAgeW91ciBzcGVjaWZpYyBjYXJkIGluIHRoZSBmb2xsb3dpbmcgcXVlc3Rpb25zLlxcbiAgMTc6XFx0XFxuICAxODpcXHRpZiBORVRfVkVORE9SX1JFQUxURUtcXG4gIDE5OlxcdFxcbiAgMjA6XFx0Y29uZmlnIDgxMzlDUFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToxNi4xMjczOTQyMTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MzAzOTgzMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBEZWVwIERpdmUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMsIHNwZWNpZmljYWxseSBob3cgUmVhbHRlayBkcml2ZXJzIGFyZSBoYW5kbGVkLiBgTkVUX1ZFTkRPUl9SRUFMVEVLYCBpcyBlc3NlbnRpYWwsIGFuZCB0aGFua2Z1bGx5LCBpdCBkZWZhdWx0cyB0byAneScgYW5kIGRlcGVuZHMgb24gYFBDSWAsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgdGhpbmsgd2UgbmVlZCB0byBtYWtlIHN1cmUgYFI4MTY5YCBpcyBpbmNsdWRlZCBpbiBvdXIgYEVuYWJsZUNvbmZpZ3NgLCBhcyBhIHByZWNhdXRpb24uIE5vdywgd2hhdCBhYm91dCBgUEhZTElOS2A/IEl0J3Mgc2VsZWN0ZWQgYnkgYFI4MTY5YCwgc28gbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGp1c3QgaW5jbHVkZSBpdCBhcyB3ZWxsLCB0byBiZSBzYWZlLiBCdXQgd2FpdCwgaG9sZCBvbi4gYFBIWUxJTktgIGlzIGNvcmUgbmV0d29ya2luZyBmdW5jdGlvbmFsaXR5LCB1c2VkIGJ5IGEgKmxvdCogb2YgZHJpdmVycy4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIGZpbGUgdG8gYmUgY29tcGxldGVseSBjZXJ0YWluIGFib3V0IGl0cyBkZXBlbmRlbmNpZXMgYW5kIHVzZSBjYXNlcyBiZWZvcmUgSSBzdGFydCBhZGRpbmcgaXQgdG8gYW55dGhpbmcuIFRoaXMgZGVtYW5kcyBhIGJpdCBtb3JlIGludmVzdGlnYXRpb24uIEkgbmVlZCB0byBmdWxseSB1bmRlcnN0YW5kIGl0cyBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzI0MTMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMC42MDA0Mzc1OTRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwMjkxNzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSU5LXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MToyMC42NzA3MzU1WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIyNTcxMjAyMDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFI4MTY5IERyaXZlcidzIFBoeWxpbmsgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFdlJ3JlIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGludGVncmF0ZXMgdGhlIFI4MTY5IEV0aGVybmV0IGRyaXZlciB3aXRoIHRoZSBwaHlsaW5rIEFQSS4gVGhlIGRyaXZlcidzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyLCBzbyB0aGF0IGdpdmVzIHVzIHN5emthbGxlcidzIFBDSSBmdXp6ZXIgYXMgYSBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIHRoZSBrZXkgY29uZmlndXJhdGlvbiBvcHRpb25zOiB3ZSBoYXZlIGBSODE2OWAg4oCTIHRoYXQncyBhIG5vLWJyYWluZXIuICBBbmQgYE5FVF9WRU5ET1JfUkVBTFRFS2AsIHRob3VnaCBpdCdzIHNldCBhcyB0aGUgZGVmYXVsdCwgd2Ugc3RpbGwgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBhY3RpdmUuIFdlIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBlbmFibGUgb3RoZXIgdHJpc3RhdGVzIGFzIGBSODE2OWAgZG9lcyB0aGF0IGFscmVhZHkuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGp1aWN5IGJpdHMg4oCTIHRoZSBmb2N1cyBzeW1ib2xzLCB0aGUgZnVuY3Rpb25zIHdoZXJlIHRoaXMgcGh5bGluayBpbnRlZ3JhdGlvbiBpcyBoYXBwZW5pbmcuIFdlJ3JlIHNlZWluZyBtb2RpZmljYXRpb25zIHRvIGBydGw4MTY5X2NoYW5nZV9tdHVgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfaW9jdGxgLCBhbmQgbmV3IGZ1bmN0aW9ucyBsaWtlIGBydGw4MTY5X253YXlfcmVzZXRgLCAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBhbmQgYHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbWAuICBBbHNvLCBgcnRsX29wZW5gLCBgcnRsODE2OV9jbG9zZWAsIGBydGw4MTY5X3VwYCwgYHJ0bDgxNjlfZG93bmAsIGBydGxfaW5pdF9vbmVgLCBhbmQgYHJ0bDgxNjlfaW50ZXJydXB0YCBoYXZlIGJlZW4gbW9kaWZpZWQuXG5cbldoaWxlIHRoZSBsaWZlY3ljbGUgZnVuY3Rpb25zIGxpa2UgYHJ0bF9vcGVuYCBhcmUgZ29vZCBjYW5kaWRhdGVzLCB0aGUgc3dlZXQgc3BvdCBpcyB3aGVyZSB3ZSBoYXZlIGRpcmVjdCB1c2VyLXNwYWNlIGludGVyYWN0aW9uOiBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfbndheV9yZXNldGAuIFRoZXkgYXJlIHRyaWdnZXJlZCBieSBldGh0b29sLCBpb2N0bCwgb3IgbmV0bGluay4gVGhhdCBpcyBvdXIgdGFyZ2V0LiAgVGhlc2UgZGlyZWN0bHkgZXhlcmNpc2UgdGhlIG5ldyBwaHlsaW5rIGludGVncmF0aW9uLlxuXG5MZXQncyBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IHRoaXMgaXMgdGhlIGJlc3Qgc3RyYXRlZ3kuICBFYWNoIG9mIHRoZXNlIGZ1bmN0aW9ucyBjYWxscyBpbnRvIHRoZSBwaHlsaW5rIEFQSSBmdW5jdGlvbnM6XG5cbiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YCBjYWxscyBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2Ag4oCTIHdoaWNoIGlzICpuZXcqLlxuKiAgIGBydGw4MTY5X2lvY3RsYCBjYWxscyBgcGh5bGlua19taWlfaW9jdGxgLlxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0YC5cbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgIGNhbGxzIGBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldGAuXG4qICAgYHJ0bDgxNjlfbndheV9yZXNldGAgY2FsbHMgYHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0YC5cbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgYSBuZXcsIGV4cG9ydGVkIGZ1bmN0aW9uIGluIHBoeWxpbmsgaXRzZWxmLlxuKiAgIGBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1gIHVzZXMgYHBoeWxpbmtfdXBkYXRlX3BhdXNlX3N0YXRlYC5cblxuQWxzbyBgcGh5bGlua191cGRhdGVfcGF1c2Vfc3RhdGVgIGlzIGFsc28gd29ydGgga2VlcGluZyBpbiBtaW5kLlxuXG5Ob3cgbGV0J3MgdmVyaWZ5IHRoYXQgb3RoZXIgcG90ZW50aWFsIGNhbmRpZGF0ZXMgYXJlIG5vdCBmcnVpdGZ1bC5cblxuKiAgIGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2A6ICBUaGUgcGF0Y2ggcmVtb3ZlcyBTRlAtcmVsYXRlZCBmdW5jdGlvbnMuIE5vIG5ldyBqdWljeSBiaXRzIHRoZXJlIGZvciBmdXp6aW5nLlxuKiAgIGByODE2OV9tYWluLmNgOiBXZSBzZWUgYWRkaXRpb25zIGxpa2UgYHJ0bF9pc184MTE2YWZgLCBgcnRsX2dldF9zZnBfbW9kZWAsIGByODEyN19zZHNfcmVhZGAsIGByODEyN19zZHNfd3JpdGVgLCBgcjgxMjdfc2RzX21vZGlmeWAsIGByODEyN19zZnBfaW5pdF8xZ2AsIGByODEyN19zZnBfaW5pdF8xMGdgLiBUaGVzZSBhcmUgY2FsbGVkIGZyb20gYHJ0bDgxNjlfcGNzX2NvbmZpZ2AgYW5kIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLiBgcnRsODE2OV9wY3NfY29uZmlnYCBpcyBjYWxsZWQgYnkgcGh5bGluaywgc28gd2UnbGwgaW5kaXJlY3RseSBjb3ZlciB0aGlzIHZpYSBvdXIgbWFpbiBmb2N1cyBzeW1ib2xzLlxuXG5Pa2F5LCB0aGF0IG5haWxzIGl0IGRvd24uICBIZXJlJ3MgdGhlIHBsYW46XG5cbiogICBgV29ydGhGdXp6aW5nOiB0cnVlYFxuKiAgIGBGb2N1c1N5bWJvbHNgOlxuICAgICogICBgcnRsODE2OV9jaGFuZ2VfbXR1YFxuICAgICogICBgcnRsODE2OV9pb2N0bGBcbiAgICAqICAgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYFxuICAgICogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG4gICAgKiAgIFxuXG4iLCJJbnB1dFRva2VucyI6MzI4MTMsIk91dHB1dFRva2VucyI6MjU4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM1MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQxNjo0MTo0My4yNDE5Mzk3MjFaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjU1ODQzMTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCIsXG4gICAgXCJORVRfVkVORE9SX1JFQUxURUtcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgcjgxNjkgRXRoZXJuZXQgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBwaHlsaWIgZGlyZWN0bHksIGFkZGluZyBzdXBwb3J0IGZvciBuZXcgTUFDIHZlcnNpb25zICg4MTE2YWYsIDgxMjdfQVRGKSBhbmQgaW50cm9kdWNpbmcgYSBuZXcgcGh5bGluayBjb3JlIGZ1bmN0aW9uIGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYC4gVGhlIHI4MTY5IGRyaXZlciBpcyBhIHN0YW5kYXJkIFBDSSBuZXR3b3JrIGRyaXZlciB0aGF0IGNhbiBiZSBmdXp6ZWQgdmlhIHN5emthbGxlcidzIFBDSSBmdXp6ZXIuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBuZXRkZXYgYW5kIGV0aHRvb2wgY2FsbGJhY2tzIHRoYXQgdHJpZ2dlciB0aGUgbmV3IHBoeWxpbmsgaW50ZWdyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIixcbiAgICBcIk5FVF9WRU5ET1JfUkVBTFRFS1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSByODE2OSBFdGhlcm5ldCBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIHBoeWxpYiBkaXJlY3RseSwgYWRkaW5nIHN1cHBvcnQgZm9yIG5ldyBNQUMgdmVyc2lvbnMgKDgxMTZhZiwgODEyN19BVEYpIGFuZCBpbnRyb2R1Y2luZyBhIG5ldyBwaHlsaW5rIGNvcmUgZnVuY3Rpb24gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLiBUaGUgcjgxNjkgZHJpdmVyIGlzIGEgc3RhbmRhcmQgUENJIG5ldHdvcmsgZHJpdmVyIHRoYXQgY2FuIGJlIGZ1enplZCB2aWEgc3l6a2FsbGVyJ3MgUENJIGZ1enplci4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIG5ldGRldiBhbmQgZXRodG9vbCBjYWxsYmFja3MgdGhhdCB0cmlnZ2VyIHRoZSBuZXcgcGh5bGluayBpbnRlZ3JhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowzc8sv[1] Phase: Succeeded StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 16:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 16:41:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2] Phase: Succeeded StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 16:42:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-31 16:41:55 +0000 UTC FinishedAt: 2026-07-31 16:42:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-3546560812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-31 16:42:05 +0000 UTC FinishedAt: 2026-07-31 17:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-31 16:42:05 +0000 UTC FinishedAt: 2026-07-31 17:01:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fe122353-7a85-4ee7-9cb9-bff4db5f0630,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-3546560812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b19ef399-5fed-4c9a-b4fe-7768ca9b0d89", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2636595034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-31 16:42:05 +0000 UTC FinishedAt: 2026-07-31 17:01:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fe122353-7a85-4ee7-9cb9-bff4db5f0630,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-3546560812/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "b19ef399-5fed-4c9a-b4fe-7768ca9b0d89", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2636595034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:01:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:01:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-31 17:01:38 +0000 UTC FinishedAt: 2026-07-31 17:01:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-653053931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-31 17:01:48 +0000 UTC FinishedAt: 2026-07-31 17:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-31 17:01:48 +0000 UTC FinishedAt: 2026-07-31 17:03:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b19ef399-5fed-4c9a-b4fe-7768ca9b0d89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2636595034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-31 17:03:40 +0000 UTC FinishedAt: 2026-07-31 17:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-31 17:03:40 +0000 UTC FinishedAt: 2026-07-31 17:03:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-31 17:03:40 +0000 UTC FinishedAt: 2026-07-31 17:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-31 17:03:40 +0000 UTC FinishedAt: 2026-07-31 17:19:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fe122353-7a85-4ee7-9cb9-bff4db5f0630,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-653053931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3e7d7dee-7877-43e3-8173-fda87ea004b1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2233601295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-31 17:03:40 +0000 UTC FinishedAt: 2026-07-31 17:19:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*fe122353-7a85-4ee7-9cb9-bff4db5f0630,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-653053931/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "3e7d7dee-7877-43e3-8173-fda87ea004b1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2233601295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-31 17:19:40 +0000 UTC FinishedAt: 2026-07-31 17:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-31 17:19:40 +0000 UTC FinishedAt: 2026-07-31 17:19:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-31 17:19:40 +0000 UTC FinishedAt: 2026-07-31 17:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-31 17:19:40 +0000 UTC FinishedAt: 2026-07-31 17:21:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e7d7dee-7877-43e3-8173-fda87ea004b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2233601295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*b19ef399-5fed-4c9a-b4fe-7768ca9b0d89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e7d7dee-7877-43e3-8173-fda87ea004b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2636595034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2233601295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 17:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 17:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-3001622532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 17:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 17:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-31 17:21:28 +0000 UTC FinishedAt: 2026-07-31 17:21:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-31 17:21:39 +0000 UTC FinishedAt: 2026-07-31 18:15:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzc8sv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["rtl8169_change_mtu","rtl8169_ioctl","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","phylink_update_mac_pause_capabilities","phylink_ethtool_set_pauseparam"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"a5c6ae8de11ef0c3aedbe5e123354aad87d0d925","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169","NET_VENDOR_REALTEK"],"series_id":"d36b2e53-46bd-45d1-b169-8b3ea93c936b","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-31 17:21:39 +0000 UTC FinishedAt: 2026-07-31 18:14:59 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b19ef399-5fed-4c9a-b4fe-7768ca9b0d89,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*3e7d7dee-7877-43e3-8173-fda87ea004b1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2636595034/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-build-action-2233601295/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzc8sv/series-workflowzc8sv-convert-artifact-3001622532/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}