Name: series-workflowzf89p Phase: Succeeded StartedAt: 2026-07-10 05:10:50 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[0] Phase: Succeeded StartedAt: 2026-07-10 05:10:50 +0000 UTC FinishedAt: 2026-07-10 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[0].run-triage Phase: Succeeded StartedAt: 2026-07-10 05:10:50 +0000 UTC FinishedAt: 2026-07-10 05:34:47 +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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "80fd2087-15cb-4548-b4b1-6dc407cd3fec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phylink_update_mac_pause_capabilities", "rtl8169_change_mtu", "rtl_init_phylink", "rtl8169_pcs_config", "rtl8169_pcs_get_state", "rtl_mac_link_up", "rtl_mac_link_down", "rtl_mac_select_pcs", "rtl_mac_disable_tx_lpi", "rtl_mac_enable_tx_lpi", "rtl8169_sds_read", "r8127_sds_read", "r8127_sds_write", "r8127_sds_modify", "r8127_sfp_init_1g", "r8127_sfp_init_10g", "rtl_get_sfp_mode", "rtl_is_8116af", "rtl_lowpower_hidden_functions", "rtl8169_get_link_ksettings", "rtl8169_set_link_ksettings", "rtl8169_nway_reset", "rtl8169_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua191cCYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfd3JpdGUmIzM0OywKICAgICYjMzQ7cjgxMjdfc2RzX21vZGlmeSYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xZyYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xMGcmIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGxfaXNfODExNmFmJiMzNDssCiAgICAmIzM0O3J0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NmEyOTYxNjQ5MDExNGYzODYyZmE0MjA3YTg3YWZjNjY3ODZkOWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDU6MzM6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNTgxOGE5YTUwMGE4NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuQEAgLTg2LDggJiM0Mzs4Niw4IEBAIGNvbmZpZyBSODE2OVxuIFx0ZGVwZW5kcyBvbiBQQ0lcbiBcdHNlbGVjdCBGV19MT0FERVJcbiBcdHNlbGVjdCBDUkMzMlxuLVx0c2VsZWN0IFBIWUxJQlxuIFx0c2VsZWN0IFJFQUxURUtfUEhZXG4mIzQzO1x0c2VsZWN0IFBIWUxJTktcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cbiBcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uYzBiMGMyYmM1YTQ4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3I4MTY5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5AQCAtOTYsNiAmIzQzOzk2LDI1IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSXHRcdDB4MjM0YVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTURfRVhFQ1x0QklUKDApXG4mIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4ZWIwZVxuJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4mIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSAmIzQzOzM1MywxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xuIFx0QUxEUFNfTFRSXHQ9IDB4ZTBhMixcbiBcdExUUl9PQkZGX0xPQ0tcdD0gMHhlMDMyLFxuIFx0TFRSX1NOT09QXHQ9IDB4ZTAzNCxcbiYjNDM7XHRTRU5EX0xUUl9NU0dcdD0gMHhlMDM4LFxuIFxuICNkZWZpbmUgQUxEUFNfTFRSX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOXHRcdEJJVCgwKVxuICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU5cdFx0QklUKDE0KVxuICNkZWZpbmUgTFRSX1NOT09QX0VOXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xuIFx0UlRMX0RBU0hfMjVfQlAsXG4gfTtcbiBcbiYjNDM7ZW51bSBydGxfc2ZwX21vZGUge1xuJiM0MztcdFJUTF9TRlBfTk9ORSxcbiYjNDM7XHRSVExfU0ZQXzgxNjhfQUYsXG4mIzQzO1x0UlRMX1NGUF84MTI3X0FURixcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG5AQCAtNzM2LDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4mIzQzO1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICYjNDM7Nzc4LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1MzIgaXJxX21hc2s7XG4gXHRpbnQgaXJxO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICYjNDM7NzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiAmIzQzOzgwMiw5IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcbiBcbiBcdHUzMiBvY3BfYmFzZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfcGNzIHBjcztcbiB9O1xuIFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuQEAgLTExMjgsMTAgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICYjNDM7MTIyNiw3MyBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfc2RzX3BoeV9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xuIH1cbiBcbiYjNDM7REVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgXHUwMDI2IFI4MTI3X1NEU19DTURfRVhFQztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByODEyN19zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSwgdTE2IHJlZylcbiYjNDM7e1xuJiM0MztcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4mIzQzO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXG4mIzQzO1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuJiM0MztcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIgPSAoaW5kZXggXHUwMDNjXHUwMDNjIDExKSB8IChwYWdlIFx1MDAzY1x1MDAzYyA1KSB8IHJlZztcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0RBVEFfSU4sIHZhbCk7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXG4mIzQzO1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2YWwgPSAodmFsIFx1MDAyNiB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7XG4mIzQzO1x0cjgxMjdfc2RzX3dyaXRlKHRwLCBpbmRleCwgcGFnZSwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbiYjNDM7XG4mIzQzO1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMSwgMzEsIDAsIEJJVCgzKSk7XG4mIzQzO1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTtcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuJiM0MztcdFJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgXHUwMDI2IH4weDMwMDMpIHwgMHgwMDAyKTtcbiYjNDM7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuJiM0MztcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDgsIDB4MDAwMCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHR2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGludCB2YWw7XG5AQCAtMTIxNywxMiAmIzQzOzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiAmIzQzOzEzNzEsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4mIzQzO1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxuJiM0MztcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXG4ge1xuIFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnKTtcbkBAIC0xNTc4LDYgJiM0MzsxNjc1LDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4mIzQzO1x0XHRcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbiYjNDM7XHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgJiM0MzsxNzg0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcbiBcdCAgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyAmIzQzOzE4MDEsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxuIFx0XHQgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgJiM0MzsxODA5LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0yMDc0LDExICYjNDM7MjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNzAsNyAmIzQzOzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgJiM0MzsyNDEwLDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcbi1cbi1cdHBoeV9nZXRfcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBcdTAwMjZ0eF9wYXVzZSwgXHUwMDI2cnhfcGF1c2UpO1xuIFxuLVx0ZGF0YS1cdTAwM2VhdXRvbmVnID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF1dG9uZWc7XG4tXHRkYXRhLVx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcbi1cdGRhdGEtXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICYjNDM7MjQyMiw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjM4NiwzNCAmIzQzOzI0ODgsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0aW50IGR1cGxleCA9IGNtZC1cdTAwM2ViYXNlLmR1cGxleDtcbi1cdGludCBzcGVlZCA9IGNtZC1cdTAwM2ViYXNlLnNwZWVkO1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xuLVxuLVx0aWYgKGNtZC1cdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuJiM0Mzt9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdHJ0bF9zZnBfaW5pdCh0cCk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbkBAIC0yNDMxLDEwICYjNDM7MjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuQEAgLTI0OTksOSAmIzQzOzI1OTQsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSAmIzQzOzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXG4gXHRcdHBoeV93cml0ZV9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcbiBcbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cnRsX3NmcF9pbml0KHRwKTtcbi1cbiBcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cbiBcdHBoeV9zcGVlZF91cCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTI2NTcsMTUgJiM0MzsyNzUyLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqL1xuLVx0aWYgKGp1bWJvKSB7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRwaHlfc3RhcnRfYW5lZyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0fVxuIH1cbiBcbiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpXG5AQCAtMjc4MCw3ICYjNDM7Mjg2Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xuIFxuIFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XG4tXHRcdHBoeV9zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWRldiwgZmFsc2UpO1xuJiM0MztcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgJiM0MzsyOTE4LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XG5AQCAtMzA5OCw4ICYjNDM7MzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgJiM0MzszMjMwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7XG4mIzQzO1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICYjNDM7MzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDk0LCAweGZmMDAsIDApO1xuQEAgLTMxNjQsNiAmIzQzOzMyNzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiAmIzQzOzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXHUwMDNlZGV2Zm4pO1xuJiM0MztcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgZnVuYywgcG9zO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXHUwMDNjIDg7IGZ1bmMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XG4mIzQzO1xuJiM0MztcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuJiM0MztcdFx0aWYgKHBvcykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsIHw9IChQQ0lfRVhQX0xOS0NUTF9BU1BNQyB8IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTik7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCB2YWwpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBvcyA9IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KGJ1cywgZGV2Zm4sIFBDSV9DQVBfSURfUE0pO1xuJiM0MztcdFx0aWYgKHBvcykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4mIzQzO1x0XHRcdHZhbCB8PSBQQ0lfRDNob3Q7XG4mIzQzO1x0XHRcdHZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTO1xuJiM0MztcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuJiM0MztcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4mIzQzO1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTQxMzksMTIgJiM0Mzs0MjkxLDI1IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuJiM0MztcdGJvb2wganVtYm9fYWZ0ZXIgPSBuZXdfbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4gXG4gXHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG4gXHRydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApO1xuIFxuJiM0MztcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGp1bWJvX2FmdGVyKVxuJiM0MztcdFx0XHRjYXBzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcbiYjNDM7XHRcdHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXModHAtXHUwMDNlcGh5bGluaywgY2Fwcyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY5LDggJiM0Mzs1MDM0LDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZylcbi1cdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4mIzQzO1x0XHRcdHBoeWxpbmtfbWFjX2NoYW5nZSh0cC1cdTAwM2VwaHlsaW5rLFxuJiM0MztcdFx0XHRcdFx0ICAgISEoUlRMX1I4KHRwLCBQSFlzdGF0dXMpIFx1MDAyNiBMaW5rU3RhdHVzKSk7XG4mIzQzO1x0fVxuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5AQCAtNDkzMCw5ICYjNDM7NTEwMCw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4ge1xuLVx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzM0IC4uLiBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHQvKiBBZGp1c3QgRUVFIExFRCBmcmVxdWVuY3kgKi9cbkBAIC00OTYzLDQwICYjNDM7NTEzMCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4tXG4tXHRpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkge1xuLVx0XHRydGxfbGlua19jaGdfcGF0Y2godHApO1xuLVx0XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWVuYWJsZV90eF9scGkpO1xuLVx0XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHBtX3J1bnRpbWVfaWRsZShkKTtcbi1cdH1cbi1cbi1cdHBoeV9wcmludF9zdGF0dXModHAtXHUwMDNlcGh5ZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbi1cdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cbi1cdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cdTAwM2VkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLFxuLVx0XHRcdFx0IHBoeV9tb2RlKTtcbi1cdGlmIChyZXQpXG4mIzQzO1x0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rLCB0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuLVx0XHRwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7XG4tXG4tXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MDA3LDEwICYjNDM7NTE0OSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4tXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRydGxfc2ZwX3Jlc2V0KHRwKTtcbiBcbiBcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcbkBAIC01MDMyLDE0ICYjNDM7NTE3MiwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XG4gXG4gXHRwY2lfc2V0X21hc3Rlcih0cC1cdTAwM2VwY2lfZGV2KTtcbi1cdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4tXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4gXHRlbmFibGVfd29yayhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrKTtcbiBcdHJ0bF9yZXNldF93b3JrKHRwKTtcbi1cbi1cdHBoeV9zdGFydCh0cC1cdTAwM2VwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01MDQ5LDEzICYjNDM7NTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuJiM0MztcdHBoeWxpbmtfc3RvcCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJ0bDgxNjlfZG93bih0cCk7XG4gXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiBcbiBcdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuIFxuLVx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbkBAIC01MTEyLDExICYjNDM7NTI1MSwxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbi1cbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4mIzQzO1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4mIzQzO1x0XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHR9XG4gXHRydGw4MTY5X3VwKHRwKTtcbiYjNDM7XHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIG91dDpcbkBAIC01MjIxLDYgJiM0Mzs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4gXHQvKiBTb21lIGNoaXAgdmVyc2lvbnMgbWF5IHRydW5jYXRlIHBhY2tldHMgd2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uICovXG4gXHRydGxfaW5pdF9yeGNmZyh0cCk7XG4gXG4mIzQzO1x0aWYgKHJ0bF9pc184MTE2YWYodHApKVxuJiM0MztcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4mIzQzO1xuIFx0cmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTtcbiB9XG4gXG5AQCAtNTI4OCw2ICYjNDM7NTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4mIzQzO1x0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgJiM0Mzs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBydGxfc2V0X21hY19hZGRyZXNzLFxuLVx0Lm5kb19ldGhfaW9jdGxcdFx0PSBwaHlfZG9faW9jdGxfcnVubmluZyxcbiYjNDM7XHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNjlfaW9jdGwsXG4gXHQubmRvX3NldF9yeF9tb2RlXHQ9IHJ0bF9zZXRfcnhfbW9kZSxcbiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiBcdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHJ0bDgxNjlfbmV0cG9sbCxcbkBAIC01NDc0LDE2ICYjNDM7NTYxOSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICYjNDM7NTczNCwyNDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuJiM0MztcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xuJiM0MztcbiYjNDM7XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXBjcy5vcHMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19BRERSX1JFRywgc2RzX3JlZyk7XG4mIzQzO1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4mIzQzO1x0dmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbiYjNDM7XHRcdHUxNiBzdGF0MTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUykpXG4mIzQzO1x0XHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VsaW5rID0gISEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUyk7XG4mIzQzO1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTE2IGJtc3IsIGxwYTtcbiYjNDM7XG4mIzQzO1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfQk1TUik7XG4mIzQzO1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9MUEEpO1xuJiM0MztcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuJiM0MztcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOlxuJiM0MztcdFx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbiYjNDM7XHRcdFx0cjgxMjdfc2ZwX2luaXRfMWcodHApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBTRlAgaW50ZXJmYWNlIG1vZGU6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lciwgYm9vbCB0eF9jbGtfc3RvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBydGxfcGh5bGlua19tYWNfb3BzID0ge1xuJiM0MztcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcbiYjNDM7XHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxuJiM0MztcdC5tYWNfbGlua19kb3duICA9IHJ0bF9tYWNfbGlua19kb3duLFxuJiM0MztcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcbiYjNDM7XHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcbiYjNDM7XHQubWFjX2VuYWJsZV90eF9scGkgPSBydGxfbWFjX2VuYWJsZV90eF9scGksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBydGw4MTY5X2dldF9scGlfY2FwcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4mIzQzO1xuJiM0MztcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXG4mIzQzO1x0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzI1MDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0Y2FwcyB8PSBNQUNfNTAwMEZEO1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuJiM0MztcdFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNhcHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XG4mIzQzO1x0LnBjc192YWxpZGF0ZSA9IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlLFxuJiM0MztcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxuJiM0MztcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxuJiM0MztcdC5wY3NfYW5fcmVzdGFydCA9IHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bF9pbml0X3BoeWxpbmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcdTAwMjZ0cC1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2VzZnBfbW9kZSkge1xuJiM0MztcdGNhc2UgUlRMX1NGUF84MTY4X0FGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODEyN19BVEY6XG4mIzQzO1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbiYjNDM7XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xuJiM0MztcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiYjNDM7XHRcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuJiM0MztcdFx0XHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4mIzQzO1x0XHRcdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc2V0X2JpdChwaHlfbW9kZSwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdGlmICh0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzKVxuJiM0MztcdFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuJiM0MztcdFx0XHQgICAgcGh5X21vZGUsIFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xuJiM0MztcdGlmIChJU19FUlIocGwpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rID0gcGw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiAmIzQzOzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHRcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XG4gXHR0cC1cdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXHUwMDNlbWFjX3ZlcnNpb247XG4gXHR0cC1cdTAwM2Vmd19uYW1lID0gY2hpcC1cdTAwM2Vmd19uYW1lO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiBcbiBcdC8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nXG4gXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cbkBAIC01Njc5LDEyICYjNDM7NjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xuIFxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG5AQCAtNTc4OCwxMyAmIzQzOzYxNjAsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgdHApO1xuIFxuLVx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcbiYjNDM7XHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkge1xuJiM0MztcdFx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdGlmIChyYylcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MTcsNiAmIzQzOzYxOTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuJiM0MztcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbiYjNDM7XHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuJiM0MztcbiBcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjllOWNkNzkzMDFkNjZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE4MjgsNiAmIzQzOzE4MjgsOTMgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4mIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cbiYjNDM7ICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcGF1c2UsIGNhcHNfYWRkZWQsIGNhcHNfcmVtb3ZlZDtcbiYjNDM7XHRib29sIHBhdXNlX2FkdiwgYXN5bV9hZHY7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuJiM0MztcdFx0cGh5bGlua19lcnIocGwsIFwmIzM0O0F0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2xkX3BhdXNlID0gcGwtXHUwMDNlY29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgXHUwMDI2IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdGNhcHNfYWRkZWQgPSBtYWNfcGF1c2UgXHUwMDI2IH5vbGRfcGF1c2U7XG4mIzQzO1x0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFx1MDAyNiB+bWFjX3BhdXNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNhcHNfYWRkZWQgXHUwMDI2XHUwMDI2ICFjYXBzX3JlbW92ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBtYWNfcGF1c2U7XG4mIzQzO1xuJiM0MztcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19TWU1fUEFVU0UpXG4mIzQzO1x0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19BU1lNX1BBVVNFKVxuJiM0MztcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdGlmIChjYXBzX2FkZGVkIFx1MDAyNiBNQUNfU1lNX1BBVVNFKSB7XG4mIzQzO1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XHRcdGlmIChwbC1cdTAwM2VwaHlkZXYgXHUwMDI2XHUwMDI2ICFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY2Fwc19hZGRlZCBcdTAwMjYgTUFDX0FTWU1fUEFVU0UpIHtcbiYjNDM7XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0XHRpZiAocGwtXHUwMDNlcGh5ZGV2IFx1MDAyNlx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVx1MDAzZXBoeWRldi1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9BTikge1xuJiM0MztcdFx0aWYgKHBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfUlgpIFx1MDAyNlx1MDAyNiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcbiYjNDM7XHRcdFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiYjNDM7XHRcdHBhdXNlX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZyk7XG4mIzQzO1x0XHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4mIzQzO1x0XHRcdFx0IHBsLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZywgcGF1c2VfYWR2KTtcbiYjNDM7XHRcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4mIzQzO1x0XHRcdFx0IHBsLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZywgYXN5bV9hZHYpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRwaHlfc3RhcnRfYW5lZyhwbC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uNDcyMWJhMDcxY2JiZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC0xNyw3ICYjNDM7MTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3JlYWx0ZWsuaFwmIzM0O1xuQEAgLTI2NDYsNDUgJiM0MzsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMDBiYXNlVF9GdWxsX0JJVCxcbi1cdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4tXG4tXHQvKiBzZXQgZGVmYXVsdCBtb2RlICovXG4tXHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbi1cdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbi1cbi1cdHBoeWRldi1cdTAwM2Vwb3J0ID0gUE9SVF9GSUJSRTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRpbnQgdmFsLCBlcnI7XG4tXG4tXHRlcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAoIXBoeWRldi1cdTAwM2VsaW5rKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgUlRMX1BIWVNSKTtcbi1cdGlmICh2YWwgXHUwMDNjIDApXG4tXHRcdHJldHVybiB2YWw7XG4tXG4tXHRydGxnZW5fZGVjb2RlX3BoeXNyKHBoeWRldiwgdmFsKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDAwODIwMSksXG5AQCAtMjkzNCwyMCAmIzQzOzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7UmVhbHRlayBTRlAgUEhZIE1vZGVcJiMzNDssXG4tXHRcdC5mbGFnc1x0XHQ9IFBIWV9JU19JTlRFUk5BTCxcbi1cdFx0LnByb2JlXHRcdD0gcnRsODIyeF9wcm9iZSxcbi1cdFx0LmdldF9mZWF0dXJlc1x0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzLFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHJ0bGdlbl9yZXN1bWUsXG4tXHRcdC5yZWFkX3BhZ2VcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbi1cdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4tXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4gXHR9LCB7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMWNjYWQwKSxcbiBcdFx0Lm5hbWVcdFx0PSBcJiMzNDtSVEw4MjI0IDIuNUdicHMgUEhZXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbmluZGV4IDJiYzBkYjNkNTJhYzhkLi5lM2M3ODIyMTAwYWJhNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4gdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2VuZChzdHJ1Y3QgcGh5bGluayAqcGwpO1xuIFxuJiM0Mzt2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZDY4M2JjMWIwNjU5Y2QuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNyAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua191cCYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfd3JpdGUmIzM0OywKICAgICYjMzQ7cjgxMjdfc2RzX21vZGlmeSYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xZyYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xMGcmIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGxfaXNfODExNmFmJiMzNDssCiAgICAmIzM0O3J0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwNTozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhYS4uNTgxOGE5YTUwMGE4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKQEAgLTg2LDggJiM0Mzs4Niw4IEBAIGNvbmZpZyBSODE2OQogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgotCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgUkVBTFRFS19QSFkKJiM0MzsJc2VsZWN0IFBIWUxJTksKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0bwogCSAgdGhlIGZvbGxvd2luZyBmYW1pbGllczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKaW5kZXggZWM0ZmMyMWZhMjFmYjAuLmMwYjBjMmJjNWE0ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjYsMTIgJiM0MzsyNiwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cjgxNjkuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3I4MTY5X2Zpcm13YXJlLmgmIzM0OwpAQCAtOTYsNiAmIzQzOzk2LDI1IEBACiAjZGVmaW5lIEpVTUJPXzlLCSg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAjZGVmaW5lIEpVTUJPXzE2SwkoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01ECQkweDIzNDgKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSCQkweDIzNGEKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOCTB4MjM0YwomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfT1VUCTB4MjM0ZQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDCUJJVCgwKQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRQlCSVQoMSkKJiM0MzsjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUcJMHhlYjEwCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0NNRF9SRUcJCTB4ZWIwZQomIzQzOyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFRwkweGViMTQKJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRAkJMHgwMDAxCiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFCTB4NDAKJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0UJMHgwMDgwCiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVAkJMHhkYzAwCiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLCTB4MDA3OAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGCTB4MDAzMAomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRAkJMHhkMDA2CiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0sJMHgwMGZmCiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRgkweDAwMDAKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7CiAJdTMyIG1hc2s7CiAJdTMyIHZhbDsKQEAgLTMzNCwxMSAmIzQzOzM1MywxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMgewogCUFMRFBTX0xUUgk9IDB4ZTBhMiwKIAlMVFJfT0JGRl9MT0NLCT0gMHhlMDMyLAogCUxUUl9TTk9PUAk9IDB4ZTAzNCwKJiM0MzsJU0VORF9MVFJfTVNHCT0gMHhlMDM4LAogCiAjZGVmaW5lIEFMRFBTX0xUUl9FTgkJCUJJVCgwKQogI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOCQlCSVQoMCkKICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU4JCUJJVCgxNCkKICNkZWZpbmUgTFRSX1NOT09QX0VOCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOCQkJQklUKDApCiB9OwogCiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMgewpAQCAtNzI4LDYgJiM0Mzs3NDksMTIgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ0bF9zZnBfbW9kZSB7CiYjNDM7CVJUTF9TRlBfTk9ORSwKJiM0MzsJUlRMX1NGUF84MTY4X0FGLAomIzQzOwlSVExfU0ZQXzgxMjdfQVRGLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsJLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CkBAIC03MzYsNiAmIzQzOzc2Myw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCWVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247CiAJZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTsKJiM0MzsJZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7CiAJdTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGRpcnR5X3R4OwpAQCAtNzUwLDYgJiM0Mzs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl1MzIgaXJxX21hc2s7CiAJaW50IGlycTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCBzcGVlZDsKIAogCXN0cnVjdCB7CiAJCURFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpOwpAQCAtNzYyLDcgJiM0Mzs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7CiAJdW5zaWduZWQgYXNwbV9tYW5hZ2VhYmxlOjE7CiAJdW5zaWduZWQgZGFzaF9lbmFibGVkOjE7Ci0JYm9vbCBzZnBfbW9kZToxOwogCWRtYV9hZGRyX3QgY291bnRlcnNfcGh5c19hZGRyOwogCXN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVyczsKIAlzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDsKQEAgLTc3NCw2ICYjNDM7ODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkczsKIAogCXUzMiBvY3BfYmFzZTsKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiYjNDM7CXN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZzsKJiM0MzsJc3RydWN0IHBoeWxpbmtfcGNzIHBjczsKIH07CiAKIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApOwpAQCAtMTEyOCwxMCAmIzQzOzExNTksNiBAQCBzdGF0aWMgaW50IHI4MTY4X3BoeV9vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZykKIAlpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKQogCQlyZXR1cm4gMDsKIAotCS8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqLwotCWlmICh0cC0mZ3Q7c2ZwX21vZGUgJmFtcDsmYW1wOyByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSkKLQkJcmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQICZhbXA7IDB4ZmZmZjsKLQogCVJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgJmx0OyZsdDsgMTUpOwogCiAJcmV0dXJuIHJ0bF9sb29wX3dhaXRfaGlnaCh0cCwgJmFtcDtydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/CkBAIC0xMTk5LDYgJiM0MzsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXVzbGVlcF9yYW5nZSgxMCwgMjApOwogfQogCiYjNDM7REVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgJmFtcDsgUjgxMjdfU0RTX0NNRF9FWEVDOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKQomIzQzO3sKJiM0MzsJdTE2IGFkZHIgPSAoaW5kZXggJmx0OyZsdDsgMTEpIHwgKHBhZ2UgJmx0OyZsdDsgNSkgfCByZWc7CiYjNDM7CiYjNDM7CVJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDKTsKJiM0MzsKJiM0MzsJaWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCAmYW1wO3I4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLAomIzQzOwkJCSAgIHUxNiByZWcsIHUxNiB2YWwpCiYjNDM7ewomIzQzOwl1MTYgYWRkciA9IChpbmRleCAmbHQ7Jmx0OyAxMSkgfCAocGFnZSAmbHQ7Jmx0OyA1KSB8IHJlZzsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0RBVEFfSU4sIHZhbCk7CiYjNDM7CVJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDIHwgUjgxMjdfU0RTX0NNRF9XRSk7CiYjNDM7CiYjNDM7CWlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgJmFtcDtyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLAomIzQzOwkJCSAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpOwomIzQzOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmFsID0gKHZhbCAmYW1wOyB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7CiYjNDM7CXI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyODEyN19zZnBfc2RzX3BoeV9yZXNldCh0cCk7CiYjNDM7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpOwomIzQzOwlyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpOwomIzQzOwlyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpOwomIzQzOwlSVExfVzE2KHRwLCAweDIzM2UsIChSVExfUjE2KHRwLCAweDIzM2UpICZhbXA7IH4weDMwMDMpIHwgMHgwMDAyKTsKJiM0MzsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0NjYsIDB4MDAwMCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwOCwgMHgwMDAwKTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApOwomIzQzOwomIzQzOwl2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCWludCB2YWw7CkBAIC0xMjE3LDEyICYjNDM7MTMxMSw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgJmFtcDsgfjB4MDAwZikgfCAweDAwMGMpOwogfQogCi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCi17Ci0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQotCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwotfQotCiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKQEAgLTEyODMsNiAmIzQzOzEzNzEsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKQogCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIHRwLSZndDtvY3BfYmFzZSAmIzQzOyByZWcsIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgJmFtcDsmYW1wOwomIzQzOwkJKHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpICZhbXA7IFJUTF9QS0dfREVURUNUX01BU0spID09CiYjNDM7CQlSVExfUEtHX0RFVEVDVF84MTE2QUYgJmFtcDsmYW1wOwomIzQzOwkJKHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgJmFtcDsgUlRMX0lOVF9IV19JRF9NQVNLKSA9PQomIzQzOwkJUlRMX0lOVF9IV19JRF84MTE2QUY7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpCiB7CiAJcmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZyk7CkBAIC0xNTc4LDYgJiM0MzsxNjc1LDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJfQogfQogCiYjNDM7c3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7CiYjNDM7CiYjNDM7CQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKJiM0MzsJCQlyZXR1cm4gUlRMX1NGUF84MTI3X0FURjsKJiM0MzsJfSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkgewomIzQzOwkJcmV0dXJuIFJUTF9TRlBfODE2OF9BRjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gUlRMX1NGUF9OT05FOwomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKQEAgLTE2NzMsMTYgJiM0MzsxNzg0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGxfcGNpX2NvbW1pdCh0cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZCkKIHsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtJmd0O3BoeWRldjsKLQogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fAogCSAgICB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiYjNDM7CQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKLQkJfSBlbHNlIGlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMCkgewomIzQzOwkJfSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApIHsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7CiAJCX0gZWxzZSB7CkBAIC0xNjkyLDcgJiM0MzsxODAxLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fAogCQkgICB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiYjNDM7CQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE3MDAsNyAmIzQzOzE4MDksNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDNmKTsKIAkJfQogCX0gZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHsKLQkJaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpOwogCQl9IGVsc2UgewpAQCAtMjA3NCwxMSAmIzQzOzIxODMsMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCWNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2OwogCiAJLyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi8KLQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfVU5LTk9XTikKJiM0MzsJaWYgKHRwLSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQogCQlyZXR1cm4gY2k7CiAKIAlmb3IgKDsgY2ktJmd0O3NwZWVkOyBjaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRwLSZndDtwaHlkZXYtJmd0O3NwZWVkID09IGNpLSZndDtzcGVlZCkKJiM0MzsJCWlmICh0cC0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQogCQkJcmV0dXJuIGNpOwogCX0KIApAQCAtMjIzNiw3ICYjNDM7MjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtwaHlkZXYtJmd0O3NwZWVkOwomIzQzOwl1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC0mZ3Q7c3BlZWQ7CiAJdW5zaWduZWQgaW50IHRpbWVyID0gdHAtJmd0O3R4X2xwaV90aW1lcjsKIAogCWlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTikKQEAgLTIyNTQsNyAmIzQzOzIzNjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWRldiwgZGF0YSk7CiYjNDM7CXJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLSZndDtwaHlsaW5rLCBkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMjcwLDcgJiM0MzsyMzc5LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSkKIAlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlsaW5rLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMzAxLDEzICYjNDM7MjQxMCw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlib29sIHR4X3BhdXNlLCByeF9wYXVzZTsKLQotCXBoeV9nZXRfcGF1c2UodHAtJmd0O3BoeWRldiwgJmFtcDt0eF9wYXVzZSwgJmFtcDtyeF9wYXVzZSk7CiAKLQlkYXRhLSZndDthdXRvbmVnID0gdHAtJmd0O3BoeWRldi0mZ3Q7YXV0b25lZzsKLQlkYXRhLSZndDt0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7Ci0JZGF0YS0mZ3Q7cnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwOwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMTgsOSAmIzQzOzI0MjIsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGV2LSZndDttdHUgJmd0OyBFVEhfREFUQV9MRU4pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXBoeV9zZXRfYXN5bV9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhLSZndDtyeF9wYXVzZSwgZGF0YS0mZ3Q7dHhfcGF1c2UpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMzg2LDM0ICYjNDM7MjQ4OCwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlsZTMyX3RvX2NwdSh0cC0mZ3Q7Y291bnRlcnMtJmd0O3J4X3Vua25vd25fb3Bjb2RlKTsKIH0KIAotc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtJmd0O3BoeWRldjsKLQlpbnQgZHVwbGV4ID0gY21kLSZndDtiYXNlLmR1cGxleDsKLQlpbnQgc3BlZWQgPSBjbWQtJmd0O2Jhc2Uuc3BlZWQ7Ci0KLQlpZiAoIXRwLSZndDtzZnBfbW9kZSkKLQkJcmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpOwotCi0JaWYgKGNtZC0mZ3Q7YmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtJmd0O3N1cHBvcnRlZCkpCi0JCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC0mZ3Q7cGh5bGluaywgY21kKTsKJiM0Mzt9CiAKLQlwaHlkZXYtJmd0O2F1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JcGh5ZGV2LSZndDtzcGVlZCA9IHNwZWVkOwotCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gZHVwbGV4OwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JcnRsX3NmcF9pbml0KHRwKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtJmd0O3BoeWxpbmspOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7CkBAIC0yNDMxLDEwICYjNDM7MjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3RzX2luZm8JCT0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbywKLQkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkubndheV9yZXNldAkJPSBydGw4MTY5X253YXlfcmVzZXQsCiAJLmdldF9lZWUJCT0gcnRsODE2OV9nZXRfZWVlLAogCS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKLQkuZ2V0X2xpbmtfa3NldHRpbmdzCT0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsCiAJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAogCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCkBAIC0yNDk5LDkgJiM0MzsyNTk0LDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXRwLSZndDtvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7CiAKIAkJLyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovCi0JCXBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC0mZ3Q7cGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAotCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAotCQkJCSAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwkJaWYgKHRwLSZndDtwaHlkZXYpCiYjNDM7CQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCQkgICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJCSAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwogCX0KIH0KIApAQCAtMjUzOCw2ICYjNDM7MjYzNCw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpCiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwogCXI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLSZndDtwaHlkZXYsIHRwLSZndDttYWNfdmVyc2lvbik7CiAKIAlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDs9IFJUTF9HSUdBX01BQ19WRVJfMDYpIHsKQEAgLTI1NTIsOSAmIzQzOzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCSAgICB0cC0mZ3Q7cGNpX2Rldi0mZ3Q7c3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApCiAJCXBoeV93cml0ZV9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7CiAKLQlpZiAodHAtJmd0O3NmcF9tb2RlKQotCQlydGxfc2ZwX2luaXQodHApOwotCiAJLyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqLwogCXBoeV9zcGVlZF91cCh0cC0mZ3Q7cGh5ZGV2KTsKIApAQCAtMjY1NywxNSAmIzQzOzI3NTIsNiBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJaWYgKHBjaV9pc19wY2llKHRwLSZndDtwY2lfZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzdXBwb3J0c19nbWlpKQogCQlwY2llX3NldF9yZWFkcnEodHAtJmd0O3BjaV9kZXYsIHJlYWRycSk7Ci0KLQkvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqLwotCWlmIChqdW1ibykgewotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJcGh5X3N0YXJ0X2FuZWcodHAtJmd0O3BoeWRldik7Ci0JfQogfQogCiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpCkBAIC0yNzgwLDcgJiM0MzsyODY2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHsKLQkJcGh5X3NwZWVkX2Rvd24odHAtJmd0O3BoeWRldiwgZmFsc2UpOwomIzQzOwkJcGh5bGlua19zcGVlZF9kb3duKHRwLSZndDtwaHlsaW5rLCBmYWxzZSk7CiAJCXJ0bF93b2xfZW5hYmxlX3J4KHRwKTsKIAl9CiB9CkBAIC0yODMyLDYgJiM0MzsyOTE4LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCAweDdjLCB2YWwpOwogfQogCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5bGlua19taWlfaW9jdGwodHAtJmd0O3BoeWxpbmssIGlmciwgY21kKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDsKQEAgLTMwOTgsOCAmIzQzOzMxOTQsMjMgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RmMiwgMHg5MDAzKTsKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pOwogCQlicmVhazsKLQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pOwogCQlSVExfVzgodHAsIENPTUJPX0xUUl9FWFRFTkQsIFJUTF9SOCh0cCwgQ09NQk9fTFRSX0VYVEVORCkgfCBDT01CT19MVFJfRVhURU5EX0VOKTsKIAkJZmFsbHRocm91Z2g7CkBAIC0zMTE5LDYgJiM0MzszMjMwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJfQogCS8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7CiYjNDM7CXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBTRU5EX0xUUl9NU0csIDB4MDAwMCwgTFRSX01TR19FTik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQpAQCAtMzE1Miw2ICYjNDM7MzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQogCQlydGxfZW5hYmxlX2x0cih0cCk7CiAJCXN3aXRjaCAodHAtJmd0O21hY192ZXJzaW9uKSB7CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKJiM0MzsJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6CiAJCQkvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi8KIAkJCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7CkBAIC0zMTY0LDYgJiM0MzszMjc3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfSBlbHNlIHsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7CiAJCQlicmVhazsKQEAgLTM2NTcsNiAmIzQzOzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LSZndDtkZXZmbik7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LSZndDtidXM7CiYjNDM7CWludCBmdW5jLCBwb3M7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CiYjNDM7CWZvciAoZnVuYyA9IDI7IGZ1bmMgJmx0OyA4OyBmdW5jJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IGRldmZuID0gUENJX0RFVkZOKHNsb3QsIGZ1bmMpOwomIzQzOwomIzQzOwkJcG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApOwomIzQzOwkJaWYgKHBvcykgewomIzQzOwkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsICZhbXA7dmFsKTsKJiM0MzsKJiM0MzsJCQlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pOwomIzQzOwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCB2YWwpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7CiYjNDM7CQlpZiAocG9zKSB7CiYjNDM7CQkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwkJCWlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsICZhbXA7PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKJiM0MzsJCQl2YWwgfD0gUENJX0QzaG90OwomIzQzOwkJCXZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOwomIzQzOwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCB2YWwpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHsKQEAgLTM2OTMsMTIgJiM0MzszODQzLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJcnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTsKIAotCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKLQlpZiAocmdfc2F3X2NudCAmZ3Q7IDApIHsKLQkJdTE2IHN3X2NudF8xbXNfaW5pOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikgewomIzQzOwkJcmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MGM0MiwgMHgxMykgJmFtcDsgMHgzZmZmOwomIzQzOwkJaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7CiYjNDM7CQkJdTE2IHN3X2NudF8xbXNfaW5pOwogCi0JCXN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgJmFtcDsgMHgwZmZmOwotCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKJiM0MzsJCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCX0KIAl9CiAKIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7CkBAIC00MTM5LDEyICYjNDM7NDI5MSwyNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKQogc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlib29sIGp1bWJvX2JlZm9yZSA9IGRldi0mZ3Q7bXR1ICZndDsgRVRIX0RBVEFfTEVOOwomIzQzOwlib29sIGp1bWJvX2FmdGVyID0gbmV3X210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKIAogCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG5ld19tdHUpOwogCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAlydGxfanVtYm9fY29uZmlnKHRwKTsKIAlydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApOwogCiYjNDM7CWlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzOwomIzQzOwomIzQzOwkJaWYgKGp1bWJvX2FmdGVyKQomIzQzOwkJCWNhcHMgJmFtcDs9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwomIzQzOwkJcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC0mZ3Q7cGh5bGluaywgY2Fwcyk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2OSw4ICYjNDM7NTAzNCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpCi0JCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwkJCXBoeWxpbmtfbWFjX2NoYW5nZSh0cC0mZ3Q7cGh5bGluaywKJiM0MzsJCQkJCSAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSAmYW1wOyBMaW5rU3RhdHVzKSk7CiYjNDM7CX0KIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7CiAJbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKQEAgLTQ5MzAsOSAmIzQzOzUxMDAsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIHsKLQlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJLyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovCkBAIC00OTYzLDQwICYjNDM7NTEzMCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7Ci0JCXJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7Ci0JCXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC0mZ3Q7cGh5ZGV2LSZndDtlbmFibGVfdHhfbHBpKTsKLQkJcG1fcmVxdWVzdF9yZXN1bWUoZCk7Ci0JfSBlbHNlIHsKLQkJcG1fcnVudGltZV9pZGxlKGQpOwotCX0KLQotCXBoeV9wcmludF9zdGF0dXModHAtJmd0O3BoeWRldik7Ci19Ci0KIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLSZndDtwaHlkZXY7Ci0JcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwogCWludCByZXQ7CiAKLQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgotCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwotCi0JcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLSZndDtkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLAotCQkJCSBwaHlfbW9kZSk7Ci0JaWYgKHJldCkKJiM0MzsJcmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluaywgdHAtJmd0O3BoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIodHAtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKLQotCWlmICghdHAtJmd0O3N1cHBvcnRzX2dtaWkpCi0JCXBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTsKLQotCXBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7CiYjNDM7CX0KIAogCXJldHVybiAwOwogfQpAQCAtNTAwNywxMCAmIzQzOzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJLyogQ2xlYXIgYWxsIHRhc2sgZmxhZ3MgKi8KIAliaXRtYXBfemVybyh0cC0mZ3Q7d2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7CiAKLQlwaHlfc3RvcCh0cC0mZ3Q7cGh5ZGV2KTsKLQogCS8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQogCQlydGxfc2ZwX3Jlc2V0KHRwKTsKIAogCXJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTsKQEAgLTUwMzIsMTQgJiM0Mzs1MTcyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAogCXBjaV9zZXRfbWFzdGVyKHRwLSZndDtwY2lfZGV2KTsKLQlwaHlfaW5pdF9odyh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwotCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwogCW5hcGlfZW5hYmxlKCZhbXA7dHAtJmd0O25hcGkpOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKLQotCXBoeV9zdGFydCh0cC0mZ3Q7cGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDQ5LDEzICYjNDM7NTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXBoeWxpbmtfc3RvcCh0cC0mZ3Q7cGh5bGluayk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJ0bDgxNjlfZG93bih0cCk7CiAJcnRsODE2OV9yeF9jbGVhcih0cCk7CiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsMTEgJiM0Mzs1MjUxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCi0JcmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOwotCiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAJcnRsODE2OV91cCh0cCk7CiYjNDM7CXBoeWxpbmtfc3RhcnQodHAtJmd0O3BoeWxpbmspOwogCXJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiBvdXQ6CkBAIC01MjIxLDYgJiM0Mzs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiAJLyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqLwogCXJ0bF9pbml0X3J4Y2ZnKHRwKTsKIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJcmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTsKIH0KIApAQCAtNTI4OCw2ICYjNDM7NTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlyODE2OV9yZW1vdmVfbGVkcyh0cC0mZ3Q7bGVkcyk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKJiM0MzsJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAogCWlmICh0cC0mZ3Q7ZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpCiAJCXJ0bDgxNjhfZHJpdmVyX3N0b3AodHApOwpAQCAtNTMxMCw3ICYjNDM7NTQ1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAJLm5kb19maXhfZmVhdHVyZXMJPSBydGw4MTY5X2ZpeF9mZWF0dXJlcywKIAkubmRvX3NldF9mZWF0dXJlcwk9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsX3NldF9tYWNfYWRkcmVzcywKLQkubmRvX2V0aF9pb2N0bAkJPSBwaHlfZG9faW9jdGxfcnVubmluZywKJiM0MzsJLm5kb19ldGhfaW9jdGwJCT0gcnRsODE2OV9pb2N0bCwKIAkubmRvX3NldF9yeF9tb2RlCT0gcnRsX3NldF9yeF9tb2RlLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBydGw4MTY5X25ldHBvbGwsCkBAIC01NDc0LDE2ICYjNDM7NTYxOSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzM0LDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghdHAtJmd0O3Bjcy5vcHMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8CiYjNDM7CSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKQomIzQzOwkJcmV0dXJuICZhbXA7dHAtJmd0O3BjczsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHAtJmd0O21hY19vY3BfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTsKJiM0MzsJdmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7CiYjNDM7CQl1MTYgc3RhdDE7CiYjNDM7CiYjNDM7CQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlpZiAoIShzdGF0MSAmYW1wOyBNRElPX1NUQVQxX0xTVEFUVVMpKQomIzQzOwkJCXN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtsaW5rID0gISEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKTsKJiM0MzsJCWlmICghc3RhdGUtJmd0O2xpbmspCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwomIzQzOwkJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHsKJiM0MzsJCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjoKJiM0MzsJCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCXI4MTI3X3NmcF9pbml0XzFnKHRwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJbmV0ZGV2X2Vycih0cC0mZ3Q7ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTsKJiM0MzsKJiM0MzsJcnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLAomIzQzOwkubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLAomIzQzOwkubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93biwKJiM0MzsJLm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLAomIzQzOwkubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSwKJiM0MzsJLm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMKJiM0MzsJICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlCiYjNDM7CSAqLwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNjMpCiYjNDM7CQljYXBzIHw9IE1BQ18yNTAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl83MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJY2FwcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNhcHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7CiYjNDM7CS5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSwKJiM0MzsJLnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLAomIzQzOwkucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBsOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7CiYjNDM7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO3RwLSZndDtkZXYtJmd0O2RldjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7c2ZwX21vZGUpIHsKJiM0MzsJY2FzZSBSVExfU0ZQXzgxNjhfQUY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTI3X0FURjoKJiM0MzsJCXRwLSZndDtwY3Mub3BzID0gJmFtcDtyODE2OV9wY3Nfb3BzOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHwKJiM0MzsJCQkJCQkJICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7CiYjNDM7CQllbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpZiAodHAtJmd0O3N1cHBvcnRzX2dtaWkpCiYjNDM7CQkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDsgUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgomIzQzOwkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19zZXRfYml0KHBoeV9tb2RlLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMpCiYjNDM7CQlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNjAsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNiAmIzQzOzYxOTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCA1OWRmZTM1YWZhNTRmYy4uOWU5Y2Q3OTMwMWQ2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwpAQCAtMTgyOCw2ICYjNDM7MTgyOCw5MyBAQCBpbnQgcGh5bGlua19zZXRfZml4ZWRfbGluayhzdHJ1Y3QgcGh5bGluayAqcGwsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTsKIAomIzQzOy8qKgomIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UKJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpCiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGEgTUFDIGRyaXZlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgaXRzIHBhdXNlIHN0YXRlLAomIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS4KJiM0MzsgKiBJdCByZWNhbGN1bGF0ZXMgc3VwcG9ydGVkIGxpbmsgbW9kZXMgYW5kIHRyaWdnZXJzIHJlbmVnb3RpYXRpb24gaWYgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlLCBjYXBzX2FkZGVkLCBjYXBzX3JlbW92ZWQ7CiYjNDM7CWJvb2wgcGF1c2VfYWR2LCBhc3ltX2FkdjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKG1hY19wYXVzZSAmYW1wOyB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSkpIHsKJiM0MzsJCXBoeWxpbmtfZXJyKHBsLCAmIzM0O0F0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlvbGRfcGF1c2UgPSBwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzICZhbXA7IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwljYXBzX2FkZGVkID0gbWFjX3BhdXNlICZhbXA7IH5vbGRfcGF1c2U7CiYjNDM7CWNhcHNfcmVtb3ZlZCA9IG9sZF9wYXVzZSAmYW1wOyB+bWFjX3BhdXNlOwomIzQzOwomIzQzOwlpZiAoIWNhcHNfYWRkZWQgJmFtcDsmYW1wOyAhY2Fwc19yZW1vdmVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJcGwtJmd0O2NvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyAmYW1wOz0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwlwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTsKJiM0MzsKJiM0MzsJaWYgKGNhcHNfcmVtb3ZlZCAmYW1wOyBNQUNfU1lNX1BBVVNFKQomIzQzOwkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CWlmIChjYXBzX3JlbW92ZWQgJmFtcDsgTUFDX0FTWU1fUEFVU0UpCiYjNDM7CQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlsaW5rbW9kZV9hbmQoY29uZmlnLSZndDthZHZlcnRpc2luZywgY29uZmlnLSZndDthZHZlcnRpc2luZywgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CiYjNDM7CWlmIChjYXBzX2FkZGVkICZhbXA7IE1BQ19TWU1fUEFVU0UpIHsKJiM0MzsJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsJCWlmIChwbC0mZ3Q7cGh5ZGV2ICZhbXA7JmFtcDsgIXBoeWxpbmtfdGVzdChwbC0mZ3Q7cGh5ZGV2LSZndDtzdXBwb3J0ZWQsIFBhdXNlKSkKJiM0MzsJCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsJfQomIzQzOwlpZiAoY2Fwc19hZGRlZCAmYW1wOyBNQUNfQVNZTV9QQVVTRSkgewomIzQzOwkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CQlpZiAocGwtJmd0O3BoeWRldiAmYW1wOyZhbXA7ICFwaHlsaW5rX3Rlc3QocGwtJmd0O3BoeWRldi0mZ3Q7c3VwcG9ydGVkLCBBc3ltX1BhdXNlKSkKJiM0MzsJCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLSZndDtzdXBwb3J0ZWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxpbmttb2RlX2FuZChjb25maWctJmd0O2FkdmVydGlzaW5nLCBjb25maWctJmd0O2FkdmVydGlzaW5nLCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJaWYgKGNvbmZpZy0mZ3Q7cGF1c2UgJmFtcDsgTUxPX1BBVVNFX0FOKSB7CiYjNDM7CQlpZiAocGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIFBhdXNlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNvbmZpZy0mZ3Q7cGF1c2UgJmFtcDsgTUxPX1BBVVNFX1JYKSAmYW1wOyZhbXA7IChjb25maWctJmd0O3BhdXNlICZhbXA7IE1MT19QQVVTRV9UWCkpCiYjNDM7CQkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcpOwomIzQzOwomIzQzOwkJaWYgKHBoeWxpbmtfdGVzdChwbC0mZ3Q7c3VwcG9ydGVkLCBBc3ltX1BhdXNlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKChjb25maWctJmd0O3BhdXNlICZhbXA7IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLSZndDtwYXVzZSAmYW1wOyBNTE9fUEFVU0VfVFgpKSkKJiM0MzsJCQlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBjb25maWctJmd0O2FkdmVydGlzaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtwaHlkZXYpCiYjNDM7CQlwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKHBsLSZndDtwaHlkZXYpIHsKJiM0MzsJCXBhdXNlX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwKJiM0MzsJCQkJCSAgICAgIGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcpOwomIzQzOwkJYXN5bV9hZHYgPSBsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwKJiM0MzsJCQkJCSAgICAgY29uZmlnLSZndDthZHZlcnRpc2luZyk7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CQlsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwKJiM0MzsJCQkJIHBsLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nLCBwYXVzZV9hZHYpOwomIzQzOwkJbGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwKJiM0MzsJCQkJIHBsLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nLCBhc3ltX2Fkdik7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwbC0mZ3Q7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCXBoeV9zdGFydF9hbmVnKHBsLSZndDtwaHlkZXYpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpOwomIzQzOwogLyoqCiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZQogICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgJmFtcDtzdHJ1Y3QgcGh5bGlua19jb25maWcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKaW5kZXggYjY1ZDBmNWZhMWEwMTQuLjQ3MjFiYTA3MWNiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwpAQCAtMTcsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19jaG9pY2VzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bmV0L3BoeS9yZWFsdGVrX3BoeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cmVhbHRlay5oJiMzNDsKQEAgLTI2NDYsNDUgJiM0MzsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsCi0JCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwotCi0JLyogc2V0IGRlZmF1bHQgbW9kZSAqLwotCXBoeWRldi0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwMDsKLQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwotCi0JcGh5ZGV2LSZndDtwb3J0ID0gUE9SVF9GSUJSRTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlpbnQgdmFsLCBlcnI7Ci0KLQllcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFwaHlkZXYtJmd0O2xpbmspCi0JCXJldHVybiAwOwotCi0JdmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpOwotCWlmICh2YWwgJmx0OyAwKQotCQlyZXR1cm4gdmFsOwotCi0JcnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMDA4MjAxKSwKQEAgLTI5MzQsMjAgJiM0MzsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0gewogCQkud3JpdGVfcGFnZQk9IHJ0bDgyMXhfd3JpdGVfcGFnZSwKIAkJLnJlYWRfbW1kCT0gcnRsODIyeF9yZWFkX21tZCwKIAkJLndyaXRlX21tZAk9IHJ0bDgyMnhfd3JpdGVfbW1kLAotCX0sIHsKLQkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9SVExfRFVNTVlfU0ZQKSwKLQkJLm5hbWUJCT0gJiMzNDtSZWFsdGVrIFNGUCBQSFkgTW9kZSYjMzQ7LAotCQkuZmxhZ3MJCT0gUEhZX0lTX0lOVEVSTkFMLAotCQkucHJvYmUJCT0gcnRsODIyeF9wcm9iZSwKLQkJLmdldF9mZWF0dXJlcwk9IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzLAotCQkuY29uZmlnX2FuZWcJPSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLAotCQkucmVhZF9zdGF0dXMJPSBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzLAotCQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAotCQkucmVzdW1lCQk9IHJ0bGdlbl9yZXN1bWUsCi0JCS5yZWFkX3BhZ2UJPSBydGw4MjF4X3JlYWRfcGFnZSwKLQkJLndyaXRlX3BhZ2UJPSBydGw4MjF4X3dyaXRlX3BhZ2UsCi0JCS5yZWFkX21tZAk9IHJ0bDgyMnhfcmVhZF9tbWQsCi0JCS53cml0ZV9tbWQJPSBydGw4MjJ4X3dyaXRlX21tZCwKIAl9LCB7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMWNjYWQwKSwKIAkJLm5hbWUJCT0gJiMzNDtSVEw4MjI0IDIuNUdicHMgUEhZJiMzNDssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oCmluZGV4IDJiYzBkYjNkNTJhYzhkLi5lM2M3ODIyMTAwYWJhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7CiAKIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTsKIAomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4M2JjMWIwNjU5Y2QuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsNyAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLSNpZm5kZWYgX1JFQUxURUtfUEhZX0gKLSNkZWZpbmUgX1JFQUxURUtfUEhZX0gKLQotI2RlZmluZQlQSFlfSURfUlRMX0RVTU1ZX1NGUAkweDAwMWNjYmZmCi0KLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogcjgxNjkgRHJpdmVyIGFuZCBwaHlsaW5rIEludGVncmF0aW9uKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCByZWZhY3RvcnMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSBwaHlsaW5rLiBUaGF0IG1lYW5zIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGRyaXZlciBpdHNlbGYgYW5kIHRoZSBwaHlsaW5rIGNvcmUsIHdoaWNoLCBmb3IgYSBuZXR3b3JraW5nIGV4cGVydCBsaWtlIG15c2VsZiwgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiAgVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgcG90ZW50aWFsbHkgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogcmVhY2hhYmlsaXR5LiBUaGUgcjgxNjkgZHJpdmVyIGlzIGZvciBSZWFsdGVrIFBDSSBFdGhlcm5ldCBhZGFwdGVycy4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFFFTVUgaXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgbWlnaHQgZW11bGF0ZSBgcnRsODEzOWAsIGJ1dCBkb2VzIGl0IHN1cHBvcnQgYHJ0bDgxNjlgIGRpcmVjdGx5PyBBIHF1aWNrIGNoZWNrIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb25maXJtcy4uLiBubywgbmF0aXZlbHksIGl0IGRvZXNuJiMzOTt0LiBIb3dldmVyLCB0aGUgYHN5el9wY2lfZGV2aWNlYCBwcmltaXRpdmUgaW4gc3l6a2FsbGVyIGlzIG15IHNhdmluZyBncmFjZS4gVGhpcyBwc2V1ZG8tZGV2aWNlIGFsbG93cyB1cyB0byBmdXp6ICphbnkqIFBDSSBkcml2ZXIgYnkgZW11bGF0aW5nIHRoZSBQQ0kgZGV2aWNlIGl0c2VsZi4gRXhjZWxsZW50LiBUaGlzIG1lYW5zIHRoZSByODE2OSBpcyBpbmRlZWQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4KClRoaXMgYHBoeWxpbmsuY2AgbW9kaWZpY2F0aW9uLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AsIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBQaHlsaW5rIGlzIGEgY2VudHJhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgc28gY2hhbmdlcyB0aGVyZSBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyB1c2VkIGJ5IG1hbnkgZHJpdmVycywgYW5kIHRoYXQgbmV3IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyByZWFjaGFibGUgLSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAuIEdvb2QuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlJiMzOTtsbCBiZSBsb29raW5nIGF0IGBDT05GSUdfUjgxNjlgICh3aGljaCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCkgYW5kIGBDT05GSUdfUENJYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX1I4MTY5YCBkZXBlbmRzIG9uIGBQQ0lgIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIENvbmZpcm1lZC4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cy4gSW4gYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLiAgVGhlbiwgaW4gdGhlIFJlYWx0ZWsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgKSwgd2UgaGF2ZSBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYWxvbmcgd2l0aCBhIHdob2xlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQsIGxpa2UgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgdGhlIFNEUyBhbmQgU0ZQIGZ1bmN0aW9ucy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI5MT1zdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MzA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NDMxMDpcdFx0cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC1cdTAwM2VwaHlsaW5rLCBjYXBzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQzMTEtXHR9XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKCkgLSBEeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzMtICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzktICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NDA6dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NDEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNS19XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5MTY6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5MTctXG4tLVxuaW5jbHVkZS9saW51eC9waHlsaW5rLmg9ODQzPXZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcbmluY2x1ZGUvbGludXgvcGh5bGluay5oLTg0NC1cbmluY2x1ZGUvbGludXgvcGh5bGluay5oOjg0NTp2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG5pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaC04NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldHdvcmtpbmcgUEhZIGFuZCBSZWFsdGVrIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIHdheSB3ZSBoYW5kbGUgUEhZIGxpbmsgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBpbnRlZ3JhdGluZyBgcGh5bGlua2Agd2l0aCB0aGUgYHI4MTY5YCBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgdGhpcyBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZXMgdGhpcyBkZWVwIGludG8gdGhlIG5ldHdvcmsgc3RhY2ssIHRvdWNoaW5nIGJvdGggY29yZSBQSFkgZnVuY3Rpb25hbGl0eSBhbmQgYSB3aWRlbHkgdXNlZCBkcml2ZXIgbGlrZSBgcjgxNjlgLCBkZXNlcnZlIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBuZWVkIGltbWVkaWF0ZSBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgdGhlIGNvcmUgTUFDL1BIWSBpbnRlcmFjdGlvbiBmdW5jdGlvbnM6CgoqICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgOiBUaGlzIGlzIG9idmlvdXNseSB0aGUgY2VudHJhbCBuZXcgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGEgcHJpb3JpdHkuCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YDogTVRVIGNoYW5nZXMgY2FuIHJldmVhbCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGluIG5ldHdvcmtpbmcuCiogICBgcnRsX2luaXRfcGh5bGlua2A6IFNpbmNlIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHBoeWxpbmsgZnJhbWV3b3JrLCBkZWZpbml0ZWx5IG5lZWRzIGEgbG9vay4KKiAgIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYDogUEhZIENvbnRyb2wgU2lnbmFscy4KKiAgIGBydGxfbWFjX2xpbmtfdXBgIGFuZCBgcnRsX21hY19saW5rX2Rvd25gOiBMaW5rIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuCiogICBgcnRsX21hY19zZWxlY3RfcGNzYDogQW5vdGhlciBQQ1MgZnVuY3Rpb24sIG1ha2luZyBkZWNpc2lvbnMuCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIHJldmlld2VkLgoqICAgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYW5kIGByODEyN19zZHNfbW9kaWZ5YDogVGhlc2UgcmVsYXRlZCB0byBTaGFkb3cgRGF0YSBTdHJ1Y3R1cmUgYW5kIHNob3VsZCBiZSBmdXp6LXRlc3RlZC4KKiAgIGByODEyN19zZnBfaW5pdF8xZ2AgYW5kIGByODEyN19zZnBfaW5pdF8xMGdgOiBUaGVzZSBhcmUgd29ydGggY2hlY2tpbmcgaW4gdGhlIGNvbnRleHQgb2YgU0ZQLCB3aGljaCBjb3VsZCBoYXZlIHNvbWUgZWRnZSBjYXNlcy4KKiAgIGBydGxfZ2V0X3NmcF9tb2RlYDogQWxzbyByZWxhdGVkIHRvIFNGUCBjb25maWd1cmF0aW9ucy4KKiAgIGBydGxfaXNfODExNmFmYDogRmVhdHVyZSBpZGVudGlmaWNhdGlvbi4KCldlIGFsc28gaGF2ZSBhIGNvdXBsZSBvZiBjb25maWd1cmF0aW9uczogYFI4MTY5YCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgUEhZTElOS2AgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzZXQgdXAgbXkgZnV6emluZyBoYXJuZXNzZXMsIGFuZCBzdGFydCBsb29raW5nIGZvciB0aGUgd2VhayBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBIWUxJTksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTQwCgkJCQkJCQlvdXRwdXQ6IDM3MAoJCQkJCQkJdGhvdWdodHM6IDEwMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFBoeWxpbmsgRm9jdXMgZm9yIHRoZSBSODE2OSBEcml2ZXIqKgoKT2theSwgc28gYFBIWUxJTktgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBidXQgdGhlIGBSODE2OWAgZHJpdmVyIGFjdHVhbGx5IHNlbGVjdHMgaXQuIFRoZXJlZm9yZSwgd2Ugb25seSBuZWVkIHRvIGVuYWJsZSBgUjgxNjlgLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgYXMgcHJpbWUgY2FuZGlkYXRlczogYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYHI4MTI3X3Nkc19tb2RpZnlgLCBgcjgxMjdfc2ZwX2luaXRfMWdgLCBgcjgxMjdfc2ZwX2luaXRfMTBnYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBhbmQgYHJ0bF9pc184MTE2YWZgLiBUaG9zZSBzaG91bGQgY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB0aGUgcGh5bGluayBpbnRlZ3JhdGlvbiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIE1BQy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gTGV0IG1lIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MuIEFoLCB0aGUgYHJ0bF9tYWNfY29uZmlnYCBmdW5jdGlvbiBpcyBlbXB0eS4gQW5kIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBhcmUgYWxzbyBlbXB0eS4gIEl0JiMzOTtzIGFsd2F5cyB3b3J0aCB2ZXJpZnlpbmcgdGhhdCB0aGVzZSBhcmUgYWN0dWFsbHkgZG9pbmcgc29tZXRoaW5nIG9mIGludGVyZXN0LCBhbmQgYmVjYXVzZSB0aGV5JiMzOTtyZSBlbXB0eSwgdGhleSYjMzk7cmUgbm90LiAgV2UgY2FuIHNhZmVseSBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgZm9yIGFueSBvdGhlciBwb3RlbnRpYWwgcmVsZXZhbnQgZnVuY3Rpb25zLiBPa2F5LCBoZXJlIGFyZSBhIGZldyBtb3JlOiBgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnNgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIGBydGw4MTY5X2lvY3RsYC4gVGhvc2Ugc2VlbSByZWxldmFudCwgZXNwZWNpYWxseSBga3NldHRpbmdzYCwgc28gSSYjMzk7bGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QuIFRoZXkgZGVmaW5pdGVseSBzaG91bGQgYmUgaW5jbHVkZWQsIGZvciB0aGV5IHdvdWxkIHByb2JhYmx5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGxpbmsgc3RhdGUgb2YgdGhlIGRldmljZS4KClNvLCB0aGUgdXBkYXRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXMgd2hhdCBJIGhhdmUgbm93LiBJJiMzOTtsbCBpbmNsdWRlIGl0IHdpdGggdGhlIHJlYXNvbmluZyB0aGF0IHRoaXMgcGF0Y2ggaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHI4MTY5IGRyaXZlciYjMzk7cyBwaHlsaW5rIEFQSSB1c2FnZSwgYW5kIHRoZSBuZXcgcGF1c2UgY2FwYWJpbGl0eSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGxfaW5pdF9waHlsaW5rJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19nZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua19kb3duJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2Rpc2FibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZW5hYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc193cml0ZSYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfbW9kaWZ5JiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzFnJiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzEwZyYjMzQ7LAogICAgJiMzNDtydGxfZ2V0X3NmcF9tb2RlJiMzNDssCiAgICAmIzM0O3J0bF9pc184MTE2YWYmIzM0OywKICAgICYjMzQ7cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9ud2F5X3Jlc2V0JiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGxfaW5pdF9waHlsaW5rJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19nZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua19kb3duJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2Rpc2FibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZW5hYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc193cml0ZSYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfbW9kaWZ5JiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzFnJiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzEwZyYjMzQ7LAogICAgJiMzNDtydGxfZ2V0X3NmcF9tb2RlJiMzNDssCiAgICAmIzM0O3J0bF9pc184MTE2YWYmIzM0OywKICAgICYjMzQ7cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9ud2F5X3Jlc2V0JiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU4LjkwNzEyNzc5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTYwMTE0NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc1wiLFxuICAgIFwicnRsODE2OV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJydGxfaW5pdF9waHlsaW5rXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfcGNzX2dldF9zdGF0ZVwiLFxuICAgIFwicnRsX21hY19saW5rX3VwXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfZG93blwiLFxuICAgIFwicnRsX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJydGxfbWFjX2Rpc2FibGVfdHhfbHBpXCIsXG4gICAgXCJydGxfbWFjX2VuYWJsZV90eF9scGlcIixcbiAgICBcInJ0bDgxNjlfc2RzX3JlYWRcIixcbiAgICBcInI4MTI3X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfd3JpdGVcIixcbiAgICBcInI4MTI3X3Nkc19tb2RpZnlcIixcbiAgICBcInI4MTI3X3NmcF9pbml0XzFnXCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xMGdcIixcbiAgICBcInJ0bF9nZXRfc2ZwX21vZGVcIixcbiAgICBcInJ0bF9pc184MTE2YWZcIixcbiAgICBcInJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zXCIsXG4gICAgXCJydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfbndheV9yZXNldFwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU4LjkwNzEzMzAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTQxNzAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDU6MzM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjU4MThhOWE1MDBhODZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xcbkBAIC04Niw4ICs4Niw4IEBAIGNvbmZpZyBSODE2OVxcbiBcXHRkZXBlbmRzIG9uIFBDSVxcbiBcXHRzZWxlY3QgRldfTE9BREVSXFxuIFxcdHNlbGVjdCBDUkMzMlxcbi1cXHRzZWxlY3QgUEhZTElCXFxuIFxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbitcXHRzZWxlY3QgUEhZTElOS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cXG4gXFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLmMwYjBjMmJjNWE0ODU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjYsMTIgKzI2LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeWxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicjgxNjkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInI4MTY5X2Zpcm13YXJlLmhcXFwiXFxuQEAgLTk2LDYgKzk2LDI1IEBAXFxuICNkZWZpbmUgSlVNQk9fOUtcXHQoOSAqIFNaXzFLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiAjZGVmaW5lIEpVTUJPXzE2S1xcdChTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXFxuIFxcbisjZGVmaW5lIFI4MTI3X1NEU19DTURcXHRcXHQweDIzNDhcXG4rI2RlZmluZSBSODEyN19TRFNfQUREUlxcdFxcdDB4MjM0YVxcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXFx0MHgyMzRjXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfT1VUXFx0MHgyMzRlXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDXFx0QklUKDApXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVxcdEJJVCgxKVxcbisjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUdcXHQweGViMTBcXG4rI2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcXHRcXHQweGViMGVcXG4rI2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHXFx0MHhlYjE0XFxuKyNkZWZpbmUgU0RTX0NNRF9SRUFEXFx0XFx0MHgwMDAxXFxuKyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRVxcdDB4NDBcXG4rI2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXFx0MHgwMDgwXFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcXHRcXHQweGRjMDBcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXFx0MHgwMDc4XFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXFx0MHgwMDMwXFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRFxcdFxcdDB4ZDAwNlxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1xcdDB4MDBmZlxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGXFx0MHgwMDAwXFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xcbiBcXHR1MzIgbWFzaztcXG4gXFx0dTMyIHZhbDtcXG5AQCAtMzM0LDExICszNTMsMTMgQEAgZW51bSBydGxfcmVnaXN0ZXJzIHtcXG4gXFx0QUxEUFNfTFRSXFx0PSAweGUwYTIsXFxuIFxcdExUUl9PQkZGX0xPQ0tcXHQ9IDB4ZTAzMixcXG4gXFx0TFRSX1NOT09QXFx0PSAweGUwMzQsXFxuK1xcdFNFTkRfTFRSX01TR1xcdD0gMHhlMDM4LFxcbiBcXG4gI2RlZmluZSBBTERQU19MVFJfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOXFx0XFx0QklUKDApXFxuICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU5cXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgTFRSX1NOT09QX0VOXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgTFRSX01TR19FTlxcdFxcdFxcdEJJVCgwKVxcbiB9O1xcbiBcXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcXG5AQCAtNzI4LDYgKzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xcbiBcXHRSVExfREFTSF8yNV9CUCxcXG4gfTtcXG4gXFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcXG4rXFx0UlRMX1NGUF9OT05FLFxcbitcXHRSVExfU0ZQXzgxNjhfQUYsXFxuK1xcdFJUTF9TRlBfODEyN19BVEYsXFxuK307XFxuK1xcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XFx0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbkBAIC03MzYsNiArNzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xcbiBcXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xcbiBcXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xcbitcXHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcXG4gXFx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xcbiBcXHR1MzIgZGlydHlfdHg7XFxuQEAgLTc1MCw2ICs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dTMyIGlycV9tYXNrO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuK1xcdGludCBzcGVlZDtcXG4gXFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xcbkBAIC03NjIsNyArNzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcXG4gXFx0dW5zaWduZWQgYXNwbV9tYW5hZ2VhYmxlOjE7XFxuIFxcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xcbi1cXHRib29sIHNmcF9tb2RlOjE7XFxuIFxcdGRtYV9hZGRyX3QgY291bnRlcnNfcGh5c19hZGRyO1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xcbkBAIC03NzQsNiArODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuIFxcbiBcXHR1MzIgb2NwX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbitcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XFxuIH07XFxuIFxcbiB0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5AQCAtMTEyOCwxMCArMTE1OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxcbiBcXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlIFxcdTAwMjZcXHUwMDI2IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSArIDIgKiBNSUlfUEhZU0lEMikpXFxuLVxcdFxcdHJldHVybiBQSFlfSURfUlRMX0RVTU1ZX1NGUCBcXHUwMDI2IDB4ZmZmZjtcXG4tXFxuIFxcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXFx1MDAzY1xcdTAwM2MgMTUpO1xcbiBcXG4gXFx0cmV0dXJuIHJ0bF9sb29wX3dhaXRfaGlnaCh0cCwgXFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cXG5AQCAtMTE5OSw2ICsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcXG4gfVxcbiBcXG4rREVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpXFxuK3tcXG4rXFx0cmV0dXJuIFJUTF9SMTYodHAsIFI4MTI3X1NEU19DTUQpIFxcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxcbit7XFxuK1xcdHUxNiBhZGRyID0gKGluZGV4IFxcdTAwM2NcXHUwMDNjIDExKSB8IChwYWdlIFxcdTAwM2NcXHUwMDNjIDUpIHwgcmVnO1xcbitcXG4rXFx0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xcbitcXG4rXFx0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcXG4rXFx0XFx0cmV0dXJuIFJUTF9SMTYodHAsIFI4MTI3X1NEU19EQVRBX09VVCk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXFxuK1xcdFxcdFxcdCAgIHUxNiByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0dTE2IGFkZHIgPSAoaW5kZXggXFx1MDAzY1xcdTAwM2MgMTEpIHwgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgNSkgfCByZWc7XFxuK1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcXG4rXFx0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMgfCBSODEyN19TRFNfQ01EX1dFKTtcXG4rXFxuK1xcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXFxuK1xcdFxcdFxcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR2YWwgPSAodmFsIFxcdTAwMjYgfmNsZWFybWFzaykgfCBzZXRtYXNrO1xcbitcXHRyODEyN19zZHNfd3JpdGUodHAsIGluZGV4LCBwYWdlLCByZWcsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyODEyN19zZnBfc2RzX3BoeV9yZXNldCh0cCk7XFxuK1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAxLCAzMSwgMCwgQklUKDMpKTtcXG4rXFx0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcXG4rXFx0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMCwgIDQsIDAsIEJJVCgyKSk7XFxuK1xcbitcXHRSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7XFxuK1xcdFJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgXFx1MDAyNiB+MHgzMDAzKSB8IDB4MDAwMik7XFxuK1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7XFxuK1xcbitcXHR2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdGludCB2YWw7XFxuQEAgLTEyMTcsMTIgKzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbi17XFxuLVxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4tXFx0XFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgcnRsX3NmcF9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuQEAgLTEyODMsNiArMTM3MSwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXFxuIFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIHRwLVxcdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHJldHVybiB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXFx1MDAyNiBSVExfUEtHX0RFVEVDVF9NQVNLKSA9PVxcbitcXHRcXHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XFxuK1xcdFxcdFJUTF9JTlRfSFdfSURfODExNkFGO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcXG4ge1xcbiBcXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cXHUwMDNlb2NwX2Jhc2UgKyByZWcpO1xcbkBAIC0xNTc4LDYgKzE2NzUsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcXG4rXFxuK1xcdFxcdGlmICgoZGF0YSBcXHUwMDI2IDB4ZmYpID09IDB4MDcpXFxuK1xcdFxcdFxcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xcbitcXHR9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7XFxuK1xcdFxcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBSVExfU0ZQX05PTkU7XFxuK31cXG4rXFxuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG5AQCAtMTY3MywxNiArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJ0bF9wY2lfY29tbWl0KHRwKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxcbiBcXHQgICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuLVxcdFxcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDApIHtcXG4rXFx0XFx0fSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0xNjkyLDcgKzE4MDEsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcXG4gXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxcbiBcXHRcXHQgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMTcwMCw3ICsxODA5LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDNmKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM3KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMjA3NCwxMSArMjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XFxuIFxcbiBcXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG4rXFx0aWYgKHRwLVxcdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbiBcXHRcXHRyZXR1cm4gY2k7XFxuIFxcbiBcXHRmb3IgKDsgY2ktXFx1MDAzZXNwZWVkOyBjaSsrKSB7XFxuLVxcdFxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBjaS1cXHUwMDNlc3BlZWQpXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlc3BlZWQgPT0gY2ktXFx1MDAzZXNwZWVkKVxcbiBcXHRcXHRcXHRyZXR1cm4gY2k7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMzYsNyArMjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZDtcXG4rXFx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXFx1MDAzZXNwZWVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cXHUwMDNldHhfbHBpX3RpbWVyO1xcbiBcXG4gXFx0aWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbkBAIC0yMjU0LDcgKzIzNjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiBcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEpO1xcbitcXHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0yMjcwLDcgKzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiBcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzMDEsMTMgKzI0MTAsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcXG4tXFxuLVxcdHBoeV9nZXRfcGF1c2UodHAtXFx1MDAzZXBoeWRldiwgXFx1MDAyNnR4X3BhdXNlLCBcXHUwMDI2cnhfcGF1c2UpO1xcbiBcXG4tXFx0ZGF0YS1cXHUwMDNlYXV0b25lZyA9IHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWF1dG9uZWc7XFxuLVxcdGRhdGEtXFx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcXG4tXFx0ZGF0YS1cXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xcbitcXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjMxOCw5ICsyNDIyLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEtXFx1MDAzZXJ4X3BhdXNlLCBkYXRhLVxcdTAwM2V0eF9wYXVzZSk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjM4NiwzNCArMjQ4OCwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRsZTMyX3RvX2NwdSh0cC1cXHUwMDNlY291bnRlcnMtXFx1MDAzZXJ4X3Vua25vd25fb3Bjb2RlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4rc3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0aW50IGR1cGxleCA9IGNtZC1cXHUwMDNlYmFzZS5kdXBsZXg7XFxuLVxcdGludCBzcGVlZCA9IGNtZC1cXHUwMDNlYmFzZS5zcGVlZDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXNmcF9tb2RlKVxcbi1cXHRcXHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XFxuLVxcbi1cXHRpZiAoY21kLVxcdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuK31cXG4gXFxuLVxcdHBoeWRldi1cXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcXG4tXFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbi1cXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IGR1cGxleDtcXG4rc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4tXFx0cnRsX3NmcF9pbml0KHRwKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbit9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cXHUwMDNlcGh5bGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG5AQCAtMjQzMSwxMCArMjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4gXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbiBcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLVxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbitcXHQubndheV9yZXNldFxcdFxcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxcbiBcXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbiBcXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbi1cXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4gXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcXG4gXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXFxuQEAgLTI0OTksOSArMjU5NCwxMCBAQCB2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHR0cC1cXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xcbiBcXG4gXFx0XFx0LyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovXFxuLVxcdFxcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbi1cXHRcXHRcXHRcXHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdFxcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNTM4LDYgKzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXFx1MDAzZXBoeWRldiwgdHAtXFx1MDAzZW1hY192ZXJzaW9uKTtcXG4gXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xcbkBAIC0yNTUyLDkgKzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQgICAgdHAtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxcbiBcXHRcXHRwaHlfd3JpdGVfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xcbiBcXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4tXFx0XFx0cnRsX3NmcF9pbml0KHRwKTtcXG4tXFxuIFxcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cXG4gXFx0cGh5X3NwZWVkX3VwKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG5AQCAtMjY1NywxNSArMjc1Miw2IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBcXHRpZiAocGNpX2lzX3BjaWUodHAtXFx1MDAzZXBjaV9kZXYpIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbiBcXHRcXHRwY2llX3NldF9yZWFkcnEodHAtXFx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XFxuLVxcbi1cXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXFxuLVxcdGlmIChqdW1ibykge1xcbi1cXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcXG4tXFx0XFx0XFx0XFx0ICAgdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbi1cXHRcXHRwaHlfc3RhcnRfYW5lZyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0fVxcbiB9XFxuIFxcbiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpXFxuQEAgLTI3ODAsNyArMjg2Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xcbiBcXG4gXFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XFxuLVxcdFxcdHBoeV9zcGVlZF9kb3duKHRwLVxcdTAwM2VwaHlkZXYsIGZhbHNlKTtcXG4rXFx0XFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVxcdTAwM2VwaHlsaW5rLCBmYWxzZSk7XFxuIFxcdFxcdHJ0bF93b2xfZW5hYmxlX3J4KHRwKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTI4MzIsNiArMjkxOCwxNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gcGh5bGlua19taWlfaW9jdGwodHAtXFx1MDAzZXBoeWxpbmssIGlmciwgY21kKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XFxuQEAgLTMwOTgsOCArMzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xcbiBcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4ZTAyYywgMHgxODgwKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkOCwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkMiwgMHg4ODNjKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4ZTBhNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4gXFx0XFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0zMTE5LDYgKzMyMzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiBcXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcXG4rXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuQEAgLTMxNTIsNiArMzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHRcXHRydGxfZW5hYmxlX2x0cih0cCk7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XFxuQEAgLTMxNjQsNiArMzI3Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuK1xcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zNjU3LDYgKzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbitcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcGRldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZnVuYywgcG9zO1xcbitcXHR1MTYgdmFsO1xcbitcXG4rXFx0Zm9yIChmdW5jID0gMjsgZnVuYyBcXHUwMDNjIDg7IGZ1bmMrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XFxuK1xcbitcXHRcXHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7XFxuK1xcdFxcdGlmIChwb3MpIHtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcXHUwMDI2dmFsKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgfD0gKFBDSV9FWFBfTE5LQ1RMX0FTUE1DIHwgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKTtcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdmFsKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XFxuK1xcdFxcdGlmIChwb3MpIHtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCBcXHUwMDI2dmFsKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfRDNob3Q7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcXG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuIFxcbi1cXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcXHUwMDI2IDB4M2ZmZjtcXG4tXFx0aWYgKHJnX3Nhd19jbnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHUxNiBzd19jbnRfMW1zX2luaTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpIHtcXG4rXFx0XFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuK1xcdFxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuIFxcbi1cXHRcXHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFxcdTAwMjYgMHgwZmZmO1xcbi1cXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcXG4rXFx0XFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4rXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xcbkBAIC00MTM5LDEyICs0MjkxLDI1IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXFx1MDAzZSBFVEhfREFUQV9MRU47XFxuIFxcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzID0gdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XFxuK1xcbitcXHRcXHRpZiAoanVtYm9fYWZ0ZXIpXFxuK1xcdFxcdFxcdGNhcHMgXFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNhcHMgfD0gKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcbitcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAzNCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MTAwLDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUxMzAsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXFxuIFxcdGJpdG1hcF96ZXJvKHRwLVxcdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcXG4gXFxuLVxcdHBoeV9zdG9wKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4gXFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbiBcXHRcXHRydGxfc2ZwX3Jlc2V0KHRwKTtcXG4gXFxuIFxcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcXG5AQCAtNTAzMiwxNCArNTE3MiwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XFxuIFxcbiBcXHRwY2lfc2V0X21hc3Rlcih0cC1cXHUwMDNlcGNpX2Rldik7XFxuLVxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xcbitcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4gXFx0ZW5hYmxlX3dvcmsoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrKTtcXG4gXFx0cnRsX3Jlc2V0X3dvcmsodHApO1xcbi1cXG4tXFx0cGh5X3N0YXJ0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTA0OSwxMyArNTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbitcXHRwaHlsaW5rX3N0b3AodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuIFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbiBcXG4gXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbiBcXG4tXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbiBcXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbkBAIC01MTEyLDExICs1MjUxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuLVxcbitcXHRpZiAodHAtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XFxuK1xcdFxcdGlmIChyZXR2YWwpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbitcXHR9XFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbitcXHRwaHlsaW5rX3N0YXJ0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIG91dDpcXG5AQCAtNTIyMSw2ICs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIFxcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cXG4gXFx0cnRsX2luaXRfcnhjZmcodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC01Mjg4LDYgKzU0MzIsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXFx1MDAzZWxlZHMpO1xcbiBcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXFx1MDAzZWRldik7XFxuK1xcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG5AQCAtNTMxMCw3ICs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBydGxfc2V0X21hY19hZGRyZXNzLFxcbi1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXFxuK1xcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTY5X2lvY3RsLFxcbiBcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBydGxfc2V0X3J4X21vZGUsXFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiBcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gcnRsODE2OV9uZXRwb2xsLFxcbkBAIC01NDc0LDE2ICs1NjE5LDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyZXR1cm4gLUVVTkFUQ0g7XFxuIFxcdH1cXG4gXFxuLVxcdHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcXG4tXFx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxcbi1cXHRcXHRwaHlfc3VwcG9ydF9lZWUodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcbi1cXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuLVxcdFxcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVxcdTAwM2VwaHlkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcXG4tXFxuIFxcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cXG4gXFx0cGh5X3N1c3BlbmQodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC01NTk5LDYgKzU3MzQsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4rXFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XFxuK1xcbitcXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0aWYgKCF0cC1cXHUwMDNlcGNzLm9wcylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2dHAtXFx1MDAzZXBjcztcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XFxuK1xcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XFxuK1xcdFxcdHUxNiBzdGF0MTtcXG4rXFxuK1xcdFxcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xcbitcXG4rXFx0XFx0aWYgKCEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxcbitcXHRcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VsaW5rID0gISEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xcbitcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VsaW5rKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1MTYgYm1zciwgbHBhO1xcbitcXG4rXFx0XFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XFxuK1xcdFxcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcXG4rXFx0XFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcXG4rXFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIodHAtXFx1MDAzZWRldiwgXFxcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcXG4rXFx0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcXG4rXFx0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXFxuK1xcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcXG4rXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXFxuK1xcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFxuK1xcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXFxuK1xcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXFxuK1xcdCAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzI1MDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ181MDAwRkQ7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcXG4rXFxuK1xcdHJldHVybiBjYXBzO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xcbitcXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXFxuK1xcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcXG4rXFx0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2dHAtXFx1MDAzZWRldi1cXHUwMDNlZGV2O1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlc2ZwX21vZGUpIHtcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XFxuK1xcdFxcdHRwLVxcdTAwM2VwY3Mub3BzID0gXFx1MDAyNnI4MTY5X3Bjc19vcHM7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbitcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjIFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XFxuK1xcdFxcdFxcdFxcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcXG4rXFx0XFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVxcdTAwM2Vmd25vZGUsXFxuK1xcdFxcdFxcdCAgICBwaHlfbW9kZSwgXFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xcbitcXHRpZiAoSVNfRVJSKHBsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocGwpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmsgPSBwbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTY2Nyw2ICs2MDQzLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdFxcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XFxuIFxcdHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXFx1MDAzZW1hY192ZXJzaW9uO1xcbiBcXHR0cC1cXHUwMDNlZndfbmFtZSA9IGNoaXAtXFx1MDAzZWZ3X25hbWU7XFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuIFxcbiBcXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xcbiBcXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cXG5AQCAtNTY3OSwxMiArNjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR9XFxuIFxcdHRwLVxcdTAwM2Vhc3BtX21hbmFnZWFibGUgPSAhcmM7XFxuIFxcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuLVxcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGQwMDYpO1xcbi1cXG4tXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4tXFx0XFx0XFx0dHAtXFx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcXG4tXFx0fVxcbitcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG5AQCAtNTc4OCwxMyArNjE2MCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XFxuIFxcbi1cXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xcbitcXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XFxuK1xcdFxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0aWYgKHJjKVxcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgxNyw2ICs2MTk5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjllOWNkNzkzMDFkNjZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTE4MjgsNiArMTgyOCw5MyBAQCBpbnQgcGh5bGlua19zZXRfZml4ZWRfbGluayhzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zZXRfZml4ZWRfbGluayk7XFxuIFxcbisvKipcXG4rICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4rICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXFxuKyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlLCBjYXBzX2FkZGVkLCBjYXBzX3JlbW92ZWQ7XFxuK1xcdGJvb2wgcGF1c2VfYWR2LCBhc3ltX2FkdjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAobWFjX3BhdXNlIFxcdTAwMjYgfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpKSB7XFxuK1xcdFxcdHBoeWxpbmtfZXJyKHBsLCBcXFwiQXR0ZW1wdGVkIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBub24tcGF1c2UgTUFDIGNhcGFiaWxpdGllc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0b2xkX3BhdXNlID0gcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcXHUwMDI2IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xcbitcXHRjYXBzX2FkZGVkID0gbWFjX3BhdXNlIFxcdTAwMjYgfm9sZF9wYXVzZTtcXG4rXFx0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFxcdTAwMjYgfm1hY19wYXVzZTtcXG4rXFxuK1xcdGlmICghY2Fwc19hZGRlZCBcXHUwMDI2XFx1MDAyNiAhY2Fwc19yZW1vdmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwbC1cXHUwMDNlc3RhdGVfbXV0ZXgpO1xcbitcXG4rXFx0cGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcXHUwMDI2PSB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcdHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlO1xcbitcXG4rXFx0aWYgKGNhcHNfcmVtb3ZlZCBcXHUwMDI2IE1BQ19TWU1fUEFVU0UpXFxuK1xcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRpZiAoY2Fwc19yZW1vdmVkIFxcdTAwMjYgTUFDX0FTWU1fUEFVU0UpXFxuK1xcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRsaW5rbW9kZV9hbmQoY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRpZiAoY2Fwc19hZGRlZCBcXHUwMDI2IE1BQ19TWU1fUEFVU0UpIHtcXG4rXFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldiBcXHUwMDI2XFx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKVxcbitcXHRcXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0fVxcbitcXHRpZiAoY2Fwc19hZGRlZCBcXHUwMDI2IE1BQ19BU1lNX1BBVVNFKSB7XFxuK1xcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldiBcXHUwMDI2XFx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkpXFxuK1xcdFxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGxpbmttb2RlX2FuZChjb25maWctXFx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXFx1MDAzZWFkdmVydGlzaW5nLCBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZXBhdXNlIFxcdTAwMjYgTUxPX1BBVVNFX0FOKSB7XFxuK1xcdFxcdGlmIChwaHlsaW5rX3Rlc3QocGwtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoY29uZmlnLVxcdTAwM2VwYXVzZSBcXHUwMDI2IE1MT19QQVVTRV9SWCkgXFx1MDAyNlxcdTAwMjYgKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxcbitcXHRcXHRcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuK1xcbitcXHRcXHRpZiAocGh5bGlua190ZXN0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcXG4rXFx0XFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGwtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRwYXVzZV9hZHYgPSBsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbitcXHRcXHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbitcXHRcXHRcXHRcXHQgcGwtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlX2Fkdik7XFxuK1xcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXFxuK1xcdFxcdFxcdFxcdCBwbC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZywgYXN5bV9hZHYpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0cGh5X3N0YXJ0X2FuZWcocGwtXFx1MDAzZXBoeWRldik7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZVxcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uNDcyMWJhMDcxY2JiZTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicmVhbHRlay5oXFxcIlxcbkBAIC0yNjQ2LDQ1ICsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLXtcXG4tXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwMGJhc2VUX0Z1bGxfQklULFxcbi1cXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbi1cXG4tXFx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBvcnQgPSBQT1JUX0ZJQlJFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdGludCB2YWwsIGVycjtcXG4tXFxuLVxcdGVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpO1xcbi1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHZhbDtcXG4tXFxuLVxcdHJ0bGdlbl9kZWNvZGVfcGh5c3IocGh5ZGV2LCB2YWwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxcbkBAIC0yOTM0LDIwICsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQud3JpdGVfcGFnZVxcdD0gcnRsODIxeF93cml0ZV9wYWdlLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXFxuIFxcdFxcdC53cml0ZV9tbWRcXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxcbi1cXHR9LCB7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUmVhbHRlayBTRlAgUEhZIE1vZGVcXFwiLFxcbi1cXHRcXHQuZmxhZ3NcXHRcXHQ9IFBIWV9JU19JTlRFUk5BTCxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSBydGw4MjJ4X3Byb2JlLFxcbi1cXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gcnRsZ2VuX3Jlc3VtZSxcXG4tXFx0XFx0LnJlYWRfcGFnZVxcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5yZWFkX21tZFxcdD0gcnRsODIyeF9yZWFkX21tZCxcXG4tXFx0XFx0LndyaXRlX21tZFxcdD0gcnRsODIyeF93cml0ZV9tbWQsXFxuIFxcdH0sIHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLFxcbiBcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlJUTDgyMjQgMi41R2JwcyBQSFlcXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuaW5kZXggMmJjMGRiM2Q1MmFjOGQuLmUzYzc4MjIxMDBhYmE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcXG5AQCAtODQyLDQgKzg0Miw2IEBAIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19iZWdpbihzdHJ1Y3QgcGh5bGluayAqcGwpO1xcbiBcXG4gdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2VuZChzdHJ1Y3QgcGh5bGluayAqcGwpO1xcbiBcXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBkNjgzYmMxYjA2NTljZC4uMDAwMDAwMDAwMDAwMDBcXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw3ICswLDAgQEBcXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxcbi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9IXFxuLVxcbi0jZGVmaW5lXFx0UEhZX0lEX1JUTF9EVU1NWV9TRlBcXHQweDAwMWNjYmZmXFxuLVxcbi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6MzM6NTkuOTU5NTU2ODY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkwNzY3NTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3dyaXRlXCIsXG4gICAgXCJyODEyN19zZHNfbW9kaWZ5XCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xZ1wiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMTBnXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGxfaXNfODExNmFmXCIsXG4gICAgXCJydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9uc1wiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgUmVhbHRlayByODE2OSBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBhbmQgaW50cm9kdWNlcyBhIG5ldyBwaHlsaW5rIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjU4MThhOWE1MDBhODZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbkBAIC04Niw4ICs4Niw4IEBAIGNvbmZpZyBSODE2OVxuIFx0ZGVwZW5kcyBvbiBQQ0lcbiBcdHNlbGVjdCBGV19MT0FERVJcbiBcdHNlbGVjdCBDUkMzMlxuLVx0c2VsZWN0IFBIWUxJQlxuIFx0c2VsZWN0IFJFQUxURUtfUEhZXG4rXHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIwLi5jMGIwYzJiYzVhNDg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuQEAgLTI2LDEyICsyNiwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicjgxNjkuaFwiXG4gI2luY2x1ZGUgXCJyODE2OV9maXJtd2FyZS5oXCJcbkBAIC05Niw2ICs5NiwyNSBAQFxuICNkZWZpbmUgSlVNQk9fOUtcdCg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4gI2RlZmluZSBKVU1CT18xNktcdChTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4gXG4rI2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuKyNkZWZpbmUgUjgxMjdfU0RTX0FERFJcdFx0MHgyMzRhXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9JTlx0MHgyMzRjXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDXHRCSVQoMClcbisjZGVmaW5lIFI4MTI3X1NEU19DTURfV0VcdEJJVCgxKVxuKyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4rI2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcdFx0MHhlYjBlXG4rI2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHXHQweGViMTRcbisjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbisjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcdDB4NDBcbisjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0VcdDB4MDA4MFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXHQweDAwNzhcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRlx0MHgwMDMwXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXHQweDAwZmZcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGXHQweDAwMDBcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSArMzUzLDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuK1x0U0VORF9MVFJfTVNHXHQ9IDB4ZTAzOCxcbiBcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlx0XHRCSVQoMClcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXHRcdEJJVCgxNClcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlx0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiArNzQ5LDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcbitcdFJUTF9TRlBfTk9ORSxcbitcdFJUTF9TRlBfODE2OF9BRixcbitcdFJUTF9TRlBfODEyN19BVEYsXG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiArNzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuK1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgc3BlZWQ7XG4gXG4gXHRzdHJ1Y3Qge1xuIFx0XHRERUNMQVJFX0JJVE1BUChmbGFncywgUlRMX0ZMQUdfTUFYKTtcbkBAIC03NjIsNyArNzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiArODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCArMTE1OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuIFx0aWYgKHJ0bF9vY3BfcmVnX2ZhaWx1cmUocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBSZXR1cm4gZHVtbXkgTUlJX1BIWVNJRDIgaW4gU0ZQIG1vZGUgdG8gbWF0Y2ggU0ZQIFBIWSBkcml2ZXIgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSBcdTAwMjZcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuK0RFQ0xBUkVfUlRMX0NPTkQocjgxMjdfc2RzX2NtZF9jb25kKVxuK3tcbitcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbitcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuK1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4re1xuK1x0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcbitcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbitcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbitcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xuK1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuK1xuK1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuK1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuK1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuK1xuK1x0dmFsID0gcjgxNjhfcGh5X29jcF9yZWFkKHRwLCAweGM4MDQpO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpbnQgdmFsO1xuQEAgLTEyMTcsMTIgKzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiArMTM3MSwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFx1MDAyNlx1MDAyNlxuK1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4rXHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cbitcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxuIHtcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVx1MDAzZW9jcF9iYXNlICsgcmVnKTtcbkBAIC0xNTc4LDYgKzE2NzUsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XG4rXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbitcdFx0XHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcbitcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbitcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbitcdH1cbitcbitcdHJldHVybiBSVExfU0ZQX05PTkU7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4rXHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICsxODAxLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcbiBcdFx0ICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgKzE4MDksNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMjA3NCwxMSArMjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuK1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2krKykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuK1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyArMjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkO1xuK1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICsyMzYzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcwLDcgKzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyArMjQxMCw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XG4tXG4tXHRwaHlfZ2V0X3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgXHUwMDI2dHhfcGF1c2UsIFx1MDAyNnJ4X3BhdXNlKTtcbiBcbi1cdGRhdGEtXHUwMDNlYXV0b25lZyA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhdXRvbmVnO1xuLVx0ZGF0YS1cdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XG4tXHRkYXRhLVx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcbitcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICsyNDIyLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzODYsMzQgKzI0ODgsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdGludCBkdXBsZXggPSBjbWQtXHUwMDNlYmFzZS5kdXBsZXg7XG4tXHRpbnQgc3BlZWQgPSBjbWQtXHUwMDNlYmFzZS5zcGVlZDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcbi1cbi1cdGlmIChjbWQtXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRydGxfc2ZwX2luaXQodHApO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4rfVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG5AQCAtMjQzMSwxMCArMjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbkBAIC0yNDk5LDkgKzI1OTQsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiArMjYzNCw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICsyNjUwLDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdCAgICB0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxuIFx0XHRwaHlfd3JpdGVfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XG4gXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJ0bF9zZnBfaW5pdCh0cCk7XG4tXG4gXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXG4gXHRwaHlfc3BlZWRfdXAodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC0yNjU3LDE1ICsyNzUyLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgKzI4NjYsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI5MTgsMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiArMzIzMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIFx0LyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xuK1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICszMjY0LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4rXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XG4gXHRcdFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXG4gXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcbkBAIC0zMTY0LDYgKzMyNzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICszNzcxLDQyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZXBfMyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbitcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbitcdGludCBmdW5jLCBwb3M7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYysrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuK1x0XHRpZiAocG9zKSB7XG4rXHRcdFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuK1xuK1x0XHRcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4rXHRcdH1cbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4rXHRcdGlmIChwb3MpIHtcbitcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4rXG4rXHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4rXHRcdFx0dmFsIHw9IFBDSV9EM2hvdDtcbitcdFx0XHR2YWwgfD0gUENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbitcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4rXHRcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbitcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbitcdFx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4gXG4tXHRcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXHUwMDI2IDB4MGZmZjtcbi1cdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XG4rXHRcdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuK1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7XG5AQCAtNDEzOSwxMiArNDI5MSwyNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuK1x0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXHUwMDNlIEVUSF9EQVRBX0xFTjtcbiBcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbiBcdHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcih0cCk7XG4gXG4rXHRpZiAoanVtYm9fYmVmb3JlICE9IGp1bWJvX2FmdGVyKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XG4rXG4rXHRcdGlmIChqdW1ib19hZnRlcilcbitcdFx0XHRjYXBzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2FwcyB8PSAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbitcbitcdFx0cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC1cdTAwM2VwaHlsaW5rLCBjYXBzKTtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY5LDggKzUwMzQsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKVxuLVx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZykge1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0XHRcdHBoeWxpbmtfbWFjX2NoYW5nZSh0cC1cdTAwM2VwaHlsaW5rLFxuK1x0XHRcdFx0XHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXHUwMDI2IExpbmtTdGF0dXMpKTtcbitcdH1cbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuQEAgLTQ5MzAsOSArNTEwMCw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4ge1xuLVx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzM0IC4uLiBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHQvKiBBZGp1c3QgRUVFIExFRCBmcmVxdWVuY3kgKi9cbkBAIC00OTYzLDQwICs1MTMwLDE1IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbi1cbi1cdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XG4tXHRcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XG4tXHRcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlZW5hYmxlX3R4X2xwaSk7XG4tXHRcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cG1fcnVudGltZV9pZGxlKGQpO1xuLVx0fVxuLVxuLVx0cGh5X3ByaW50X3N0YXR1cyh0cC1cdTAwM2VwaHlkZXYpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuLVx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVxuLVx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLVx1MDAzZWRldiwgcGh5ZGV2LCByODE2OV9waHlsaW5rX2hhbmRsZXIsXG4tXHRcdFx0XHQgcGh5X21vZGUpO1xuLVx0aWYgKHJldClcbitcdHJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluaywgdHAtXHUwMDNlcGh5ZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2Vycih0cC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuLVx0XHRwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7XG4tXG4tXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUwMDcsMTAgKzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xuIFx0Yml0bWFwX3plcm8odHAtXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG4gXG4tXHRwaHlfc3RvcCh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbitcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRydGxfc2ZwX3Jlc2V0KHRwKTtcbiBcbiBcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcbkBAIC01MDMyLDE0ICs1MTcyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcbiBcdHBjaV9zZXRfbWFzdGVyKHRwLVx1MDAzZXBjaV9kZXYpO1xuLVx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbitcdFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXG4gXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuLVxuLVx0cGh5X3N0YXJ0KHRwLVx1MDAzZXBoeWRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTUwNDksMTMgKzUxODcsMTQgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbitcdHBoeWxpbmtfc3RvcCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJ0bDgxNjlfZG93bih0cCk7XG4gXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiBcbiBcdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuIFxuLVx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuQEAgLTUxMTIsMTEgKzUyNTEsMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuLVx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuLVx0aWYgKHJldHZhbClcbi1cdFx0Z290byBlcnJfZnJlZV9pcnE7XG4tXG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4rXHRcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcbitcdFx0aWYgKHJldHZhbClcbitcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbitcdH1cbiBcdHJ0bDgxNjlfdXAodHApO1xuK1x0cGh5bGlua19zdGFydCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBvdXQ6XG5AQCAtNTIyMSw2ICs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4gXHQvKiBTb21lIGNoaXAgdmVyc2lvbnMgbWF5IHRydW5jYXRlIHBhY2tldHMgd2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uICovXG4gXHRydGxfaW5pdF9yeGNmZyh0cCk7XG4gXG4rXHRpZiAocnRsX2lzXzgxMTZhZih0cCkpXG4rXHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuK1xuIFx0cmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTtcbiB9XG4gXG5AQCAtNTI4OCw2ICs1NDMyLDcgQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHI4MTY5X3JlbW92ZV9sZWRzKHRwLVx1MDAzZWxlZHMpO1xuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXHUwMDNlZGV2KTtcbitcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG5AQCAtNTMxMCw3ICs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBydGxfc2V0X21hY19hZGRyZXNzLFxuLVx0Lm5kb19ldGhfaW9jdGxcdFx0PSBwaHlfZG9faW9jdGxfcnVubmluZyxcbitcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcnRsODE2OV9pb2N0bCxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsX3NldF9yeF9tb2RlLFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuIFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gcnRsODE2OV9uZXRwb2xsLFxuQEAgLTU0NzQsMTYgKzU2MTksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJldHVybiAtRVVOQVRDSDtcbiBcdH1cbiBcbi1cdHRwLVx1MDAzZXBoeWRldi1cdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHBoeV9zdXBwb3J0X2VlZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuLVx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuLVx0XHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cdTAwM2VwaHlkZXYsXG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XG4tXG4gXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXG4gXHRwaHlfc3VzcGVuZCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTU1OTksNiArNTczNCwyNDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4rXHRwbV9ydW50aW1lX2lkbGUodHBfdG9fZGV2KHRwKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuK1xuK1x0dHAtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbitcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xuK1xuK1x0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbitcdFx0XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdGlmICghdHAtXHUwMDNlcGNzLm9wcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbitcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuK1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcbitcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xuK1x0dmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gdmFsO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbitcdFx0dTE2IHN0YXQxO1xuK1xuK1x0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0aWYgKCEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUykpXG4rXHRcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICsgTURJT19TVEFUMSk7XG4rXG4rXHRcdHN0YXRlLVx1MDAzZWxpbmsgPSAhIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcbitcdFx0aWYgKCFzdGF0ZS1cdTAwM2VsaW5rKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxuK1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4rXG4rXHRcdHN0YXRlLVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuK1x0fSBlbHNlIHtcbitcdFx0dTE2IGJtc3IsIGxwYTtcbitcbitcdFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XG4rXHRcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcbitcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbitcdFx0XHQgICAgICBib29sIHBlcm1pdF9wYXVzZV90b19tYWMpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbitcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XG4rXHRcdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuK1x0XHRcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCJVbnN1cHBvcnRlZCBTRlAgaW50ZXJmYWNlIG1vZGU6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3Bjc192YWxpZGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0cnRsX2VuYWJsZV90eF9scGkodHAsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydGxfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lciwgYm9vbCB0eF9jbGtfc3RvcClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cnVlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBydGxfcGh5bGlua19tYWNfb3BzID0ge1xuK1x0Lm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLFxuK1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbitcdC5tYWNfbGlua19kb3duICA9IHJ0bF9tYWNfbGlua19kb3duLFxuK1x0Lm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLFxuK1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4rXHQubWFjX2VuYWJsZV90eF9scGkgPSBydGxfbWFjX2VuYWJsZV90eF9scGksXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGw4MTY5X2dldF9scGlfY2FwcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuK1xuK1x0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSB8fCB0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbitcbitcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXG4rXHQgKiBSVExfR0lHQV9NQUNfVkVSXzYxIGRvZXNuJ3Qgc3VwcG9ydCAyLjVHIGVlZVxuK1x0ICovXG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYzKVxuK1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuK1x0XHRjYXBzIHw9IE1BQ181MDAwRkQ7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcbitcbitcdHJldHVybiBjYXBzO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuK1x0LnBjc192YWxpZGF0ZSA9IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlLFxuK1x0LnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsXG4rXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbitcdC5wY3NfYW5fcmVzdGFydCA9IHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bF9pbml0X3BoeWxpbmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuK1x0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTtcbitcbitcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbitcdGNhc2UgUlRMX1NGUF84MTY4X0FGOlxuK1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9TRlBfODEyN19BVEY6XG4rXHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4rXHRcdFx0XHRcdFx0XHQgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XG4rXHRcdFx0XHRcdFx0XHQgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuK1x0XHRlbHNlXG4rXHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4rXHRcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbitcdFx0XHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4rXHRcdFx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRpZiAodHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcbitcdFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7XG4rXG4rXHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbitcdFx0XHQgICAgcGh5X21vZGUsIFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xuK1x0aWYgKElTX0VSUihwbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbitcbitcdHRwLVx1MDAzZXBoeWxpbmsgPSBwbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgKzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHRcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XG4gXHR0cC1cdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXHUwMDNlbWFjX3ZlcnNpb247XG4gXHR0cC1cdTAwM2Vmd19uYW1lID0gY2hpcC1cdTAwM2Vmd19uYW1lO1xuK1x0dHAtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuIFxuIFx0LyogRGlzYWJsZSBBU1BNIEwxIGFzIHRoYXQgY2F1c2UgcmFuZG9tIGRldmljZSBzdG9wIHdvcmtpbmdcbiBcdCAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzLlxuQEAgLTU2NzksMTIgKzYwNTYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4rXHR0cC1cdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xuIFxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG5AQCAtNTc4OCwxMyArNjE2MCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XG4gXG4tXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xuK1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkge1xuK1x0XHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuLVx0aWYgKHJjKVxuK1x0aWYgKHJjKSB7XG4rXHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7XG4gXHRcdGlmIChydGxfaXNfODEyNSh0cCkpXG5AQCAtNTgxNyw2ICs2MTk5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbitcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbitcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4rXG4gXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGZjLi45ZTljZDc5MzAxZDY2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xODI4LDYgKzE4MjgsOTMgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbisvKipcbisgKiBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKCkgLSBEeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbisgKiBAbWFjX3BhdXNlOiB0aGUgbmV3IE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMgbWFza1xuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4rICogc3VjaCBhcyBsb3NpbmcvZ2FpbmluZyBQYXVzZSBmcmFtZSBzdXBwb3J0IGJhc2VkIG9uIE1UVSBzaXplLlxuKyAqIEl0IHJlY2FsY3VsYXRlcyBzdXBwb3J0ZWQgbGluayBtb2RlcyBhbmQgdHJpZ2dlcnMgcmVuZWdvdGlhdGlvbiBpZiBuZWVkZWQuXG4rICovXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG4re1xuK1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4rXHR1bnNpZ25lZCBsb25nIG9sZF9wYXVzZSwgY2Fwc19hZGRlZCwgY2Fwc19yZW1vdmVkO1xuK1x0Ym9vbCBwYXVzZV9hZHYsIGFzeW1fYWR2O1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuK1x0XHRwaHlsaW5rX2VycihwbCwgXCJBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbGRfcGF1c2UgPSBwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjYgKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XG4rXHRjYXBzX2FkZGVkID0gbWFjX3BhdXNlIFx1MDAyNiB+b2xkX3BhdXNlO1xuK1x0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFx1MDAyNiB+bWFjX3BhdXNlO1xuK1xuK1x0aWYgKCFjYXBzX2FkZGVkIFx1MDAyNlx1MDAyNiAhY2Fwc19yZW1vdmVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1x0cGwtXHUwMDNlY29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlO1xuK1xuK1x0aWYgKGNhcHNfcmVtb3ZlZCBcdTAwMjYgTUFDX1NZTV9QQVVTRSlcbitcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19BU1lNX1BBVVNFKVxuK1x0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRpZiAoY2Fwc19hZGRlZCBcdTAwMjYgTUFDX1NZTV9QQVVTRSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdFx0aWYgKHBsLVx1MDAzZXBoeWRldiBcdTAwMjZcdTAwMjYgIXBoeWxpbmtfdGVzdChwbC1cdTAwM2VwaHlkZXYtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSkpXG4rXHRcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdH1cbitcdGlmIChjYXBzX2FkZGVkIFx1MDAyNiBNQUNfQVNZTV9QQVVTRSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuK1x0XHRpZiAocGwtXHUwMDNlcGh5ZGV2IFx1MDAyNlx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVx1MDAzZXBoeWRldi1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKVxuK1x0XHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdH1cbitcbitcdGxpbmttb2RlX2FuZChjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZywgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdGlmIChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9BTikge1xuK1x0XHRpZiAocGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGNvbmZpZy1cdTAwM2VwYXVzZSBcdTAwMjYgTUxPX1BBVVNFX1JYKSBcdTAwMjZcdTAwMjYgKGNvbmZpZy1cdTAwM2VwYXVzZSBcdTAwMjYgTUxPX1BBVVNFX1RYKSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbitcbitcdFx0aWYgKHBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuK1x0fVxuK1xuK1x0aWYgKCFwbC1cdTAwM2VwaHlkZXYpXG4rXHRcdHBoeWxpbmtfY2hhbmdlX2luYmFuZF9hZHZlcnQocGwpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cGF1c2VfYWR2ID0gbGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxuK1x0XHRcdFx0XHQgICAgICBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuK1x0XHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxuK1x0XHRcdFx0XHQgICAgIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZyk7XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbitcdFx0XHRcdCBwbC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlX2Fkdik7XG4rXHRcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4rXHRcdFx0XHQgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nLCBhc3ltX2Fkdik7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VwaHlkZXYtXHUwMDNlbG9jayk7XG4rXG4rXHRcdHBoeV9zdGFydF9hbmVnKHBsLVx1MDAzZXBoeWRldik7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xuK1xuIC8qKlxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXG4gICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuaW5kZXggYjY1ZDBmNWZhMWEwMTQuLjQ3MjFiYTA3MWNiYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyArMTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL3BoeWxpYi5oXCJcbiAjaW5jbHVkZSBcInJlYWx0ZWsuaFwiXG5AQCAtMjY0Niw0NSArMjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgKzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCJSZWFsdGVrIFNGUCBQSFkgTW9kZVwiLFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCJSVEw4MjI0IDIuNUdicHMgUEhZXCIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuaW5kZXggMmJjMGRiM2Q1MmFjOGQuLmUzYzc4MjIxMDBhYmE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5AQCAtODQyLDQgKzg0Miw2IEBAIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19iZWdpbihzdHJ1Y3QgcGh5bGluayAqcGwpO1xuIFxuIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbit2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkNjgzYmMxYjA2NTljZC4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSw3ICswLDAgQEBcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLSNpZm5kZWYgX1JFQUxURUtfUEhZX0hcbi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9IXG4tXG4tI2RlZmluZVx0UEhZX0lEX1JUTF9EVU1NWV9TRlBcdDB4MDAxY2NiZmZcbi1cbi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU5Ljk1OTU1OTcyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzA0Mjc3Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiByODE2OSBEcml2ZXIgYW5kIHBoeWxpbmsgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgcmVmYWN0b3JzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgcGh5bGluay4gVGhhdCBtZWFucyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBkcml2ZXIgaXRzZWxmIGFuZCB0aGUgcGh5bGluayBjb3JlLCB3aGljaCwgZm9yIGEgbmV0d29ya2luZyBleHBlcnQgbGlrZSBteXNlbGYsIGltbWVkaWF0ZWx5IHNjcmVhbXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYW5kIHBvdGVudGlhbGx5IGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2AuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogcmVhY2hhYmlsaXR5LiBUaGUgcjgxNjkgZHJpdmVyIGlzIGZvciBSZWFsdGVrIFBDSSBFdGhlcm5ldCBhZGFwdGVycy4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFFFTVUgaXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgbWlnaHQgZW11bGF0ZSBgcnRsODEzOWAsIGJ1dCBkb2VzIGl0IHN1cHBvcnQgYHJ0bDgxNjlgIGRpcmVjdGx5PyBBIHF1aWNrIGNoZWNrIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb25maXJtcy4uLiBubywgbmF0aXZlbHksIGl0IGRvZXNuJ3QuIEhvd2V2ZXIsIHRoZSBgc3l6X3BjaV9kZXZpY2VgIHByaW1pdGl2ZSBpbiBzeXprYWxsZXIgaXMgbXkgc2F2aW5nIGdyYWNlLiBUaGlzIHBzZXVkby1kZXZpY2UgYWxsb3dzIHVzIHRvIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgaXRzZWxmLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhlIHI4MTY5IGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGZ1enphYmxlLlxuXG5UaGlzIGBwaHlsaW5rLmNgIG1vZGlmaWNhdGlvbiwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gUGh5bGluayBpcyBhIGNlbnRyYWwgbmV0d29ya2luZyBjb21wb25lbnQsIHNvIGNoYW5nZXMgdGhlcmUgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyB1c2VkIGJ5IG1hbnkgZHJpdmVycywgYW5kIHRoYXQgbmV3IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQuIExldCdzIHNlZSBpZiB0aGF0J3MgcmVhY2hhYmxlIC0gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIGNhbGxlZCBmcm9tIGBydGw4MTY5X2NoYW5nZV9tdHVgLiBHb29kLlxuXG5Ob3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlJ2xsIGJlIGxvb2tpbmcgYXQgYENPTkZJR19SODE2OWAgKHdoaWNoLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgc2VsZWN0cyBgQ09ORklHX1BIWUxJTktgKSBhbmQgYENPTkZJR19QQ0lgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfUjgxNjlgIGRlcGVuZHMgb24gYFBDSWAgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gQ29uZmlybWVkLlxuXG5GaW5hbGx5LCBsZXQncyBuYWlsIGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cy4gSW4gYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLiAgVGhlbiwgaW4gdGhlIFJlYWx0ZWsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgKSwgd2UgaGF2ZSBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYWxvbmcgd2l0aCBhIHdob2xlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQsIGxpa2UgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgdGhlIFNEUyBhbmQgU0ZQIGZ1bmN0aW9ucy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjM0OjExLjI2MzgzOTIxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0MTQzMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI5MT1zdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQzMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NDMxMDpcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MzExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgyOT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4MzI6ICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzOS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NDA6dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTE2OkVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5bGluay5oPTg0Mz12b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XFxuaW5jbHVkZS9saW51eC9waHlsaW5rLmgtODQ0LVxcbmluY2x1ZGUvbGludXgvcGh5bGluay5oOjg0NTp2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XFxuaW5jbHVkZS9saW51eC9waHlsaW5rLmgtODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDoxNC4wOTc5ODkzNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQ1OTQ5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOZXR3b3JraW5nIFBIWSBhbmQgUmVhbHRlayBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIHdheSB3ZSBoYW5kbGUgUEhZIGxpbmsgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBpbnRlZ3JhdGluZyBgcGh5bGlua2Agd2l0aCB0aGUgYHI4MTY5YCBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgdGhpcyBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZXMgdGhpcyBkZWVwIGludG8gdGhlIG5ldHdvcmsgc3RhY2ssIHRvdWNoaW5nIGJvdGggY29yZSBQSFkgZnVuY3Rpb25hbGl0eSBhbmQgYSB3aWRlbHkgdXNlZCBkcml2ZXIgbGlrZSBgcjgxNjlgLCBkZXNlcnZlIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgdGhlIGNvcmUgTUFDL1BIWSBpbnRlcmFjdGlvbiBmdW5jdGlvbnM6XG5cbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2A6IFRoaXMgaXMgb2J2aW91c2x5IHRoZSBjZW50cmFsIG5ldyBmdW5jdGlvbiwgc28gaXQncyBhIHByaW9yaXR5LlxuKiAgIGBydGw4MTY5X2NoYW5nZV9tdHVgOiBNVFUgY2hhbmdlcyBjYW4gcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaW4gbmV0d29ya2luZy5cbiogICBgcnRsX2luaXRfcGh5bGlua2A6IFNpbmNlIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGh5bGluayBmcmFtZXdvcmssIGRlZmluaXRlbHkgbmVlZHMgYSBsb29rLlxuKiAgIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYDogUEhZIENvbnRyb2wgU2lnbmFscy5cbiogICBgcnRsX21hY19saW5rX3VwYCBhbmQgYHJ0bF9tYWNfbGlua19kb3duYDogTGluayBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgOiBBbm90aGVyIFBDUyBmdW5jdGlvbiwgbWFraW5nIGRlY2lzaW9ucy5cbiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIHJldmlld2VkLlxuKiAgIGBydGw4MTY5X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc193cml0ZWAsIGFuZCBgcjgxMjdfc2RzX21vZGlmeWA6IFRoZXNlIHJlbGF0ZWQgdG8gU2hhZG93IERhdGEgU3RydWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6ei10ZXN0ZWQuXG4qICAgYHI4MTI3X3NmcF9pbml0XzFnYCBhbmQgYHI4MTI3X3NmcF9pbml0XzEwZ2A6IFRoZXNlIGFyZSB3b3J0aCBjaGVja2luZyBpbiB0aGUgY29udGV4dCBvZiBTRlAsIHdoaWNoIGNvdWxkIGhhdmUgc29tZSBlZGdlIGNhc2VzLlxuKiAgIGBydGxfZ2V0X3NmcF9tb2RlYDogQWxzbyByZWxhdGVkIHRvIFNGUCBjb25maWd1cmF0aW9ucy5cbiogICBgcnRsX2lzXzgxMTZhZmA6IEZlYXR1cmUgaWRlbnRpZmljYXRpb24uXG5cbldlIGFsc28gaGF2ZSBhIGNvdXBsZSBvZiBjb25maWd1cmF0aW9uczogYFI4MTY5YCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgUEhZTElOS2AgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLiBBZnRlciB0aGF0LCBJJ2xsIHNldCB1cCBteSBmdXp6aW5nIGhhcm5lc3NlcywgYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB3ZWFrIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6MzQ6MjAuNTQzOTQ2MzU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTkzMzc5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJTktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDoyMy4wNjMyOTI2MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY1NTM2NzUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgUGh5bGluayBGb2N1cyBmb3IgdGhlIFI4MTY5IERyaXZlcioqXG5cbk9rYXksIHNvIGBQSFlMSU5LYCBpcyBhIHRyaXN0YXRlIGNvbmZpZywgYnV0IHRoZSBgUjgxNjlgIGRyaXZlciBhY3R1YWxseSBzZWxlY3RzIGl0LiBUaGVyZWZvcmUsIHdlIG9ubHkgbmVlZCB0byBlbmFibGUgYFI4MTY5YC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29yZSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIHByaW1lIGNhbmRpZGF0ZXM6IGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCwgYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAsIGBydGw4MTY5X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc193cml0ZWAsIGByODEyN19zZHNfbW9kaWZ5YCwgYHI4MTI3X3NmcF9pbml0XzFnYCwgYHI4MTI3X3NmcF9pbml0XzEwZ2AsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYW5kIGBydGxfaXNfODExNmFmYC4gVGhvc2Ugc2hvdWxkIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHBoeWxpbmsgaW50ZWdyYXRpb24gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBNQUMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gTGV0IG1lIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MuIEFoLCB0aGUgYHJ0bF9tYWNfY29uZmlnYCBmdW5jdGlvbiBpcyBlbXB0eS4gQW5kIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBhcmUgYWxzbyBlbXB0eS4gIEl0J3MgYWx3YXlzIHdvcnRoIHZlcmlmeWluZyB0aGF0IHRoZXNlIGFyZSBhY3R1YWxseSBkb2luZyBzb21ldGhpbmcgb2YgaW50ZXJlc3QsIGFuZCBiZWNhdXNlIHRoZXkncmUgZW1wdHksIHRoZXkncmUgbm90LiAgV2UgY2FuIHNhZmVseSBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2theSwgaGVyZSBhcmUgYSBmZXcgbW9yZTogYHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfbndheV9yZXNldGAsIGFuZCBgcnRsODE2OV9pb2N0bGAuIFRob3NlIHNlZW0gcmVsZXZhbnQsIGVzcGVjaWFsbHkgYGtzZXR0aW5nc2AsIHNvIEknbGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QuIFRoZXkgZGVmaW5pdGVseSBzaG91bGQgYmUgaW5jbHVkZWQsIGZvciB0aGV5IHdvdWxkIHByb2JhYmx5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGxpbmsgc3RhdGUgb2YgdGhlIGRldmljZS5cblxuU28sIHRoZSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgaGF2ZSBub3cuIEknbGwgaW5jbHVkZSBpdCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGlzIHBhdGNoIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByODE2OSBkcml2ZXIncyBwaHlsaW5rIEFQSSB1c2FnZSwgYW5kIHRoZSBuZXcgcGF1c2UgY2FwYWJpbGl0eSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NDAsIk91dHB1dFRva2VucyI6MzcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDozNS43MTg2NjM2NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU2NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bDgxNjlfcGNzX2NvbmZpZ1wiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcInJ0bF9tYWNfZGlzYWJsZV90eF9scGlcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3JlYWRcIixcbiAgICBcInI4MTI3X3Nkc193cml0ZVwiLFxuICAgIFwicjgxMjdfc2RzX21vZGlmeVwiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMWdcIixcbiAgICBcInI4MTI3X3NmcF9pbml0XzEwZ1wiLFxuICAgIFwicnRsX2dldF9zZnBfbW9kZVwiLFxuICAgIFwicnRsX2lzXzgxMTZhZlwiLFxuICAgIFwicnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnNcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3dyaXRlXCIsXG4gICAgXCJyODEyN19zZHNfbW9kaWZ5XCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xZ1wiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMTBnXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGxfaXNfODExNmFmXCIsXG4gICAgXCJydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9uc1wiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgUmVhbHRlayByODE2OSBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBhbmQgaW50cm9kdWNlcyBhIG5ldyBwaHlsaW5rIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-10 05:10:50 +0000 UTC FinishedAt: 2026-07-10 05:34:37 +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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "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": "fe3e786ef4eb6e47d2901f568a27bd920477bbe9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "80fd2087-15cb-4548-b4b1-6dc407cd3fec" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phylink_update_mac_pause_capabilities", "rtl8169_change_mtu", "rtl_init_phylink", "rtl8169_pcs_config", "rtl8169_pcs_get_state", "rtl_mac_link_up", "rtl_mac_link_down", "rtl_mac_select_pcs", "rtl_mac_disable_tx_lpi", "rtl_mac_enable_tx_lpi", "rtl8169_sds_read", "r8127_sds_read", "r8127_sds_write", "r8127_sds_modify", "r8127_sfp_init_1g", "r8127_sfp_init_10g", "rtl_get_sfp_mode", "rtl_is_8116af", "rtl_lowpower_hidden_functions", "rtl8169_get_link_ksettings", "rtl8169_set_link_ksettings", "rtl8169_nway_reset", "rtl8169_ioctl" ], "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+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua191cCYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfd3JpdGUmIzM0OywKICAgICYjMzQ7cjgxMjdfc2RzX21vZGlmeSYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xZyYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xMGcmIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGxfaXNfODExNmFmJiMzNDssCiAgICAmIzM0O3J0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3NmEyOTYxNjQ5MDExNGYzODYyZmE0MjA3YTg3YWZjNjY3ODZkOWJlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDU6MzM6NTcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNTgxOGE5YTUwMGE4NmQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuQEAgLTg2LDggJiM0Mzs4Niw4IEBAIGNvbmZpZyBSODE2OVxuIFx0ZGVwZW5kcyBvbiBQQ0lcbiBcdHNlbGVjdCBGV19MT0FERVJcbiBcdHNlbGVjdCBDUkMzMlxuLVx0c2VsZWN0IFBIWUxJQlxuIFx0c2VsZWN0IFJFQUxURUtfUEhZXG4mIzQzO1x0c2VsZWN0IFBIWUxJTktcbiBcdGhlbHBcbiBcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cbiBcdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5pbmRleCBlYzRmYzIxZmEyMWZiMC4uYzBiMGMyYmM1YTQ4NTUgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbkBAIC0yNiwxMiAmIzQzOzI2LDEyIEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwmIzM0O3I4MTY5LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtyODE2OV9maXJtd2FyZS5oXCYjMzQ7XG5AQCAtOTYsNiAmIzQzOzk2LDI1IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSXHRcdDB4MjM0YVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXHQweDIzNGNcbiYjNDM7I2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19DTURfRVhFQ1x0QklUKDApXG4mIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVx0QklUKDEpXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4ZWIwZVxuJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUdcdDB4ZWIxNFxuJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4mIzQzOyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVx0MHgwMDgwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4mIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXHQweDAwMzBcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUZcdDB4MDAwMFxuJiM0MztcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSAmIzQzOzM1MywxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xuIFx0QUxEUFNfTFRSXHQ9IDB4ZTBhMixcbiBcdExUUl9PQkZGX0xPQ0tcdD0gMHhlMDMyLFxuIFx0TFRSX1NOT09QXHQ9IDB4ZTAzNCxcbiYjNDM7XHRTRU5EX0xUUl9NU0dcdD0gMHhlMDM4LFxuIFxuICNkZWZpbmUgQUxEUFNfTFRSX0VOXHRcdFx0QklUKDApXG4gI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOXHRcdEJJVCgwKVxuICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU5cdFx0QklUKDE0KVxuICNkZWZpbmUgTFRSX1NOT09QX0VOXHRcdFx0R0VOTUFTSygxNSwgMTQpXG4mIzQzOyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xuIFx0UlRMX0RBU0hfMjVfQlAsXG4gfTtcbiBcbiYjNDM7ZW51bSBydGxfc2ZwX21vZGUge1xuJiM0MztcdFJUTF9TRlBfTk9ORSxcbiYjNDM7XHRSVExfU0ZQXzgxNjhfQUYsXG4mIzQzO1x0UlRMX1NGUF84MTI3X0FURixcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG5AQCAtNzM2LDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4mIzQzO1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICYjNDM7Nzc4LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1MzIgaXJxX21hc2s7XG4gXHRpbnQgaXJxO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICYjNDM7NzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiAmIzQzOzgwMiw5IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0c3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkcztcbiBcbiBcdHUzMiBvY3BfYmFzZTtcbiYjNDM7XHRzdHJ1Y3QgcGh5bGluayAqcGh5bGluaztcbiYjNDM7XHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfcGNzIHBjcztcbiB9O1xuIFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuQEAgLTExMjgsMTAgJiM0MzsxMTU5LDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICYjNDM7MTIyNiw3MyBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfc2RzX3BoeV9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHVzbGVlcF9yYW5nZSgxMCwgMjApO1xuIH1cbiBcbiYjNDM7REVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgXHUwMDI2IFI4MTI3X1NEU19DTURfRVhFQztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCByODEyN19zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSwgdTE2IHJlZylcbiYjNDM7e1xuJiM0MztcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4mIzQzO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbiYjNDM7XHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXG4mIzQzO1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuJiM0MztcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuJiM0Mzt7XG4mIzQzO1x0dTE2IGFkZHIgPSAoaW5kZXggXHUwMDNjXHUwMDNjIDExKSB8IChwYWdlIFx1MDAzY1x1MDAzYyA1KSB8IHJlZztcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0RBVEFfSU4sIHZhbCk7XG4mIzQzO1x0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xuJiM0MztcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuJiM0MztcbiYjNDM7XHRpZiAocnRsX2xvb3Bfd2FpdF9sb3codHAsIFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXG4mIzQzO1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4mIzQzO3tcbiYjNDM7XHRpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpO1xuJiM0MztcbiYjNDM7XHRpZiAodmFsIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHR2YWwgPSAodmFsIFx1MDAyNiB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7XG4mIzQzO1x0cjgxMjdfc2RzX3dyaXRlKHRwLCBpbmRleCwgcGFnZSwgcmVnLCB2YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGludCB2YWw7XG4mIzQzO1xuJiM0MztcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbiYjNDM7XG4mIzQzO1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMSwgMzEsIDAsIEJJVCgzKSk7XG4mIzQzO1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbiYjNDM7XHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTtcbiYjNDM7XG4mIzQzO1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuJiM0MztcdFJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgXHUwMDI2IH4weDMwMDMpIHwgMHgwMDAyKTtcbiYjNDM7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuJiM0MztcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTtcbiYjNDM7XHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDgsIDB4MDAwMCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuJiM0MztcbiYjNDM7XHR2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7XG4mIzQzO1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGludCB2YWw7XG5AQCAtMTIxNywxMiAmIzQzOzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiAmIzQzOzEzNzEsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4mIzQzO1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxuJiM0MztcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXG4ge1xuIFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnKTtcbkBAIC0xNTc4LDYgJiM0MzsxNjc1LDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4mIzQzO1x0XHRcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbiYjNDM7XHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgJiM0MzsxNzg0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcbiBcdCAgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyAmIzQzOzE4MDEsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxuIFx0XHQgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgJiM0MzsxODA5LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0yMDc0LDExICYjNDM7MjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgJiM0MzsyMzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICYjNDM7MjM2Myw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNzAsNyAmIzQzOzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgJiM0MzsyNDEwLDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcbi1cbi1cdHBoeV9nZXRfcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBcdTAwMjZ0eF9wYXVzZSwgXHUwMDI2cnhfcGF1c2UpO1xuIFxuLVx0ZGF0YS1cdTAwM2VhdXRvbmVnID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF1dG9uZWc7XG4tXHRkYXRhLVx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcbi1cdGRhdGEtXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICYjNDM7MjQyMiw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjM4NiwzNCAmIzQzOzI0ODgsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0aW50IGR1cGxleCA9IGNtZC1cdTAwM2ViYXNlLmR1cGxleDtcbi1cdGludCBzcGVlZCA9IGNtZC1cdTAwM2ViYXNlLnNwZWVkO1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xuLVxuLVx0aWYgKGNtZC1cdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuJiM0Mzt9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdHJ0bF9zZnBfaW5pdCh0cCk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbkBAIC0yNDMxLDEwICYjNDM7MjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuQEAgLTI0OTksOSAmIzQzOzI1OTQsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgJiM0MzsyNjM0LDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSAmIzQzOzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXG4gXHRcdHBoeV93cml0ZV9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcbiBcbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cnRsX3NmcF9pbml0KHRwKTtcbi1cbiBcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cbiBcdHBoeV9zcGVlZF91cCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTI2NTcsMTUgJiM0MzsyNzUyLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqL1xuLVx0aWYgKGp1bWJvKSB7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRwaHlfc3RhcnRfYW5lZyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0fVxuIH1cbiBcbiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpXG5AQCAtMjc4MCw3ICYjNDM7Mjg2Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xuIFxuIFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XG4tXHRcdHBoeV9zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWRldiwgZmFsc2UpO1xuJiM0MztcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgJiM0MzsyOTE4LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XG5AQCAtMzA5OCw4ICYjNDM7MzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgJiM0MzszMjMwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7XG4mIzQzO1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICYjNDM7MzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDk0LCAweGZmMDAsIDApO1xuQEAgLTMxNjQsNiAmIzQzOzMyNzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiAmIzQzOzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXHUwMDNlZGV2Zm4pO1xuJiM0MztcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgZnVuYywgcG9zO1xuJiM0MztcdHUxNiB2YWw7XG4mIzQzO1xuJiM0MztcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXHUwMDNjIDg7IGZ1bmMmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XG4mIzQzO1xuJiM0MztcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuJiM0MztcdFx0aWYgKHBvcykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsIHw9IChQQ0lfRVhQX0xOS0NUTF9BU1BNQyB8IFBDSV9FWFBfTE5LQ1RMX0NMS1JFUV9FTik7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCB2YWwpO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdHBvcyA9IHBjaV9idXNfZmluZF9jYXBhYmlsaXR5KGJ1cywgZGV2Zm4sIFBDSV9DQVBfSURfUE0pO1xuJiM0MztcdFx0aWYgKHBvcykge1xuJiM0MztcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCBcdTAwMjZ2YWwpO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuJiM0MztcdFx0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4mIzQzO1x0XHRcdHZhbCB8PSBQQ0lfRDNob3Q7XG4mIzQzO1x0XHRcdHZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTO1xuJiM0MztcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcbkBAIC0zNjkzLDEyICYjNDM7Mzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuJiM0MztcdFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuJiM0MztcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbiYjNDM7XHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4mIzQzO1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuJiM0MztcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTQxMzksMTIgJiM0Mzs0MjkxLDI1IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuJiM0MztcdGJvb2wganVtYm9fYWZ0ZXIgPSBuZXdfbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4gXG4gXHRXUklURV9PTkNFKGRldi1cdTAwM2VtdHUsIG5ld19tdHUpO1xuIFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xuIFx0cnRsX2p1bWJvX2NvbmZpZyh0cCk7XG4gXHRydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApO1xuIFxuJiM0MztcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGp1bWJvX2FmdGVyKVxuJiM0MztcdFx0XHRjYXBzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRjYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcbiYjNDM7XHRcdHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXModHAtXHUwMDNlcGh5bGluaywgY2Fwcyk7XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY5LDggJiM0Mzs1MDM0LDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZylcbi1cdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKSB7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4mIzQzO1x0XHRcdHBoeWxpbmtfbWFjX2NoYW5nZSh0cC1cdTAwM2VwaHlsaW5rLFxuJiM0MztcdFx0XHRcdFx0ICAgISEoUlRMX1I4KHRwLCBQSFlzdGF0dXMpIFx1MDAyNiBMaW5rU3RhdHVzKSk7XG4mIzQzO1x0fVxuIFxuIFx0cnRsX2lycV9kaXNhYmxlKHRwKTtcbiBcdG5hcGlfc2NoZWR1bGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG5AQCAtNDkzMCw5ICYjNDM7NTEwMCw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4ge1xuLVx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzM0IC4uLiBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHQvKiBBZGp1c3QgRUVFIExFRCBmcmVxdWVuY3kgKi9cbkBAIC00OTYzLDQwICYjNDM7NTEzMCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4tXG4tXHRpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkge1xuLVx0XHRydGxfbGlua19jaGdfcGF0Y2godHApO1xuLVx0XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWVuYWJsZV90eF9scGkpO1xuLVx0XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHBtX3J1bnRpbWVfaWRsZShkKTtcbi1cdH1cbi1cbi1cdHBoeV9wcmludF9zdGF0dXModHAtXHUwMDNlcGh5ZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbi1cdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cbi1cdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cdTAwM2VkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLFxuLVx0XHRcdFx0IHBoeV9tb2RlKTtcbi1cdGlmIChyZXQpXG4mIzQzO1x0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rLCB0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuLVx0XHRwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7XG4tXG4tXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuJiM0MztcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MDA3LDEwICYjNDM7NTE0OSw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4tXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRydGxfc2ZwX3Jlc2V0KHRwKTtcbiBcbiBcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcbkBAIC01MDMyLDE0ICYjNDM7NTE3MiwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XG4gXG4gXHRwY2lfc2V0X21hc3Rlcih0cC1cdTAwM2VwY2lfZGV2KTtcbi1cdHBoeV9pbml0X2h3KHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfcmVzdW1lKHRwLVx1MDAzZXBoeWRldik7XG4tXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1xuIFx0bmFwaV9lbmFibGUoXHUwMDI2dHAtXHUwMDNlbmFwaSk7XG4gXHRlbmFibGVfd29yayhcdTAwMjZ0cC1cdTAwM2V3ay53b3JrKTtcbiBcdHJ0bF9yZXNldF93b3JrKHRwKTtcbi1cbi1cdHBoeV9zdGFydCh0cC1cdTAwM2VwaHlkZXYpO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01MDQ5LDEzICYjNDM7NTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuJiM0MztcdHBoeWxpbmtfc3RvcCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJ0bDgxNjlfZG93bih0cCk7XG4gXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiBcbiBcdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuIFxuLVx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0ZG1hX2ZyZWVfY29oZXJlbnQoXHUwMDI2cGRldi1cdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVx1MDAzZVJ4RGVzY0FycmF5LFxuIFx0XHRcdCAgdHAtXHUwMDNlUnhQaHlBZGRyKTtcbkBAIC01MTEyLDExICYjNDM7NTI1MSwxMyBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbi1cbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4mIzQzO1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4mIzQzO1x0XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHR9XG4gXHRydGw4MTY5X3VwKHRwKTtcbiYjNDM7XHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XG4gXHRuZXRpZl9zdGFydF9xdWV1ZShkZXYpO1xuIG91dDpcbkBAIC01MjIxLDYgJiM0Mzs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4gXHQvKiBTb21lIGNoaXAgdmVyc2lvbnMgbWF5IHRydW5jYXRlIHBhY2tldHMgd2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uICovXG4gXHRydGxfaW5pdF9yeGNmZyh0cCk7XG4gXG4mIzQzO1x0aWYgKHJ0bF9pc184MTE2YWYodHApKVxuJiM0MztcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4mIzQzO1xuIFx0cmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTtcbiB9XG4gXG5AQCAtNTI4OCw2ICYjNDM7NTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4mIzQzO1x0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgJiM0Mzs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBydGxfc2V0X21hY19hZGRyZXNzLFxuLVx0Lm5kb19ldGhfaW9jdGxcdFx0PSBwaHlfZG9faW9jdGxfcnVubmluZyxcbiYjNDM7XHQubmRvX2V0aF9pb2N0bFx0XHQ9IHJ0bDgxNjlfaW9jdGwsXG4gXHQubmRvX3NldF9yeF9tb2RlXHQ9IHJ0bF9zZXRfcnhfbW9kZSxcbiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcbiBcdC5uZG9fcG9sbF9jb250cm9sbGVyXHQ9IHJ0bDgxNjlfbmV0cG9sbCxcbkBAIC01NDc0LDE2ICYjNDM7NTYxOSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICYjNDM7NTczNCwyNDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbiYjNDM7XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4mIzQzO1x0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXG4mIzQzO1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbiYjNDM7XHRcdFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuJiM0MztcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xuJiM0MztcbiYjNDM7XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXBjcy5vcHMpXG4mIzQzO1x0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHR1MTYgdmFsID0gMDtcbiYjNDM7XG4mIzQzO1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19BRERSX1JFRywgc2RzX3JlZyk7XG4mIzQzO1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4mIzQzO1x0dmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpO1xuJiM0MztcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdmFsO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4mIzQzO1x0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbiYjNDM7XHRcdHUxNiBzdGF0MTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUykpXG4mIzQzO1x0XHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VsaW5rID0gISEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUyk7XG4mIzQzO1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoc3RhdGUtXHUwMDNlaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgpXG4mIzQzO1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTE2IGJtc3IsIGxwYTtcbiYjNDM7XG4mIzQzO1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfQk1TUik7XG4mIzQzO1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9MUEEpO1xuJiM0MztcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuJiM0MztcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOlxuJiM0MztcdFx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGNhc2UgUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDpcbiYjNDM7XHRcdFx0cjgxMjdfc2ZwX2luaXRfMWcodHApO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdGRlZmF1bHQ6XG4mIzQzO1x0XHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcJiMzNDtVbnN1cHBvcnRlZCBTRlAgaW50ZXJmYWNlIG1vZGU6ICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbiYjNDM7XHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIGZhbHNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lciwgYm9vbCB0eF9jbGtfc3RvcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuJiM0MztcbiYjNDM7XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBydGxfcGh5bGlua19tYWNfb3BzID0ge1xuJiM0MztcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcbiYjNDM7XHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxuJiM0MztcdC5tYWNfbGlua19kb3duICA9IHJ0bF9tYWNfbGlua19kb3duLFxuJiM0MztcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcbiYjNDM7XHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcbiYjNDM7XHQubWFjX2VuYWJsZV90eF9scGkgPSBydGxfbWFjX2VuYWJsZV90eF9scGksXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyBydGw4MTY5X2dldF9scGlfY2FwcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7XHRjYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4mIzQzO1xuJiM0MztcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXG4mIzQzO1x0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzI1MDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0Y2FwcyB8PSBNQUNfNTAwMEZEO1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuJiM0MztcdFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNhcHM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XG4mIzQzO1x0LnBjc192YWxpZGF0ZSA9IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlLFxuJiM0MztcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxuJiM0MztcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxuJiM0MztcdC5wY3NfYW5fcmVzdGFydCA9IHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bF9pbml0X3BoeWxpbmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcGh5bGluayAqcGw7XG4mIzQzO1x0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcdTAwMjZ0cC1cdTAwM2VkZXYtXHUwMDNlZGV2O1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTtcbiYjNDM7XG4mIzQzO1x0c3dpdGNoICh0cC1cdTAwM2VzZnBfbW9kZSkge1xuJiM0MztcdGNhc2UgUlRMX1NGUF84MTY4X0FGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODEyN19BVEY6XG4mIzQzO1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbiYjNDM7XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4mIzQzO1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0ZGVmYXVsdDpcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbiYjNDM7XG4mIzQzO1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xuJiM0MztcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiYjNDM7XHRcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuJiM0MztcdFx0XHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4mIzQzO1x0XHRcdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdF9fc2V0X2JpdChwaHlfbW9kZSwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuJiM0MztcdGlmICh0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzKVxuJiM0MztcdFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7XG4mIzQzO1xuJiM0MztcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuJiM0MztcdFx0XHQgICAgcGh5X21vZGUsIFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xuJiM0MztcdGlmIChJU19FUlIocGwpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuJiM0MztcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rID0gcGw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiAmIzQzOzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHRcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XG4gXHR0cC1cdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXHUwMDNlbWFjX3ZlcnNpb247XG4gXHR0cC1cdTAwM2Vmd19uYW1lID0gY2hpcC1cdTAwM2Vmd19uYW1lO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiBcbiBcdC8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nXG4gXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cbkBAIC01Njc5LDEyICYjNDM7NjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbiYjNDM7XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xuIFxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG5AQCAtNTc4OCwxMyAmIzQzOzYxNjAsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgdHApO1xuIFxuLVx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcbiYjNDM7XHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4mIzQzO1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkge1xuJiM0MztcdFx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcbiYjNDM7XHRcdGlmIChyYykge1xuJiM0MztcdFx0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4mIzQzO1x0XHRcdHJldHVybiByYztcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcbi1cdGlmIChyYylcbiYjNDM7XHRpZiAocmMpIHtcbiYjNDM7XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdFx0cmV0dXJuIHJjO1xuJiM0MztcdH1cbiBcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xuIFx0XHRpZiAocnRsX2lzXzgxMjUodHApKVxuQEAgLTU4MTcsNiAmIzQzOzYxOTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuJiM0MztcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbiYjNDM7XHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuJiM0MztcbiBcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjllOWNkNzkzMDFkNjZjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuY1xuQEAgLTE4MjgsNiAmIzQzOzE4MjgsOTMgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbiYjNDM7LyoqXG4mIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2VcbiYjNDM7ICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcbiYjNDM7ICpcbiYjNDM7ICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4mIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cbiYjNDM7ICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBvbGRfcGF1c2UsIGNhcHNfYWRkZWQsIGNhcHNfcmVtb3ZlZDtcbiYjNDM7XHRib29sIHBhdXNlX2FkdiwgYXN5bV9hZHY7XG4mIzQzO1xuJiM0MztcdEFTU0VSVF9SVE5MKCk7XG4mIzQzO1xuJiM0MztcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuJiM0MztcdFx0cGh5bGlua19lcnIocGwsIFwmIzM0O0F0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b2xkX3BhdXNlID0gcGwtXHUwMDNlY29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgXHUwMDI2IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuJiM0MztcdGNhcHNfYWRkZWQgPSBtYWNfcGF1c2UgXHUwMDI2IH5vbGRfcGF1c2U7XG4mIzQzO1x0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFx1MDAyNiB+bWFjX3BhdXNlO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNhcHNfYWRkZWQgXHUwMDI2XHUwMDI2ICFjYXBzX3JlbW92ZWQpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlc3RhdGVfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjY9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbiYjNDM7XHRwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyB8PSBtYWNfcGF1c2U7XG4mIzQzO1xuJiM0MztcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19TWU1fUEFVU0UpXG4mIzQzO1x0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19BU1lNX1BBVVNFKVxuJiM0MztcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdGlmIChjYXBzX2FkZGVkIFx1MDAyNiBNQUNfU1lNX1BBVVNFKSB7XG4mIzQzO1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbiYjNDM7XHRcdGlmIChwbC1cdTAwM2VwaHlkZXYgXHUwMDI2XHUwMDI2ICFwaHlsaW5rX3Rlc3QocGwtXHUwMDNlcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiM0MztcdH1cbiYjNDM7XHRpZiAoY2Fwc19hZGRlZCBcdTAwMjYgTUFDX0FTWU1fUEFVU0UpIHtcbiYjNDM7XHRcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0XHRpZiAocGwtXHUwMDNlcGh5ZGV2IFx1MDAyNlx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVx1MDAzZXBoeWRldi1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4mIzQzO1xuJiM0MztcdGlmIChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9BTikge1xuJiM0MztcdFx0aWYgKHBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIFBhdXNlKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfUlgpIFx1MDAyNlx1MDAyNiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxuJiM0MztcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAocGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcbiYjNDM7XHRcdFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghcGwtXHUwMDNlcGh5ZGV2KVxuJiM0MztcdFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XG4mIzQzO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VzdGF0ZV9tdXRleCk7XG4mIzQzO1xuJiM0MztcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbiYjNDM7XHRcdHBhdXNlX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZyk7XG4mIzQzO1x0XHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxuJiM0MztcdFx0XHRcdFx0ICAgICBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuJiM0MztcbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdFx0bGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4mIzQzO1x0XHRcdFx0IHBsLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZywgcGF1c2VfYWR2KTtcbiYjNDM7XHRcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4mIzQzO1x0XHRcdFx0IHBsLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZywgYXN5bV9hZHYpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXBoeWRldi1cdTAwM2Vsb2NrKTtcbiYjNDM7XG4mIzQzO1x0XHRwaHlfc3RhcnRfYW5lZyhwbC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XG4gLyoqXG4gICogcGh5bGlua19jcmVhdGUoKSAtIGNyZWF0ZSBhIHBoeWxpbmsgaW5zdGFuY2VcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcdTAwMjZzdHJ1Y3QgcGh5bGlua19jb25maWdcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uNDcyMWJhMDcxY2JiZTQgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbkBAIC0xNyw3ICYjNDM7MTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcJiMzNDsuLi9waHlsaWIuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O3JlYWx0ZWsuaFwmIzM0O1xuQEAgLTI2NDYsNDUgJiM0MzsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdHJldHVybiBJUlFfSEFORExFRDtcbiB9XG4gXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLXtcbi1cdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfMTAwMDBiYXNlVF9GdWxsX0JJVCxcbi1cdFx0XHQgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCk7XG4tXG4tXHQvKiBzZXQgZGVmYXVsdCBtb2RlICovXG4tXHRwaHlkZXYtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbi1cdHBoeWRldi1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbi1cbi1cdHBoeWRldi1cdTAwM2Vwb3J0ID0gUE9SVF9GSUJSRTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRpbnQgdmFsLCBlcnI7XG4tXG4tXHRlcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTtcbi1cdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4tXG4tXHRpZiAoIXBoeWRldi1cdTAwM2VsaW5rKVxuLVx0XHRyZXR1cm4gMDtcbi1cbi1cdHZhbCA9IHBoeV9yZWFkKHBoeWRldiwgUlRMX1BIWVNSKTtcbi1cdGlmICh2YWwgXHUwMDNjIDApXG4tXHRcdHJldHVybiB2YWw7XG4tXG4tXHRydGxnZW5fZGVjb2RlX3BoeXNyKHBoeWRldiwgdmFsKTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xuIFx0e1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDAwODIwMSksXG5AQCAtMjkzNCwyMCAmIzQzOzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCYjMzQ7UmVhbHRlayBTRlAgUEhZIE1vZGVcJiMzNDssXG4tXHRcdC5mbGFnc1x0XHQ9IFBIWV9JU19JTlRFUk5BTCxcbi1cdFx0LnByb2JlXHRcdD0gcnRsODIyeF9wcm9iZSxcbi1cdFx0LmdldF9mZWF0dXJlc1x0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcbi1cdFx0LmNvbmZpZ19hbmVnXHQ9IHJ0bGdlbl9zZnBfY29uZmlnX2FuZWcsXG4tXHRcdC5yZWFkX3N0YXR1c1x0PSBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzLFxuLVx0XHQuc3VzcGVuZFx0PSBnZW5waHlfc3VzcGVuZCxcbi1cdFx0LnJlc3VtZVx0XHQ9IHJ0bGdlbl9yZXN1bWUsXG4tXHRcdC5yZWFkX3BhZ2VcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXG4tXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbi1cdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4tXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4gXHR9LCB7XG4gXHRcdFBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMWNjYWQwKSxcbiBcdFx0Lm5hbWVcdFx0PSBcJiMzNDtSVEw4MjI0IDIuNUdicHMgUEhZXCYjMzQ7LFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbmluZGV4IDJiYzBkYjNkNTJhYzhkLi5lM2M3ODIyMTAwYWJhNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7XG4gXG4gdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2VuZChzdHJ1Y3QgcGh5bGluayAqcGwpO1xuIFxuJiM0Mzt2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG4mIzQzO1xuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcbmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggZDY4M2JjMWIwNjU5Y2QuLjAwMDAwMDAwMDAwMDAwXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuJiM0MzsmIzQzOyYjNDM7IC9kZXYvbnVsbFxuQEAgLTEsNyAmIzQzOzAsMCBAQFxuLS8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxuLSNkZWZpbmUgX1JFQUxURUtfUEhZX0hcbi1cbi0jZGVmaW5lXHRQSFlfSURfUlRMX0RVTU1ZX1NGUFx0MHgwMDFjY2JmZlxuLVxuLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjMzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2NoYW5nZV9tdHUmIzM0OywKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua191cCYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX3NlbGVjdF9wY3MmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfcmVhZCYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfd3JpdGUmIzM0OywKICAgICYjMzQ7cjgxMjdfc2RzX21vZGlmeSYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xZyYjMzQ7LAogICAgJiMzNDtyODEyN19zZnBfaW5pdF8xMGcmIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGxfaXNfODExNmFmJiMzNDssCiAgICAmIzM0O3J0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfbndheV9yZXNldCYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAxMCAwNTozMzo1NyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhYS4uNTgxOGE5YTUwMGE4NmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKQEAgLTg2LDggJiM0Mzs4Niw4IEBAIGNvbmZpZyBSODE2OQogCWRlcGVuZHMgb24gUENJCiAJc2VsZWN0IEZXX0xPQURFUgogCXNlbGVjdCBDUkMzMgotCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgUkVBTFRFS19QSFkKJiM0MzsJc2VsZWN0IFBIWUxJTksKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0bwogCSAgdGhlIGZvbGxvd2luZyBmYW1pbGllczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKaW5kZXggZWM0ZmMyMWZhMjFmYjAuLmMwYjBjMmJjNWE0ODU1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjYsMTIgJiM0MzsyNiwxMiBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2RtYS1tYXBwaW5nLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcG1fcnVudGltZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdGZpZWxkLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3BoeWxpbmsuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wcmVmZXRjaC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2lwdjYuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvaXA2X2NoZWNrc3VtLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L25ldGRldl9xdWV1ZXMuaCZndDsKLSNpbmNsdWRlICZsdDtuZXQvcGh5L3JlYWx0ZWtfcGh5LmgmZ3Q7CiAKICNpbmNsdWRlICYjMzQ7cjgxNjkuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O3I4MTY5X2Zpcm13YXJlLmgmIzM0OwpAQCAtOTYsNiAmIzQzOzk2LDI1IEBACiAjZGVmaW5lIEpVTUJPXzlLCSg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAjZGVmaW5lIEpVTUJPXzE2SwkoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogCiYjNDM7I2RlZmluZSBSODEyN19TRFNfQ01ECQkweDIzNDgKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19BRERSCQkweDIzNGEKJiM0MzsjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOCTB4MjM0YwomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfT1VUCTB4MjM0ZQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDCUJJVCgwKQomIzQzOyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRQlCSVQoMSkKJiM0MzsjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUcJMHhlYjEwCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0NNRF9SRUcJCTB4ZWIwZQomIzQzOyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFRwkweGViMTQKJiM0MzsjZGVmaW5lIFNEU19DTURfUkVBRAkJMHgwMDAxCiYjNDM7I2RlZmluZSBSVExfU0RTX0MyMl9CQVNFCTB4NDAKJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0UJMHgwMDgwCiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVAkJMHhkYzAwCiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLCTB4MDA3OAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGCTB4MDAzMAomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRAkJMHhkMDA2CiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0sJMHgwMGZmCiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRgkweDAwMDAKJiM0MzsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7CiAJdTMyIG1hc2s7CiAJdTMyIHZhbDsKQEAgLTMzNCwxMSAmIzQzOzM1MywxMyBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMgewogCUFMRFBTX0xUUgk9IDB4ZTBhMiwKIAlMVFJfT0JGRl9MT0NLCT0gMHhlMDMyLAogCUxUUl9TTk9PUAk9IDB4ZTAzNCwKJiM0MzsJU0VORF9MVFJfTVNHCT0gMHhlMDM4LAogCiAjZGVmaW5lIEFMRFBTX0xUUl9FTgkJCUJJVCgwKQogI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOCQlCSVQoMCkKICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU4JCUJJVCgxNCkKICNkZWZpbmUgTFRSX1NOT09QX0VOCQkJR0VOTUFTSygxNSwgMTQpCiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOCQkJQklUKDApCiB9OwogCiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMgewpAQCAtNzI4LDYgJiM0Mzs3NDksMTIgQEAgZW51bSBydGxfZGFzaF90eXBlIHsKIAlSVExfREFTSF8yNV9CUCwKIH07CiAKJiM0MztlbnVtIHJ0bF9zZnBfbW9kZSB7CiYjNDM7CVJUTF9TRlBfTk9ORSwKJiM0MzsJUlRMX1NGUF84MTY4X0FGLAomIzQzOwlSVExfU0ZQXzgxMjdfQVRGLAomIzQzO307CiYjNDM7CiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl2b2lkIF9faW9tZW0gKm1taW9fYWRkcjsJLyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CkBAIC03MzYsNiAmIzQzOzc2Myw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpOwogCWVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247CiAJZW51bSBydGxfZGFzaF90eXBlIGRhc2hfdHlwZTsKJiM0MzsJZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7CiAJdTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovCiAJdTMyIGRpcnR5X3R4OwpAQCAtNzUwLDYgJiM0Mzs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl1MzIgaXJxX21hc2s7CiAJaW50IGlycTsKIAlzdHJ1Y3QgY2xrICpjbGs7CiYjNDM7CWludCBzcGVlZDsKIAogCXN0cnVjdCB7CiAJCURFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpOwpAQCAtNzYyLDcgJiM0Mzs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHsKIAl1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7CiAJdW5zaWduZWQgYXNwbV9tYW5hZ2VhYmxlOjE7CiAJdW5zaWduZWQgZGFzaF9lbmFibGVkOjE7Ci0JYm9vbCBzZnBfbW9kZToxOwogCWRtYV9hZGRyX3QgY291bnRlcnNfcGh5c19hZGRyOwogCXN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVyczsKIAlzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDsKQEAgLTc3NCw2ICYjNDM7ODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkczsKIAogCXUzMiBvY3BfYmFzZTsKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiYjNDM7CXN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZzsKJiM0MzsJc3RydWN0IHBoeWxpbmtfcGNzIHBjczsKIH07CiAKIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApOwpAQCAtMTEyOCwxMCAmIzQzOzExNTksNiBAQCBzdGF0aWMgaW50IHI4MTY4X3BoeV9vY3BfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTMyIHJlZykKIAlpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKQogCQlyZXR1cm4gMDsKIAotCS8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqLwotCWlmICh0cC0mZ3Q7c2ZwX21vZGUgJmFtcDsmYW1wOyByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSkKLQkJcmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQICZhbXA7IDB4ZmZmZjsKLQogCVJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgJmx0OyZsdDsgMTUpOwogCiAJcmV0dXJuIHJ0bF9sb29wX3dhaXRfaGlnaCh0cCwgJmFtcDtydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/CkBAIC0xMTk5LDYgJiM0MzsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXVzbGVlcF9yYW5nZSgxMCwgMjApOwogfQogCiYjNDM7REVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpCiYjNDM7ewomIzQzOwlyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0NNRCkgJmFtcDsgUjgxMjdfU0RTX0NNRF9FWEVDOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKQomIzQzO3sKJiM0MzsJdTE2IGFkZHIgPSAoaW5kZXggJmx0OyZsdDsgMTEpIHwgKHBhZ2UgJmx0OyZsdDsgNSkgfCByZWc7CiYjNDM7CiYjNDM7CVJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDKTsKJiM0MzsKJiM0MzsJaWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCAmYW1wO3I4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpCiYjNDM7CQlyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcjgxMjdfc2RzX3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLAomIzQzOwkJCSAgIHUxNiByZWcsIHUxNiB2YWwpCiYjNDM7ewomIzQzOwl1MTYgYWRkciA9IChpbmRleCAmbHQ7Jmx0OyAxMSkgfCAocGFnZSAmbHQ7Jmx0OyA1KSB8IHJlZzsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0RBVEFfSU4sIHZhbCk7CiYjNDM7CVJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTsKJiM0MzsJUlRMX1cxNih0cCwgUjgxMjdfU0RTX0NNRCwgUjgxMjdfU0RTX0NNRF9FWEVDIHwgUjgxMjdfU0RTX0NNRF9XRSk7CiYjNDM7CiYjNDM7CWlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgJmFtcDtyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLAomIzQzOwkJCSAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spCiYjNDM7ewomIzQzOwlpbnQgdmFsID0gcjgxMjdfc2RzX3JlYWQodHAsIGluZGV4LCBwYWdlLCByZWcpOwomIzQzOwomIzQzOwlpZiAodmFsICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJdmFsID0gKHZhbCAmYW1wOyB+Y2xlYXJtYXNrKSB8IHNldG1hc2s7CiYjNDM7CXI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpbnQgdmFsOwomIzQzOwomIzQzOwlyODEyN19zZnBfc2RzX3BoeV9yZXNldCh0cCk7CiYjNDM7CiYjNDM7CXI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpOwomIzQzOwlyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAyLCAgMCwgQklUKDEzKSB8IEJJVCgxMikgfCBCSVQoNiksIEJJVCgxMikgfCBCSVQoNikpOwomIzQzOwlyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAwLCAgNCwgMCwgQklUKDIpKTsKJiM0MzsKJiM0MzsJUlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpOwomIzQzOwlSVExfVzE2KHRwLCAweDIzM2UsIChSVExfUjE2KHRwLCAweDIzM2UpICZhbXA7IH4weDMwMDMpIHwgMHgwMDAyKTsKJiM0MzsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApOwomIzQzOwlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0NjYsIDB4MDAwMCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwOCwgMHgwMDAwKTsKJiM0MzsJcjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApOwomIzQzOwomIzQzOwl2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7CiYjNDM7CXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCWludCB2YWw7CkBAIC0xMjE3LDEyICYjNDM7MTMxMSw2IEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgJmFtcDsgfjB4MDAwZikgfCAweDAwMGMpOwogfQogCi1zdGF0aWMgdm9pZCBydGxfc2ZwX2luaXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCi17Ci0JaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQotCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwotfQotCiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKQEAgLTEyODMsNiAmIzQzOzEzNzEsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKQogCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIHRwLSZndDtvY3BfYmFzZSAmIzQzOyByZWcsIHZhbHVlKTsKIH0KIAomIzQzO3N0YXRpYyBib29sIHJ0bF9pc184MTE2YWYoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlyZXR1cm4gdHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgJmFtcDsmYW1wOwomIzQzOwkJKHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpICZhbXA7IFJUTF9QS0dfREVURUNUX01BU0spID09CiYjNDM7CQlSVExfUEtHX0RFVEVDVF84MTE2QUYgJmFtcDsmYW1wOwomIzQzOwkJKHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgJmFtcDsgUlRMX0lOVF9IV19JRF9NQVNLKSA9PQomIzQzOwkJUlRMX0lOVF9IV19JRF84MTE2QUY7CiYjNDM7fQomIzQzOwogc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpCiB7CiAJcmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZyk7CkBAIC0xNTc4LDYgJiM0MzsxNjc1LDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJfQogfQogCiYjNDM7c3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwlpZiAocnRsX2lzXzgxMjUodHApKSB7CiYjNDM7CQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7CiYjNDM7CiYjNDM7CQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKJiM0MzsJCQlyZXR1cm4gUlRMX1NGUF84MTI3X0FURjsKJiM0MzsJfSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkgewomIzQzOwkJcmV0dXJuIFJUTF9TRlBfODE2OF9BRjsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gUlRMX1NGUF9OT05FOwomIzQzO30KJiM0MzsKIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKQEAgLTE2NzMsMTYgJiM0MzsxNzg0LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlydGxfcGNpX2NvbW1pdCh0cCk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZCkKIHsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtJmd0O3BoeWRldjsKLQogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fAogCSAgICB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiYjNDM7CQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKLQkJfSBlbHNlIGlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMCkgewomIzQzOwkJfSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApIHsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7CiAJCX0gZWxzZSB7CkBAIC0xNjkyLDcgJiM0MzsxODAxLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fAogCQkgICB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiYjNDM7CQlpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE3MDAsNyAmIzQzOzE4MDksNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDNmKTsKIAkJfQogCX0gZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHsKLQkJaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpOwogCQl9IGVsc2UgewpAQCAtMjA3NCwxMSAmIzQzOzIxODMsMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCWNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2OwogCiAJLyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi8KLQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfVU5LTk9XTikKJiM0MzsJaWYgKHRwLSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQogCQlyZXR1cm4gY2k7CiAKIAlmb3IgKDsgY2ktJmd0O3NwZWVkOyBjaSYjNDM7JiM0MzspIHsKLQkJaWYgKHRwLSZndDtwaHlkZXYtJmd0O3NwZWVkID09IGNpLSZndDtzcGVlZCkKJiM0MzsJCWlmICh0cC0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQogCQkJcmV0dXJuIGNpOwogCX0KIApAQCAtMjIzNiw3ICYjNDM7MjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAogc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtwaHlkZXYtJmd0O3NwZWVkOwomIzQzOwl1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC0mZ3Q7c3BlZWQ7CiAJdW5zaWduZWQgaW50IHRpbWVyID0gdHAtJmd0O3R4X2xwaV90aW1lcjsKIAogCWlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTikKQEAgLTIyNTQsNyAmIzQzOzIzNjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWRldiwgZGF0YSk7CiYjNDM7CXJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLSZndDtwaHlsaW5rLCBkYXRhKTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCkBAIC0yMjcwLDcgJiM0MzsyMzc5LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSkKIAlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlsaW5rLCBkYXRhKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMzAxLDEzICYjNDM7MjQxMCw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCQkgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlib29sIHR4X3BhdXNlLCByeF9wYXVzZTsKLQotCXBoeV9nZXRfcGF1c2UodHAtJmd0O3BoeWRldiwgJmFtcDt0eF9wYXVzZSwgJmFtcDtyeF9wYXVzZSk7CiAKLQlkYXRhLSZndDthdXRvbmVnID0gdHAtJmd0O3BoeWRldi0mZ3Q7YXV0b25lZzsKLQlkYXRhLSZndDt0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7Ci0JZGF0YS0mZ3Q7cnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwOwomIzQzOwlwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMTgsOSAmIzQzOzI0MjIsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlpZiAoZGV2LSZndDttdHUgJmd0OyBFVEhfREFUQV9MRU4pCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXBoeV9zZXRfYXN5bV9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhLSZndDtyeF9wYXVzZSwgZGF0YS0mZ3Q7dHhfcGF1c2UpOwotCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMzg2LDM0ICYjNDM7MjQ4OCwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQlsZTMyX3RvX2NwdSh0cC0mZ3Q7Y291bnRlcnMtJmd0O3J4X3Vua25vd25fb3Bjb2RlKTsKIH0KIAotc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKLQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKQomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtJmd0O3BoeWRldjsKLQlpbnQgZHVwbGV4ID0gY21kLSZndDtiYXNlLmR1cGxleDsKLQlpbnQgc3BlZWQgPSBjbWQtJmd0O2Jhc2Uuc3BlZWQ7Ci0KLQlpZiAoIXRwLSZndDtzZnBfbW9kZSkKLQkJcmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpOwotCi0JaWYgKGNtZC0mZ3Q7YmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtJmd0O3N1cHBvcnRlZCkpCi0JCXJldHVybiAtRUlOVkFMOwogCi0JbXV0ZXhfbG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC0mZ3Q7cGh5bGluaywgY21kKTsKJiM0Mzt9CiAKLQlwaHlkZXYtJmd0O2F1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7Ci0JcGh5ZGV2LSZndDtzcGVlZCA9IHNwZWVkOwotCXBoeWRldi0mZ3Q7ZHVwbGV4ID0gZHVwbGV4OwomIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsCiYjNDM7CQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwogCi0JcnRsX3NmcF9pbml0KHRwKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCW11dGV4X3VubG9jaygmYW1wO3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAotCXJldHVybiAwOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtJmd0O3BoeWxpbmspOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7CkBAIC0yNDMxLDEwICYjNDM7MjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7CiAJLmdldF9zc2V0X2NvdW50CQk9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsCiAJLmdldF9ldGh0b29sX3N0YXRzCT0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cywKIAkuZ2V0X3RzX2luZm8JCT0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbywKLQkubndheV9yZXNldAkJPSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LAomIzQzOwkubndheV9yZXNldAkJPSBydGw4MTY5X253YXlfcmVzZXQsCiAJLmdldF9lZWUJCT0gcnRsODE2OV9nZXRfZWVlLAogCS5zZXRfZWVlCQk9IHJ0bDgxNjlfc2V0X2VlZSwKLQkuZ2V0X2xpbmtfa3NldHRpbmdzCT0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLAomIzQzOwkuZ2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsCiAJLnNldF9saW5rX2tzZXR0aW5ncwk9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLAogCS5nZXRfcmluZ3BhcmFtCQk9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSwKIAkuZ2V0X3BhdXNlX3N0YXRzCT0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsCkBAIC0yNDk5LDkgJiM0MzsyNTk0LDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXRwLSZndDtvY3BfYmFzZSA9IE9DUF9TVERfUEhZX0JBU0U7CiAKIAkJLyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovCi0JCXBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC0mZ3Q7cGh5ZGV2LCBNSUlfQk1DUiwgdmFsLAotCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAotCQkJCSAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwomIzQzOwkJaWYgKHRwLSZndDtwaHlkZXYpCiYjNDM7CQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCiYjNDM7CQkJCQkgICAgICAhKHZhbCAmYW1wOyBCTUNSX1JFU0VUKSwKJiM0MzsJCQkJCSAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpOwogCX0KIH0KIApAQCAtMjUzOCw2ICYjNDM7MjYzNCw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpCiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiYjNDM7CXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwogCXI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLSZndDtwaHlkZXYsIHRwLSZndDttYWNfdmVyc2lvbik7CiAKIAlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDs9IFJUTF9HSUdBX01BQ19WRVJfMDYpIHsKQEAgLTI1NTIsOSAmIzQzOzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCSAgICB0cC0mZ3Q7cGNpX2Rldi0mZ3Q7c3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApCiAJCXBoeV93cml0ZV9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7CiAKLQlpZiAodHAtJmd0O3NmcF9tb2RlKQotCQlydGxfc2ZwX2luaXQodHApOwotCiAJLyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqLwogCXBoeV9zcGVlZF91cCh0cC0mZ3Q7cGh5ZGV2KTsKIApAQCAtMjY1NywxNSAmIzQzOzI3NTIsNiBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJaWYgKHBjaV9pc19wY2llKHRwLSZndDtwY2lfZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzdXBwb3J0c19nbWlpKQogCQlwY2llX3NldF9yZWFkcnEodHAtJmd0O3BjaV9kZXYsIHJlYWRycSk7Ci0KLQkvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqLwotCWlmIChqdW1ibykgewotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJcGh5X3N0YXJ0X2FuZWcodHAtJmd0O3BoeWRldik7Ci0JfQogfQogCiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpCkBAIC0yNzgwLDcgJiM0MzsyODY2LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7CiAKIAlpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHsKLQkJcGh5X3NwZWVkX2Rvd24odHAtJmd0O3BoeWRldiwgZmFsc2UpOwomIzQzOwkJcGh5bGlua19zcGVlZF9kb3duKHRwLSZndDtwaHlsaW5rLCBmYWxzZSk7CiAJCXJ0bF93b2xfZW5hYmxlX3J4KHRwKTsKIAl9CiB9CkBAIC0yODMyLDYgJiM0MzsyOTE4LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAlSVExfVzMyKHRwLCAweDdjLCB2YWwpOwogfQogCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwomIzQzOwlpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSkKJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwomIzQzOwlyZXR1cm4gcGh5bGlua19taWlfaW9jdGwodHAtJmd0O3BoeWxpbmssIGlmciwgY21kKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAl1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDsKQEAgLTMwOTgsOCAmIzQzOzMxOTQsMjMgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RmMiwgMHg5MDAzKTsKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pOwogCQlicmVhazsKLQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiAJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpOwomIzQzOwkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMCwgTElOS19TUEVFRF9DSEFOR0VfRU4pOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pOwogCQlSVExfVzgodHAsIENPTUJPX0xUUl9FWFRFTkQsIFJUTF9SOCh0cCwgQ09NQk9fTFRSX0VYVEVORCkgfCBDT01CT19MVFJfRVhURU5EX0VOKTsKIAkJZmFsbHRocm91Z2g7CkBAIC0zMTE5LDYgJiM0MzszMjMwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJfQogCS8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7CiYjNDM7CXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBTRU5EX0xUUl9NU0csIDB4MDAwMCwgTFRSX01TR19FTik7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQpAQCAtMzE1Miw2ICYjNDM7MzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQogCQlydGxfZW5hYmxlX2x0cih0cCk7CiAJCXN3aXRjaCAodHAtJmd0O21hY192ZXJzaW9uKSB7CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKJiM0MzsJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6CiAJCQkvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi8KIAkJCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7CkBAIC0zMTY0LDYgJiM0MzszMjc3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfSBlbHNlIHsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7CiAJCQlicmVhazsKQEAgLTM2NTcsNiAmIzQzOzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LSZndDtkZXZmbik7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LSZndDtidXM7CiYjNDM7CWludCBmdW5jLCBwb3M7CiYjNDM7CXUxNiB2YWw7CiYjNDM7CiYjNDM7CWZvciAoZnVuYyA9IDI7IGZ1bmMgJmx0OyA4OyBmdW5jJiM0MzsmIzQzOykgewomIzQzOwkJdW5zaWduZWQgaW50IGRldmZuID0gUENJX0RFVkZOKHNsb3QsIGZ1bmMpOwomIzQzOwomIzQzOwkJcG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApOwomIzQzOwkJaWYgKHBvcykgewomIzQzOwkJCXBjaV9idXNfcmVhZF9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgJiM0MzsgUENJX0VYUF9MTktDVEwsICZhbXA7dmFsKTsKJiM0MzsKJiM0MzsJCQlpZiAoUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwomIzQzOwkJCXZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pOwomIzQzOwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9FWFBfTE5LQ1RMLCB2YWwpOwomIzQzOwkJfQomIzQzOwomIzQzOwkJcG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7CiYjNDM7CQlpZiAocG9zKSB7CiYjNDM7CQkJcGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyAmIzQzOyBQQ0lfUE1fQ1RSTCwgJmFtcDt2YWwpOwomIzQzOwomIzQzOwkJCWlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkKJiM0MzsJCQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkJdmFsICZhbXA7PSB+UENJX1BNX0NUUkxfU1RBVEVfTUFTSzsKJiM0MzsJCQl2YWwgfD0gUENJX0QzaG90OwomIzQzOwkJCXZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOwomIzQzOwkJCXBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICYjNDM7IFBDSV9QTV9DVFJMLCB2YWwpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHsKQEAgLTM2OTMsMTIgJiM0MzszODQzLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJcnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTsKIAotCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKLQlpZiAocmdfc2F3X2NudCAmZ3Q7IDApIHsKLQkJdTE2IHN3X2NudF8xbXNfaW5pOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikgewomIzQzOwkJcmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MGM0MiwgMHgxMykgJmFtcDsgMHgzZmZmOwomIzQzOwkJaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7CiYjNDM7CQkJdTE2IHN3X2NudF8xbXNfaW5pOwogCi0JCXN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgJmFtcDsgMHgwZmZmOwotCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKJiM0MzsJCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCX0KIAl9CiAKIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7CkBAIC00MTM5LDEyICYjNDM7NDI5MSwyNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKQogc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlib29sIGp1bWJvX2JlZm9yZSA9IGRldi0mZ3Q7bXR1ICZndDsgRVRIX0RBVEFfTEVOOwomIzQzOwlib29sIGp1bWJvX2FmdGVyID0gbmV3X210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKIAogCVdSSVRFX09OQ0UoZGV2LSZndDttdHUsIG5ld19tdHUpOwogCW5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTsKIAlydGxfanVtYm9fY29uZmlnKHRwKTsKIAlydGxfc2V0X2VlZV90eGlkbGVfdGltZXIodHApOwogCiYjNDM7CWlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHsKJiM0MzsJCXVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzOwomIzQzOwomIzQzOwkJaWYgKGp1bWJvX2FmdGVyKQomIzQzOwkJCWNhcHMgJmFtcDs9IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQljYXBzIHw9IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwomIzQzOwkJcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC0mZ3Q7cGh5bGluaywgY2Fwcyk7CiYjNDM7CX0KJiM0MzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNDg2OSw4ICYjNDM7NTAzNCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKQogCQlnb3RvIG91dDsKIAl9CiAKLQlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpCi0JCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IExpbmtDaGcpIHsKJiM0MzsJCWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJCXBoeV9tYWNfaW50ZXJydXB0KHRwLSZndDtwaHlkZXYpOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwkJCXBoeWxpbmtfbWFjX2NoYW5nZSh0cC0mZ3Q7cGh5bGluaywKJiM0MzsJCQkJCSAgICEhKFJUTF9SOCh0cCwgUEhZc3RhdHVzKSAmYW1wOyBMaW5rU3RhdHVzKSk7CiYjNDM7CX0KIAogCXJ0bF9pcnFfZGlzYWJsZSh0cCk7CiAJbmFwaV9zY2hlZHVsZSgmYW1wO3RwLSZndDtuYXBpKTsKQEAgLTQ5MzAsOSAmIzQzOzUxMDAsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpCiAKIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIHsKLQlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjoKIAkJLyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovCkBAIC00OTYzLDQwICYjNDM7NTEzMCwxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJfQogfQogCi1zdGF0aWMgdm9pZCByODE2OV9waHlsaW5rX2hhbmRsZXIoc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYpCi17Ci0Jc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTsKLQlzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTsKLQotCWlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7Ci0JCXJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7Ci0JCXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC0mZ3Q7cGh5ZGV2LSZndDtlbmFibGVfdHhfbHBpKTsKLQkJcG1fcmVxdWVzdF9yZXN1bWUoZCk7Ci0JfSBlbHNlIHsKLQkJcG1fcnVudGltZV9pZGxlKGQpOwotCX0KLQotCXBoeV9wcmludF9zdGF0dXModHAtJmd0O3BoeWRldik7Ci19Ci0KIHN0YXRpYyBpbnQgcjgxNjlfcGh5X2Nvbm5lY3Qoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0Jc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLSZndDtwaHlkZXY7Ci0JcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwogCWludCByZXQ7CiAKLQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgotCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwotCi0JcmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLSZndDtkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLAotCQkJCSBwaHlfbW9kZSk7Ci0JaWYgKHJldCkKJiM0MzsJcmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluaywgdHAtJmd0O3BoeWRldik7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCW5ldGRldl9lcnIodHAtJmd0O2RldiwgJiMzNDtmYWlsZWQgdG8gY29ubmVjdCBwaHlcbiYjMzQ7KTsKIAkJcmV0dXJuIHJldDsKLQotCWlmICghdHAtJmd0O3N1cHBvcnRzX2dtaWkpCi0JCXBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTsKLQotCXBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7CiYjNDM7CX0KIAogCXJldHVybiAwOwogfQpAQCAtNTAwNywxMCAmIzQzOzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJLyogQ2xlYXIgYWxsIHRhc2sgZmxhZ3MgKi8KIAliaXRtYXBfemVybyh0cC0mZ3Q7d2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7CiAKLQlwaHlfc3RvcCh0cC0mZ3Q7cGh5ZGV2KTsKLQogCS8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQogCQlydGxfc2ZwX3Jlc2V0KHRwKTsKIAogCXJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTsKQEAgLTUwMzIsMTQgJiM0Mzs1MTcyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTsKIAogCXBjaV9zZXRfbWFzdGVyKHRwLSZndDtwY2lfZGV2KTsKLQlwaHlfaW5pdF9odyh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfcmVzdW1lKHRwLSZndDtwaHlkZXYpOwotCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCXJ0bDgxNjlfaW5pdF9waHkodHApOwomIzQzOwogCW5hcGlfZW5hYmxlKCZhbXA7dHAtJmd0O25hcGkpOwogCWVuYWJsZV93b3JrKCZhbXA7dHAtJmd0O3drLndvcmspOwogCXJ0bF9yZXNldF93b3JrKHRwKTsKLQotCXBoeV9zdGFydCh0cC0mZ3Q7cGh5ZGV2KTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDQ5LDEzICYjNDM7NTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAogCXBtX3J1bnRpbWVfZ2V0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXBoeWxpbmtfc3RvcCh0cC0mZ3Q7cGh5bGluayk7CiAJbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogCXJ0bDgxNjlfZG93bih0cCk7CiAJcnRsODE2OV9yeF9jbGVhcih0cCk7CiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsMTEgJiM0Mzs1MjUxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byBlcnJfcmVsZWFzZV9md18yOwogCi0JcmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApOwotCWlmIChyZXR2YWwpCi0JCWdvdG8gZXJyX2ZyZWVfaXJxOwotCiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAJcnRsODE2OV91cCh0cCk7CiYjNDM7CXBoeWxpbmtfc3RhcnQodHAtJmd0O3BoeWxpbmspOwogCXJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApOwogCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7CiBvdXQ6CkBAIC01MjIxLDYgJiM0Mzs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpCiAJLyogU29tZSBjaGlwIHZlcnNpb25zIG1heSB0cnVuY2F0ZSBwYWNrZXRzIHdpdGhvdXQgdGhpcyBpbml0aWFsaXphdGlvbiAqLwogCXJ0bF9pbml0X3J4Y2ZnKHRwKTsKIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJcmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTsKIH0KIApAQCAtNTI4OCw2ICYjNDM7NTQzMiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogCQlyODE2OV9yZW1vdmVfbGVkcyh0cC0mZ3Q7bGVkcyk7CiAKIAl1bnJlZ2lzdGVyX25ldGRldih0cC0mZ3Q7ZGV2KTsKJiM0MzsJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAogCWlmICh0cC0mZ3Q7ZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpCiAJCXJ0bDgxNjhfZHJpdmVyX3N0b3AodHApOwpAQCAtNTMxMCw3ICYjNDM7NTQ1NSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7CiAJLm5kb19maXhfZmVhdHVyZXMJPSBydGw4MTY5X2ZpeF9mZWF0dXJlcywKIAkubmRvX3NldF9mZWF0dXJlcwk9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLAogCS5uZG9fc2V0X21hY19hZGRyZXNzCT0gcnRsX3NldF9tYWNfYWRkcmVzcywKLQkubmRvX2V0aF9pb2N0bAkJPSBwaHlfZG9faW9jdGxfcnVubmluZywKJiM0MzsJLm5kb19ldGhfaW9jdGwJCT0gcnRsODE2OV9pb2N0bCwKIAkubmRvX3NldF9yeF9tb2RlCT0gcnRsX3NldF9yeF9tb2RlLAogI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSCiAJLm5kb19wb2xsX2NvbnRyb2xsZXIJPSBydGw4MTY5X25ldHBvbGwsCkBAIC01NDc0LDE2ICYjNDM7NTYxOSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzM0LDI0NyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghdHAtJmd0O3Bjcy5vcHMpCiYjNDM7CQlyZXR1cm4gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8CiYjNDM7CSAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKQomIzQzOwkJcmV0dXJuICZhbXA7dHAtJmd0O3BjczsKJiM0MzsKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MTYgdmFsID0gMDsKJiM0MzsKJiM0MzsJcmF3X3NwaW5fbG9ja19pcnFzYXZlKCZhbXA7dHAtJmd0O21hY19vY3BfbG9jaywgZmxhZ3MpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpOwomIzQzOwlfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTsKJiM0MzsJdmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpOwomIzQzOwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJcmV0dXJuIHZhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfZ2V0X3N0YXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLAomIzQzOwkJCQkgIHVuc2lnbmVkIGludCBuZWdfbW9kZSwKJiM0MzsJCQkJICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7CiYjNDM7CQl1MTYgc3RhdDE7CiYjNDM7CiYjNDM7CQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlpZiAoIShzdGF0MSAmYW1wOyBNRElPX1NUQVQxX0xTVEFUVVMpKQomIzQzOwkJCXN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtsaW5rID0gISEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKTsKJiM0MzsJCWlmICghc3RhdGUtJmd0O2xpbmspCiYjNDM7CQkJcmV0dXJuOwomIzQzOwomIzQzOwkJaWYgKHN0YXRlLSZndDtpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCkKJiM0MzsJCQlzdGF0ZS0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwOwomIzQzOwkJZWxzZQomIzQzOwkJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwomIzQzOwkJc3RhdGUtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHsKJiM0MzsJCXN3aXRjaCAoaW50ZXJmYWNlKSB7CiYjNDM7CQljYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjoKJiM0MzsJCQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwkJCWJyZWFrOwomIzQzOwkJY2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOgomIzQzOwkJCXI4MTI3X3NmcF9pbml0XzFnKHRwKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCWRlZmF1bHQ6CiYjNDM7CQkJbmV0ZGV2X2Vycih0cC0mZ3Q7ZGV2LCAmIzM0O1Vuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcbiYjMzQ7LAomIzQzOwkJCQkgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7CiYjNDM7CQkJcmV0dXJuIC1FT1BOT1RTVVBQOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsCiYjNDM7CQkJCWNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKQomIzQzO3sKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTsKJiM0MzsKJiM0MzsJcnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHsKJiM0MzsJLm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLAomIzQzOwkubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLAomIzQzOwkubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93biwKJiM0MzsJLm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLAomIzQzOwkubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSwKJiM0MzsJLm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIGNhcHMgPSAwOwomIzQzOwomIzQzOwlpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLSZndDtzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CWNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMKJiM0MzsJICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2VzbiYjMzk7dCBzdXBwb3J0IDIuNUcgZWVlCiYjNDM7CSAqLwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNjMpCiYjNDM7CQljYXBzIHw9IE1BQ18yNTAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl83MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzUwMDBGRDsKJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJY2FwcyB8PSBNQUNfMTAwMDBGRDsKJiM0MzsKJiM0MzsJcmV0dXJuIGNhcHM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7CiYjNDM7CS5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSwKJiM0MzsJLnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsCiYjNDM7CS5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLAomIzQzOwkucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBsOwomIzQzOwlwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7CiYjNDM7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZXYgPSAmYW1wO3RwLSZndDtkZXYtJmd0O2RldjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKJiM0MzsJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTsKJiM0MzsKJiM0MzsJc3dpdGNoICh0cC0mZ3Q7c2ZwX21vZGUpIHsKJiM0MzsJY2FzZSBSVExfU0ZQXzgxNjhfQUY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTI3X0FURjoKJiM0MzsJCXRwLSZndDtwY3Mub3BzID0gJmFtcDtyODE2OV9wY3Nfb3BzOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJX19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtJmd0O3BoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTsKJiM0MzsJCV9fc2V0X2JpdChQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwOwomIzQzOwomIzQzOwkJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHwKJiM0MzsJCQkJCQkJICAgICAgIE1BQ181MDAwRkQgfCBNQUNfMTAwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7CiYjNDM7CQllbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmd0Oz0gUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDsKJiM0MzsJCWVsc2UKJiM0MzsJCQlpZiAodHAtJmd0O3N1cHBvcnRzX2dtaWkpCiYjNDM7CQkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uICZsdDsgUlRMX0dJR0FfTUFDX1ZFUl82MSkKJiM0MzsJCQlwaHlfbW9kZSA9IHRwLSZndDtzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOgomIzQzOwkJCQkgICBQSFlfSU5URVJGQUNFX01PREVfTUlJOwomIzQzOwkJZWxzZQomIzQzOwkJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMOwomIzQzOwkJYnJlYWs7CiYjNDM7CX0KJiM0MzsKJiM0MzsJX19zZXRfYml0KHBoeV9tb2RlLCB0cC0mZ3Q7cGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMpCiYjNDM7CQlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7CiYjNDM7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNjAsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNiAmIzQzOzYxOTksOSBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAomIzQzOwlpZiAocnRsX2lzXzgxMTZhZih0cCkpCiYjNDM7CQlydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC0mZ3Q7cGNpX2Rldik7CiYjNDM7CiAJaWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpCiAJCXBtX3J1bnRpbWVfcHV0X3N5bmMoJmFtcDtwZGV2LSZndDtkZXYpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwppbmRleCA1OWRmZTM1YWZhNTRmYy4uOWU5Y2Q3OTMwMWQ2NmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYwpAQCAtMTgyOCw2ICYjNDM7MTgyOCw5MyBAQCBpbnQgcGh5bGlua19zZXRfZml4ZWRfbGluayhzdHJ1Y3QgcGh5bGluayAqcGwsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTsKIAomIzQzOy8qKgomIzQzOyAqIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoKSAtIER5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UKJiM0MzsgKiBAcGw6IGEgcG9pbnRlciB0byBhICZhbXA7c3RydWN0IHBoeWxpbmsgcmV0dXJuZWQgZnJvbSBwaHlsaW5rX2NyZWF0ZSgpCiYjNDM7ICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2sKJiM0MzsgKgomIzQzOyAqIFRoaXMgZnVuY3Rpb24gYWxsb3dzIGEgTUFDIGRyaXZlciB0byBkeW5hbWljYWxseSBjaGFuZ2UgaXRzIHBhdXNlIHN0YXRlLAomIzQzOyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS4KJiM0MzsgKiBJdCByZWNhbGN1bGF0ZXMgc3VwcG9ydGVkIGxpbmsgbW9kZXMgYW5kIHRyaWdnZXJzIHJlbmVnb3RpYXRpb24gaWYgbmVlZGVkLgomIzQzOyAqLwomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gJmFtcDtwbC0mZ3Q7bGlua19jb25maWc7CiYjNDM7CXVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlLCBjYXBzX2FkZGVkLCBjYXBzX3JlbW92ZWQ7CiYjNDM7CWJvb2wgcGF1c2VfYWR2LCBhc3ltX2FkdjsKJiM0MzsKJiM0MzsJQVNTRVJUX1JUTkwoKTsKJiM0MzsKJiM0MzsJaWYgKG1hY19wYXVzZSAmYW1wOyB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSkpIHsKJiM0MzsJCXBoeWxpbmtfZXJyKHBsLCAmIzM0O0F0dGVtcHRlZCB0byBkeW5hbWljYWxseSBjaGFuZ2Ugbm9uLXBhdXNlIE1BQyBjYXBhYmlsaXRpZXNcbiYjMzQ7KTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwomIzQzOwlvbGRfcGF1c2UgPSBwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzICZhbXA7IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwljYXBzX2FkZGVkID0gbWFjX3BhdXNlICZhbXA7IH5vbGRfcGF1c2U7CiYjNDM7CWNhcHNfcmVtb3ZlZCA9IG9sZF9wYXVzZSAmYW1wOyB+bWFjX3BhdXNlOwomIzQzOwomIzQzOwlpZiAoIWNhcHNfYWRkZWQgJmFtcDsmYW1wOyAhY2Fwc19yZW1vdmVkKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJcGwtJmd0O2NvbmZpZy0mZ3Q7bWFjX2NhcGFiaWxpdGllcyAmYW1wOz0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpOwomIzQzOwlwbC0mZ3Q7Y29uZmlnLSZndDttYWNfY2FwYWJpbGl0aWVzIHw9IG1hY19wYXVzZTsKJiM0MzsKJiM0MzsJaWYgKGNhcHNfcmVtb3ZlZCAmYW1wOyBNQUNfU1lNX1BBVVNFKQomIzQzOwkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CWlmIChjYXBzX3JlbW92ZWQgJmFtcDsgTUFDX0FTWU1fUEFVU0UpCiYjNDM7CQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLSZndDtzdXBwb3J0ZWQpOwomIzQzOwomIzQzOwlsaW5rbW9kZV9hbmQoY29uZmlnLSZndDthZHZlcnRpc2luZywgY29uZmlnLSZndDthZHZlcnRpc2luZywgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CiYjNDM7CWlmIChjYXBzX2FkZGVkICZhbXA7IE1BQ19TWU1fUEFVU0UpIHsKJiM0MzsJCWxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsJCWlmIChwbC0mZ3Q7cGh5ZGV2ICZhbXA7JmFtcDsgIXBoeWxpbmtfdGVzdChwbC0mZ3Q7cGh5ZGV2LSZndDtzdXBwb3J0ZWQsIFBhdXNlKSkKJiM0MzsJCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsJfQomIzQzOwlpZiAoY2Fwc19hZGRlZCAmYW1wOyBNQUNfQVNZTV9QQVVTRSkgewomIzQzOwkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtJmd0O3N1cHBvcnRlZCk7CiYjNDM7CQlpZiAocGwtJmd0O3BoeWRldiAmYW1wOyZhbXA7ICFwaHlsaW5rX3Rlc3QocGwtJmd0O3BoeWRldi0mZ3Q7c3VwcG9ydGVkLCBBc3ltX1BhdXNlKSkKJiM0MzsJCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLSZndDtzdXBwb3J0ZWQpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxpbmttb2RlX2FuZChjb25maWctJmd0O2FkdmVydGlzaW5nLCBjb25maWctJmd0O2FkdmVydGlzaW5nLCBwbC0mZ3Q7c3VwcG9ydGVkKTsKJiM0MzsKJiM0MzsJaWYgKGNvbmZpZy0mZ3Q7cGF1c2UgJmFtcDsgTUxPX1BBVVNFX0FOKSB7CiYjNDM7CQlpZiAocGh5bGlua190ZXN0KHBsLSZndDtzdXBwb3J0ZWQsIFBhdXNlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNvbmZpZy0mZ3Q7cGF1c2UgJmFtcDsgTUxPX1BBVVNFX1JYKSAmYW1wOyZhbXA7IChjb25maWctJmd0O3BhdXNlICZhbXA7IE1MT19QQVVTRV9UWCkpCiYjNDM7CQkJbGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcpOwomIzQzOwomIzQzOwkJaWYgKHBoeWxpbmtfdGVzdChwbC0mZ3Q7c3VwcG9ydGVkLCBBc3ltX1BhdXNlKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKChjb25maWctJmd0O3BhdXNlICZhbXA7IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLSZndDtwYXVzZSAmYW1wOyBNTE9fUEFVU0VfVFgpKSkKJiM0MzsJCQlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBjb25maWctJmd0O2FkdmVydGlzaW5nKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXBsLSZndDtwaHlkZXYpCiYjNDM7CQlwaHlsaW5rX2NoYW5nZV9pbmJhbmRfYWR2ZXJ0KHBsKTsKJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGwtJmd0O3N0YXRlX211dGV4KTsKJiM0MzsKJiM0MzsJaWYgKHBsLSZndDtwaHlkZXYpIHsKJiM0MzsJCXBhdXNlX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwKJiM0MzsJCQkJCSAgICAgIGNvbmZpZy0mZ3Q7YWR2ZXJ0aXNpbmcpOwomIzQzOwkJYXN5bV9hZHYgPSBsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwKJiM0MzsJCQkJCSAgICAgY29uZmlnLSZndDthZHZlcnRpc2luZyk7CiYjNDM7CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7cGwtJmd0O3BoeWRldi0mZ3Q7bG9jayk7CiYjNDM7CQlsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwKJiM0MzsJCQkJIHBsLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nLCBwYXVzZV9hZHYpOwomIzQzOwkJbGlua21vZGVfbW9kX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwKJiM0MzsJCQkJIHBsLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nLCBhc3ltX2Fkdik7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwbC0mZ3Q7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJCXBoeV9zdGFydF9hbmVnKHBsLSZndDtwaHlkZXYpOwomIzQzOwl9CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpOwomIzQzOwogLyoqCiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZQogICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgJmFtcDtzdHJ1Y3QgcGh5bGlua19jb25maWcKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMKaW5kZXggYjY1ZDBmNWZhMWEwMTQuLjQ3MjFiYTA3MWNiYmU0IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uYwpAQCAtMTcsNyAmIzQzOzE3LDYgQEAKICNpbmNsdWRlICZsdDtsaW51eC9kZWxheS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2Nsay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19jaG9pY2VzLmgmZ3Q7Ci0jaW5jbHVkZSAmbHQ7bmV0L3BoeS9yZWFsdGVrX3BoeS5oJmd0OwogCiAjaW5jbHVkZSAmIzM0Oy4uL3BoeWxpYi5oJiMzNDsKICNpbmNsdWRlICYjMzQ7cmVhbHRlay5oJiMzNDsKQEAgLTI2NDYsNDUgJiM0MzsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7CiB9CiAKLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsCi0JCQkgcGh5ZGV2LSZndDtzdXBwb3J0ZWQpOwotCi0JLyogc2V0IGRlZmF1bHQgbW9kZSAqLwotCXBoeWRldi0mZ3Q7c3BlZWQgPSBTUEVFRF8xMDAwMDsKLQlwaHlkZXYtJmd0O2R1cGxleCA9IERVUExFWF9GVUxMOwotCi0JcGh5ZGV2LSZndDtwb3J0ID0gUE9SVF9GSUJSRTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldikKLXsKLQlpbnQgdmFsLCBlcnI7Ci0KLQllcnIgPSBnZW5waHlfdXBkYXRlX2xpbmsocGh5ZGV2KTsKLQlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwotCi0JaWYgKCFwaHlkZXYtJmd0O2xpbmspCi0JCXJldHVybiAwOwotCi0JdmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpOwotCWlmICh2YWwgJmx0OyAwKQotCQlyZXR1cm4gdmFsOwotCi0JcnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHsKIAl7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMDA4MjAxKSwKQEAgLTI5MzQsMjAgJiM0MzsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0gewogCQkud3JpdGVfcGFnZQk9IHJ0bDgyMXhfd3JpdGVfcGFnZSwKIAkJLnJlYWRfbW1kCT0gcnRsODIyeF9yZWFkX21tZCwKIAkJLndyaXRlX21tZAk9IHJ0bDgyMnhfd3JpdGVfbW1kLAotCX0sIHsKLQkJUEhZX0lEX01BVENIX0VYQUNUKFBIWV9JRF9SVExfRFVNTVlfU0ZQKSwKLQkJLm5hbWUJCT0gJiMzNDtSZWFsdGVrIFNGUCBQSFkgTW9kZSYjMzQ7LAotCQkuZmxhZ3MJCT0gUEhZX0lTX0lOVEVSTkFMLAotCQkucHJvYmUJCT0gcnRsODIyeF9wcm9iZSwKLQkJLmdldF9mZWF0dXJlcwk9IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzLAotCQkuY29uZmlnX2FuZWcJPSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLAotCQkucmVhZF9zdGF0dXMJPSBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzLAotCQkuc3VzcGVuZAk9IGdlbnBoeV9zdXNwZW5kLAotCQkucmVzdW1lCQk9IHJ0bGdlbl9yZXN1bWUsCi0JCS5yZWFkX3BhZ2UJPSBydGw4MjF4X3JlYWRfcGFnZSwKLQkJLndyaXRlX3BhZ2UJPSBydGw4MjF4X3dyaXRlX3BhZ2UsCi0JCS5yZWFkX21tZAk9IHJ0bDgyMnhfcmVhZF9tbWQsCi0JCS53cml0ZV9tbWQJPSBydGw4MjJ4X3dyaXRlX21tZCwKIAl9LCB7CiAJCVBIWV9JRF9NQVRDSF9FWEFDVCgweDAwMWNjYWQwKSwKIAkJLm5hbWUJCT0gJiMzNDtSVEw4MjI0IDIuNUdicHMgUEhZJiMzNDssCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oCmluZGV4IDJiYzBkYjNkNTJhYzhkLi5lM2M3ODIyMTAwYWJhNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmgKQEAgLTg0Miw0ICYjNDM7ODQyLDYgQEAgdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2JlZ2luKHN0cnVjdCBwaHlsaW5rICpwbCk7CiAKIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTsKIAomIzQzO3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKTsKJiM0MzsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZDY4M2JjMWIwNjU5Y2QuLjAwMDAwMDAwMDAwMDAwCi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oCiYjNDM7JiM0MzsmIzQzOyAvZGV2L251bGwKQEAgLTEsNyAmIzQzOzAsMCBAQAotLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KLSNpZm5kZWYgX1JFQUxURUtfUEhZX0gKLSNkZWZpbmUgX1JFQUxURUtfUEhZX0gKLQotI2RlZmluZQlQSFlfSURfUlRMX0RVTU1ZX1NGUAkweDAwMWNjYmZmCi0KLSNlbmRpZiAvKiBfUkVBTFRFS19QSFlfSCAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTozMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyNQoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDgwMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogcjgxNjkgRHJpdmVyIGFuZCBwaHlsaW5rIEludGVncmF0aW9uKioKCk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBzZXJpZXMgdGhhdCByZWZhY3RvcnMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSBwaHlsaW5rLiBUaGF0IG1lYW5zIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGRyaXZlciBpdHNlbGYgYW5kIHRoZSBwaHlsaW5rIGNvcmUsIHdoaWNoLCBmb3IgYSBuZXR3b3JraW5nIGV4cGVydCBsaWtlIG15c2VsZiwgaW1tZWRpYXRlbHkgc2NyZWFtcyBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiAgVGhlIHBhdGNoIHRvdWNoZXMgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jYCwgYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBhbmQgcG90ZW50aWFsbHkgYGRyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jYC4KCkZpcnN0IHRoaW5ncyBmaXJzdDogcmVhY2hhYmlsaXR5LiBUaGUgcjgxNjkgZHJpdmVyIGlzIGZvciBSZWFsdGVrIFBDSSBFdGhlcm5ldCBhZGFwdGVycy4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFFFTVUgaXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgbWlnaHQgZW11bGF0ZSBgcnRsODEzOWAsIGJ1dCBkb2VzIGl0IHN1cHBvcnQgYHJ0bDgxNjlgIGRpcmVjdGx5PyBBIHF1aWNrIGNoZWNrIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb25maXJtcy4uLiBubywgbmF0aXZlbHksIGl0IGRvZXNuJiMzOTt0LiBIb3dldmVyLCB0aGUgYHN5el9wY2lfZGV2aWNlYCBwcmltaXRpdmUgaW4gc3l6a2FsbGVyIGlzIG15IHNhdmluZyBncmFjZS4gVGhpcyBwc2V1ZG8tZGV2aWNlIGFsbG93cyB1cyB0byBmdXp6ICphbnkqIFBDSSBkcml2ZXIgYnkgZW11bGF0aW5nIHRoZSBQQ0kgZGV2aWNlIGl0c2VsZi4gRXhjZWxsZW50LiBUaGlzIG1lYW5zIHRoZSByODE2OSBpcyBpbmRlZWQgcmVhY2hhYmxlIGFuZCBmdXp6YWJsZS4KClRoaXMgYHBoeWxpbmsuY2AgbW9kaWZpY2F0aW9uLCB3aXRoIHRoZSBhZGRpdGlvbiBvZiBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AsIGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgZXllLiBQaHlsaW5rIGlzIGEgY2VudHJhbCBuZXR3b3JraW5nIGNvbXBvbmVudCwgc28gY2hhbmdlcyB0aGVyZSBoYXZlIGJyb2FkZXIgaW1wbGljYXRpb25zLiBJdCYjMzk7cyB1c2VkIGJ5IG1hbnkgZHJpdmVycywgYW5kIHRoYXQgbmV3IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQuIExldCYjMzk7cyBzZWUgaWYgdGhhdCYjMzk7cyByZWFjaGFibGUgLSBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgY2FsbGVkIGZyb20gYHJ0bDgxNjlfY2hhbmdlX210dWAuIEdvb2QuCgpOb3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlJiMzOTtsbCBiZSBsb29raW5nIGF0IGBDT05GSUdfUjgxNjlgICh3aGljaCwgZnJvbSB0aGUgbG9va3Mgb2YgaXQsIHNlbGVjdHMgYENPTkZJR19QSFlMSU5LYCkgYW5kIGBDT05GSUdfUENJYC4gVGltZSB0byB2ZXJpZnkgdGhhdCBgQ09ORklHX1I4MTY5YCBkZXBlbmRzIG9uIGBQQ0lgIGluIHRoZSBgS2NvbmZpZ2AgZmlsZXMuIENvbmZpcm1lZC4KCkZpbmFsbHksIGxldCYjMzk7cyBuYWlsIGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cy4gSW4gYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLiAgVGhlbiwgaW4gdGhlIFJlYWx0ZWsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgKSwgd2UgaGF2ZSBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYWxvbmcgd2l0aCBhIHdob2xlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQsIGxpa2UgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgdGhlIFNEUyBhbmQgU0ZQIGZ1bmN0aW9ucy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3BoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI5MT1zdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MzA5LVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NDMxMDpcdFx0cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC1cdTAwM2VwaHlsaW5rLCBjYXBzKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQzMTEtXHR9XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYz0xODI5PUVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM6MTgzMjogKiBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKCkgLSBEeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzMtICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4MzktICovXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NDA6dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE4NDEte1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNS19XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE5MTY6RVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jLTE5MTctXG4tLVxuaW5jbHVkZS9saW51eC9waHlsaW5rLmg9ODQzPXZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcbmluY2x1ZGUvbGludXgvcGh5bGluay5oLTg0NC1cbmluY2x1ZGUvbGludXgvcGh5bGluay5oOjg0NTp2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG5pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaC04NDYtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI5NTEKCQkJCQkJCW91dHB1dDogMTgKCQkJCQkJCXRob3VnaHRzOiAzNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IE5ldHdvcmtpbmcgUEhZIGFuZCBSZWFsdGVrIERyaXZlciBDaGFuZ2VzKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIHdheSB3ZSBoYW5kbGUgUEhZIGxpbmsgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBpbnRlZ3JhdGluZyBgcGh5bGlua2Agd2l0aCB0aGUgYHI4MTY5YCBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgdGhpcyBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZXMgdGhpcyBkZWVwIGludG8gdGhlIG5ldHdvcmsgc3RhY2ssIHRvdWNoaW5nIGJvdGggY29yZSBQSFkgZnVuY3Rpb25hbGl0eSBhbmQgYSB3aWRlbHkgdXNlZCBkcml2ZXIgbGlrZSBgcjgxNjlgLCBkZXNlcnZlIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uCgpMZXQmIzM5O3MgbmFpbCBkb3duIHRoZSBjcml0aWNhbCBmdW5jdGlvbnMgdGhhdCBuZWVkIGltbWVkaWF0ZSBhdHRlbnRpb24gZHVyaW5nIGZ1enppbmcuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgdGhlIGNvcmUgTUFDL1BIWSBpbnRlcmFjdGlvbiBmdW5jdGlvbnM6CgoqICAgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgOiBUaGlzIGlzIG9idmlvdXNseSB0aGUgY2VudHJhbCBuZXcgZnVuY3Rpb24sIHNvIGl0JiMzOTtzIGEgcHJpb3JpdHkuCiogICBgcnRsODE2OV9jaGFuZ2VfbXR1YDogTVRVIGNoYW5nZXMgY2FuIHJldmVhbCBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIGluIG5ldHdvcmtpbmcuCiogICBgcnRsX2luaXRfcGh5bGlua2A6IFNpbmNlIGl0JiMzOTtzIGludGVyYWN0aW5nIHdpdGggdGhlIHBoeWxpbmsgZnJhbWV3b3JrLCBkZWZpbml0ZWx5IG5lZWRzIGEgbG9vay4KKiAgIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYDogUEhZIENvbnRyb2wgU2lnbmFscy4KKiAgIGBydGxfbWFjX2xpbmtfdXBgIGFuZCBgcnRsX21hY19saW5rX2Rvd25gOiBMaW5rIHN0YXRlIHRyYW5zaXRpb25zIGFyZSBhbHdheXMgaW50ZXJlc3RpbmcuCiogICBgcnRsX21hY19zZWxlY3RfcGNzYDogQW5vdGhlciBQQ1MgZnVuY3Rpb24sIG1ha2luZyBkZWNpc2lvbnMuCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIHJldmlld2VkLgoqICAgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYW5kIGByODEyN19zZHNfbW9kaWZ5YDogVGhlc2UgcmVsYXRlZCB0byBTaGFkb3cgRGF0YSBTdHJ1Y3R1cmUgYW5kIHNob3VsZCBiZSBmdXp6LXRlc3RlZC4KKiAgIGByODEyN19zZnBfaW5pdF8xZ2AgYW5kIGByODEyN19zZnBfaW5pdF8xMGdgOiBUaGVzZSBhcmUgd29ydGggY2hlY2tpbmcgaW4gdGhlIGNvbnRleHQgb2YgU0ZQLCB3aGljaCBjb3VsZCBoYXZlIHNvbWUgZWRnZSBjYXNlcy4KKiAgIGBydGxfZ2V0X3NmcF9tb2RlYDogQWxzbyByZWxhdGVkIHRvIFNGUCBjb25maWd1cmF0aW9ucy4KKiAgIGBydGxfaXNfODExNmFmYDogRmVhdHVyZSBpZGVudGlmaWNhdGlvbi4KCldlIGFsc28gaGF2ZSBhIGNvdXBsZSBvZiBjb25maWd1cmF0aW9uczogYFI4MTY5YCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgUEhZTElOS2AgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLiBBZnRlciB0aGF0LCBJJiMzOTtsbCBzZXQgdXAgbXkgZnV6emluZyBoYXJuZXNzZXMsIGFuZCBzdGFydCBsb29raW5nIGZvciB0aGUgd2VhayBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTAgMDU6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBIWUxJTksmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjY6Y29uZmlnIFBIWUxJTktcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTctXHR0cmlzdGF0ZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzEwIDA1OjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzOTQwCgkJCQkJCQlvdXRwdXQ6IDM3MAoJCQkJCQkJdGhvdWdodHM6IDEwMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmaW5pbmcgdGhlIFBoeWxpbmsgRm9jdXMgZm9yIHRoZSBSODE2OSBEcml2ZXIqKgoKT2theSwgc28gYFBIWUxJTktgIGlzIGEgdHJpc3RhdGUgY29uZmlnLCBidXQgdGhlIGBSODE2OWAgZHJpdmVyIGFjdHVhbGx5IHNlbGVjdHMgaXQuIFRoZXJlZm9yZSwgd2Ugb25seSBuZWVkIHRvIGVuYWJsZSBgUjgxNjlgLiBUaGF0IHNpbXBsaWZpZXMgdGhlIGNvbmZpZ3VyYXRpb24sIHdoaWNoIGlzIGdvb2QuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvcmUgZnVuY3Rpb25zIHdlIG5lZWQgdG8gZm9jdXMgb24uIEJhc2VkIG9uIHRoZSBjaGFuZ2VzLCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmb2xsb3dpbmcgYXMgcHJpbWUgY2FuZGlkYXRlczogYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3JlYWRgLCBgcjgxMjdfc2RzX3dyaXRlYCwgYHI4MTI3X3Nkc19tb2RpZnlgLCBgcjgxMjdfc2ZwX2luaXRfMWdgLCBgcjgxMjdfc2ZwX2luaXRfMTBnYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBhbmQgYHJ0bF9pc184MTE2YWZgLiBUaG9zZSBzaG91bGQgY2FwdHVyZSB0aGUgZXNzZW5jZSBvZiB0aGUgcGh5bGluayBpbnRlZ3JhdGlvbiBhbmQgaXRzIGludGVyYWN0aW9uIHdpdGggdGhlIE1BQy4KCkhvbGQgb24gYSBzZWNvbmQuLi4gTGV0IG1lIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MuIEFoLCB0aGUgYHJ0bF9tYWNfY29uZmlnYCBmdW5jdGlvbiBpcyBlbXB0eS4gQW5kIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBhcmUgYWxzbyBlbXB0eS4gIEl0JiMzOTtzIGFsd2F5cyB3b3J0aCB2ZXJpZnlpbmcgdGhhdCB0aGVzZSBhcmUgYWN0dWFsbHkgZG9pbmcgc29tZXRoaW5nIG9mIGludGVyZXN0LCBhbmQgYmVjYXVzZSB0aGV5JiMzOTtyZSBlbXB0eSwgdGhleSYjMzk7cmUgbm90LiAgV2UgY2FuIHNhZmVseSBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC4KCkxldCYjMzk7cyBkbyBhIHF1aWNrIHNjYW4gb2YgdGhlIGNvZGUgZm9yIGFueSBvdGhlciBwb3RlbnRpYWwgcmVsZXZhbnQgZnVuY3Rpb25zLiBPa2F5LCBoZXJlIGFyZSBhIGZldyBtb3JlOiBgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnNgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIGBydGw4MTY5X2lvY3RsYC4gVGhvc2Ugc2VlbSByZWxldmFudCwgZXNwZWNpYWxseSBga3NldHRpbmdzYCwgc28gSSYjMzk7bGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QuIFRoZXkgZGVmaW5pdGVseSBzaG91bGQgYmUgaW5jbHVkZWQsIGZvciB0aGV5IHdvdWxkIHByb2JhYmx5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGxpbmsgc3RhdGUgb2YgdGhlIGRldmljZS4KClNvLCB0aGUgdXBkYXRlZCBsaXN0IG9mIGZvY3VzIHN5bWJvbHMgaXMgd2hhdCBJIGhhdmUgbm93LiBJJiMzOTtsbCBpbmNsdWRlIGl0IHdpdGggdGhlIHJlYXNvbmluZyB0aGF0IHRoaXMgcGF0Y2ggaW52b2x2ZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLCBzcGVjaWZpY2FsbHkgdGhlIHI4MTY5IGRyaXZlciYjMzk7cyBwaHlsaW5rIEFQSSB1c2FnZSwgYW5kIHRoZSBuZXcgcGF1c2UgY2FwYWJpbGl0eSBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xMCAwNTozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGxfaW5pdF9waHlsaW5rJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19nZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua19kb3duJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2Rpc2FibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZW5hYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc193cml0ZSYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfbW9kaWZ5JiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzFnJiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzEwZyYjMzQ7LAogICAgJiMzNDtydGxfZ2V0X3NmcF9tb2RlJiMzNDssCiAgICAmIzM0O3J0bF9pc184MTE2YWYmIzM0OywKICAgICYjMzQ7cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9ud2F5X3Jlc2V0JiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UjgxNjkmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfY2hhbmdlX210dSYjMzQ7LAogICAgJiMzNDtydGxfaW5pdF9waHlsaW5rJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19nZXRfc3RhdGUmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfbGlua19kb3duJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2Rpc2FibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZW5hYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3I4MTI3X3Nkc193cml0ZSYjMzQ7LAogICAgJiMzNDtyODEyN19zZHNfbW9kaWZ5JiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzFnJiMzNDssCiAgICAmIzM0O3I4MTI3X3NmcF9pbml0XzEwZyYjMzQ7LAogICAgJiMzNDtydGxfZ2V0X3NmcF9tb2RlJiMzNDssCiAgICAmIzM0O3J0bF9pc184MTE2YWYmIzM0OywKICAgICYjMzQ7cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MmIzM0OywKICAgICYjMzQ7cnRsODE2OV9ud2F5X3Jlc2V0JiMzNDssCiAgICAmIzM0O3J0bDgxNjlfaW9jdGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU4LjkwNzEyNzc5NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2OTYwMTE0NjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc1wiLFxuICAgIFwicnRsODE2OV9jaGFuZ2VfbXR1XCIsXG4gICAgXCJydGxfaW5pdF9waHlsaW5rXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bDgxNjlfcGNzX2dldF9zdGF0ZVwiLFxuICAgIFwicnRsX21hY19saW5rX3VwXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfZG93blwiLFxuICAgIFwicnRsX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJydGxfbWFjX2Rpc2FibGVfdHhfbHBpXCIsXG4gICAgXCJydGxfbWFjX2VuYWJsZV90eF9scGlcIixcbiAgICBcInJ0bDgxNjlfc2RzX3JlYWRcIixcbiAgICBcInI4MTI3X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfd3JpdGVcIixcbiAgICBcInI4MTI3X3Nkc19tb2RpZnlcIixcbiAgICBcInI4MTI3X3NmcF9pbml0XzFnXCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xMGdcIixcbiAgICBcInJ0bF9nZXRfc2ZwX21vZGVcIixcbiAgICBcInJ0bF9pc184MTE2YWZcIixcbiAgICBcInJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zXCIsXG4gICAgXCJydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfbndheV9yZXNldFwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGNvbnZlcnRzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGFuZCBpbnRyb2R1Y2VzIGEgbmV3IHBoeWxpbmsgZnVuY3Rpb24gdG8gZHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgZHJpdmVyIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU4LjkwNzEzMzAzNFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA1MTQxNzAyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMTAgMDU6MzM6NTcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjU4MThhOWE1MDBhODZkIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xcbkBAIC04Niw4ICs4Niw4IEBAIGNvbmZpZyBSODE2OVxcbiBcXHRkZXBlbmRzIG9uIFBDSVxcbiBcXHRzZWxlY3QgRldfTE9BREVSXFxuIFxcdHNlbGVjdCBDUkMzMlxcbi1cXHRzZWxlY3QgUEhZTElCXFxuIFxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbitcXHRzZWxlY3QgUEhZTElOS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cXG4gXFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLmMwYjBjMmJjNWE0ODU1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjYsMTIgKzI2LDEyIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcG1fcnVudGltZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0ZmllbGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BoeWxpbmsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcHY2LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC91bmFsaWduZWQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9pcDZfY2hlY2tzdW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRkZXZfcXVldWVzLmhcXHUwMDNlXFxuLSNpbmNsdWRlIFxcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXFwicjgxNjkuaFxcXCJcXG4gI2luY2x1ZGUgXFxcInI4MTY5X2Zpcm13YXJlLmhcXFwiXFxuQEAgLTk2LDYgKzk2LDI1IEBAXFxuICNkZWZpbmUgSlVNQk9fOUtcXHQoOSAqIFNaXzFLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiAjZGVmaW5lIEpVTUJPXzE2S1xcdChTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXFxuIFxcbisjZGVmaW5lIFI4MTI3X1NEU19DTURcXHRcXHQweDIzNDhcXG4rI2RlZmluZSBSODEyN19TRFNfQUREUlxcdFxcdDB4MjM0YVxcbisjZGVmaW5lIFI4MTI3X1NEU19EQVRBX0lOXFx0MHgyMzRjXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0RBVEFfT1VUXFx0MHgyMzRlXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDXFx0QklUKDApXFxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9XRVxcdEJJVCgxKVxcbisjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUdcXHQweGViMTBcXG4rI2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcXHRcXHQweGViMGVcXG4rI2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHXFx0MHhlYjE0XFxuKyNkZWZpbmUgU0RTX0NNRF9SRUFEXFx0XFx0MHgwMDAxXFxuKyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRVxcdDB4NDBcXG4rI2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXFx0MHgwMDgwXFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcXHRcXHQweGRjMDBcXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXFx0MHgwMDc4XFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfODExNkFGXFx0MHgwMDMwXFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRFxcdFxcdDB4ZDAwNlxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1xcdDB4MDBmZlxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGXFx0MHgwMDAwXFxuK1xcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xcbiBcXHR1MzIgbWFzaztcXG4gXFx0dTMyIHZhbDtcXG5AQCAtMzM0LDExICszNTMsMTMgQEAgZW51bSBydGxfcmVnaXN0ZXJzIHtcXG4gXFx0QUxEUFNfTFRSXFx0PSAweGUwYTIsXFxuIFxcdExUUl9PQkZGX0xPQ0tcXHQ9IDB4ZTAzMixcXG4gXFx0TFRSX1NOT09QXFx0PSAweGUwMzQsXFxuK1xcdFNFTkRfTFRSX01TR1xcdD0gMHhlMDM4LFxcbiBcXG4gI2RlZmluZSBBTERQU19MVFJfRU5cXHRcXHRcXHRCSVQoMClcXG4gI2RlZmluZSBMVFJfT0JGRl9MT0NLX0VOXFx0XFx0QklUKDApXFxuICNkZWZpbmUgTElOS19TUEVFRF9DSEFOR0VfRU5cXHRcXHRCSVQoMTQpXFxuICNkZWZpbmUgTFRSX1NOT09QX0VOXFx0XFx0XFx0R0VOTUFTSygxNSwgMTQpXFxuKyNkZWZpbmUgTFRSX01TR19FTlxcdFxcdFxcdEJJVCgwKVxcbiB9O1xcbiBcXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcXG5AQCAtNzI4LDYgKzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xcbiBcXHRSVExfREFTSF8yNV9CUCxcXG4gfTtcXG4gXFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcXG4rXFx0UlRMX1NGUF9OT05FLFxcbitcXHRSVExfU0ZQXzgxNjhfQUYsXFxuK1xcdFJUTF9TRlBfODEyN19BVEYsXFxuK307XFxuK1xcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XFx0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXFxuIFxcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xcbkBAIC03MzYsNiArNzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xcbiBcXHRlbnVtIG1hY192ZXJzaW9uIG1hY192ZXJzaW9uO1xcbiBcXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xcbitcXHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcXG4gXFx0dTMyIGN1cl9yeDsgLyogSW5kZXggaW50byB0aGUgUnggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xcbiBcXHR1MzIgZGlydHlfdHg7XFxuQEAgLTc1MCw2ICs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dTMyIGlycV9tYXNrO1xcbiBcXHRpbnQgaXJxO1xcbiBcXHRzdHJ1Y3QgY2xrICpjbGs7XFxuK1xcdGludCBzcGVlZDtcXG4gXFxuIFxcdHN0cnVjdCB7XFxuIFxcdFxcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xcbkBAIC03NjIsNyArNzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcXG4gXFx0dW5zaWduZWQgYXNwbV9tYW5hZ2VhYmxlOjE7XFxuIFxcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xcbi1cXHRib29sIHNmcF9tb2RlOjE7XFxuIFxcdGRtYV9hZGRyX3QgY291bnRlcnNfcGh5c19hZGRyO1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xcbkBAIC03NzQsNiArODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuIFxcbiBcXHR1MzIgb2NwX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbitcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XFxuIH07XFxuIFxcbiB0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcXG5AQCAtMTEyOCwxMCArMTE1OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxcbiBcXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlIFxcdTAwMjZcXHUwMDI2IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSArIDIgKiBNSUlfUEhZU0lEMikpXFxuLVxcdFxcdHJldHVybiBQSFlfSURfUlRMX0RVTU1ZX1NGUCBcXHUwMDI2IDB4ZmZmZjtcXG4tXFxuIFxcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXFx1MDAzY1xcdTAwM2MgMTUpO1xcbiBcXG4gXFx0cmV0dXJuIHJ0bF9sb29wX3dhaXRfaGlnaCh0cCwgXFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cXG5AQCAtMTE5OSw2ICsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHR1c2xlZXBfcmFuZ2UoMTAsIDIwKTtcXG4gfVxcbiBcXG4rREVDTEFSRV9SVExfQ09ORChyODEyN19zZHNfY21kX2NvbmQpXFxuK3tcXG4rXFx0cmV0dXJuIFJUTF9SMTYodHAsIFI4MTI3X1NEU19DTUQpIFxcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxcbit7XFxuK1xcdHUxNiBhZGRyID0gKGluZGV4IFxcdTAwM2NcXHUwMDNjIDExKSB8IChwYWdlIFxcdTAwM2NcXHUwMDNjIDUpIHwgcmVnO1xcbitcXG4rXFx0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xcbitcXG4rXFx0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcXHUwMDI2cjgxMjdfc2RzX2NtZF9jb25kLCAxMCwgMTAwKSlcXG4rXFx0XFx0cmV0dXJuIFJUTF9SMTYodHAsIFI4MTI3X1NEU19EQVRBX09VVCk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIGludCByODEyN19zZHNfd3JpdGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXFxuK1xcdFxcdFxcdCAgIHUxNiByZWcsIHUxNiB2YWwpXFxuK3tcXG4rXFx0dTE2IGFkZHIgPSAoaW5kZXggXFx1MDAzY1xcdTAwM2MgMTEpIHwgKHBhZ2UgXFx1MDAzY1xcdTAwM2MgNSkgfCByZWc7XFxuK1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcXG4rXFx0UlRMX1cxNih0cCwgUjgxMjdfU0RTX0FERFIsIGFkZHIpO1xcbitcXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMgfCBSODEyN19TRFNfQ01EX1dFKTtcXG4rXFxuK1xcdGlmIChydGxfbG9vcF93YWl0X2xvdyh0cCwgXFx1MDAyNnI4MTI3X3Nkc19jbWRfY29uZCwgMTAsIDEwMCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHI4MTI3X3Nkc19tb2RpZnkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBpbmRleCwgdTE2IHBhZ2UsXFxuK1xcdFxcdFxcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXFxuK3tcXG4rXFx0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcXG4rXFxuK1xcdGlmICh2YWwgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHR2YWwgPSAodmFsIFxcdTAwMjYgfmNsZWFybWFzaykgfCBzZXRtYXNrO1xcbitcXHRyODEyN19zZHNfd3JpdGUodHAsIGluZGV4LCBwYWdlLCByZWcsIHZhbCk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzFnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdGludCB2YWw7XFxuK1xcbitcXHRyODEyN19zZnBfc2RzX3BoeV9yZXNldCh0cCk7XFxuK1xcbitcXHRyODEyN19zZHNfbW9kaWZ5KHRwLCAwLCAxLCAzMSwgMCwgQklUKDMpKTtcXG4rXFx0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcXG4rXFx0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMCwgIDQsIDAsIEJJVCgyKSk7XFxuK1xcbitcXHRSVExfVzE2KHRwLCAweDIzM2EsIDB4ODAwNCk7XFxuK1xcdFJUTF9XMTYodHAsIDB4MjMzZSwgKFJUTF9SMTYodHAsIDB4MjMzZSkgXFx1MDAyNiB+MHgzMDAzKSB8IDB4MDAwMik7XFxuK1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM0MGEsIDB4MDAwMCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzQ2NiwgMHgwMDAwKTtcXG4rXFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xcbitcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MGEsIDB4MDAwMCk7XFxuK1xcbitcXHR2YWwgPSByODE2OF9waHlfb2NwX3JlYWQodHAsIDB4YzgwNCk7XFxuK1xcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdGludCB2YWw7XFxuQEAgLTEyMTcsMTIgKzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCBcXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbi17XFxuLVxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4tXFx0XFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcXG4tfVxcbi1cXG4gc3RhdGljIHZvaWQgcnRsX3NmcF9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuQEAgLTEyODMsNiArMTM3MSwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXFxuIFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIHRwLVxcdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xcbiB9XFxuIFxcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHJldHVybiB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXFx1MDAyNiBSVExfUEtHX0RFVEVDVF9NQVNLKSA9PVxcbitcXHRcXHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XFxuK1xcdFxcdFJUTF9JTlRfSFdfSURfODExNkFGO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcXG4ge1xcbiBcXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cXHUwMDNlb2NwX2Jhc2UgKyByZWcpO1xcbkBAIC0xNTc4LDYgKzE2NzUsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuK1xcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcXG4rXFxuK1xcdFxcdGlmICgoZGF0YSBcXHUwMDI2IDB4ZmYpID09IDB4MDcpXFxuK1xcdFxcdFxcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xcbitcXHR9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7XFxuK1xcdFxcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiBSVExfU0ZQX05PTkU7XFxuK31cXG4rXFxuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3dpdGNoICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24pIHtcXG5AQCAtMTY3MywxNiArMTc4NCwxNCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2lycV9tYXNrX2FuZF9hY2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJ0bF9wY2lfY29tbWl0KHRwKTtcXG4gfVxcbiBcXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbitzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxcbiBcXHQgICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuLVxcdFxcdH0gZWxzZSBpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDApIHtcXG4rXFx0XFx0fSBlbHNlIGlmIChzcGVlZCA9PSBTUEVFRF8xMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbkBAIC0xNjkyLDcgKzE4MDEsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcXG4gXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxcbiBcXHRcXHQgICB0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMTEpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMTcwMCw3ICsxODA5LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDNmKTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM3KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XFxuK1xcdFxcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMjA3NCwxMSArMjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XFxuIFxcbiBcXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG4rXFx0aWYgKHRwLVxcdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbiBcXHRcXHRyZXR1cm4gY2k7XFxuIFxcbiBcXHRmb3IgKDsgY2ktXFx1MDAzZXNwZWVkOyBjaSsrKSB7XFxuLVxcdFxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBjaS1cXHUwMDNlc3BlZWQpXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlc3BlZWQgPT0gY2ktXFx1MDAzZXNwZWVkKVxcbiBcXHRcXHRcXHRyZXR1cm4gY2k7XFxuIFxcdH1cXG4gXFxuQEAgLTIyMzYsNyArMjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VzcGVlZDtcXG4rXFx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXFx1MDAzZXNwZWVkO1xcbiBcXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cXHUwMDNldHhfbHBpX3RpbWVyO1xcbiBcXG4gXFx0aWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxcbkBAIC0yMjU0LDcgKzIzNjMsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiBcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEpO1xcbitcXHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0yMjcwLDcgKzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxcbiBcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbiBcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIFxcbi1cXHRyZXR1cm4gcGh5X2V0aHRvb2xfc2V0X2VlZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfZWVlKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzMDEsMTMgKzI0MTAsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcXG4tXFxuLVxcdHBoeV9nZXRfcGF1c2UodHAtXFx1MDAzZXBoeWRldiwgXFx1MDAyNnR4X3BhdXNlLCBcXHUwMDI2cnhfcGF1c2UpO1xcbiBcXG4tXFx0ZGF0YS1cXHUwMDNlYXV0b25lZyA9IHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWF1dG9uZWc7XFxuLVxcdGRhdGEtXFx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcXG4tXFx0ZGF0YS1cXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xcbitcXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjMxOCw5ICsyNDIyLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdGlmIChkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTilcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYsIGRhdGEtXFx1MDAzZXJ4X3BhdXNlLCBkYXRhLVxcdTAwM2V0eF9wYXVzZSk7XFxuLVxcbi1cXHRyZXR1cm4gMDtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5AQCAtMjM4NiwzNCArMjQ4OCwyNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfY3RybF9zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRsZTMyX3RvX2NwdSh0cC1cXHUwMDNlY291bnRlcnMtXFx1MDAzZXJ4X3Vua25vd25fb3Bjb2RlKTtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4tXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4rc3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4ge1xcbiBcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0aW50IGR1cGxleCA9IGNtZC1cXHUwMDNlYmFzZS5kdXBsZXg7XFxuLVxcdGludCBzcGVlZCA9IGNtZC1cXHUwMDNlYmFzZS5zcGVlZDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXNmcF9tb2RlKVxcbi1cXHRcXHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XFxuLVxcbi1cXHRpZiAoY21kLVxcdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuLVxcdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cXHUwMDNlc3VwcG9ydGVkKSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXFx1MDAzZXBoeWxpbmssIGNtZCk7XFxuK31cXG4gXFxuLVxcdHBoeWRldi1cXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcXG4tXFx0cGh5ZGV2LVxcdTAwM2VzcGVlZCA9IHNwZWVkO1xcbi1cXHRwaHlkZXYtXFx1MDAzZWR1cGxleCA9IGR1cGxleDtcXG4rc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbiBcXG4tXFx0cnRsX3NmcF9pbml0KHRwKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbit9XFxuIFxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNnBoeWRldi1cXHUwMDNlbG9jayk7XFxuK3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cXHUwMDNlcGh5bGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcXG5AQCAtMjQzMSwxMCArMjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuIFxcdC5nZXRfc3NldF9jb3VudFxcdFxcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcXG4gXFx0LmdldF9ldGh0b29sX3N0YXRzXFx0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxcbiBcXHQuZ2V0X3RzX2luZm9cXHRcXHQ9IGV0aHRvb2xfb3BfZ2V0X3RzX2luZm8sXFxuLVxcdC5ud2F5X3Jlc2V0XFx0XFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxcbitcXHQubndheV9yZXNldFxcdFxcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxcbiBcXHQuZ2V0X2VlZVxcdFxcdD0gcnRsODE2OV9nZXRfZWVlLFxcbiBcXHQuc2V0X2VlZVxcdFxcdD0gcnRsODE2OV9zZXRfZWVlLFxcbi1cXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXFxuK1xcdC5nZXRfbGlua19rc2V0dGluZ3NcXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbiBcXHQuc2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcXG4gXFx0LmdldF9yaW5ncGFyYW1cXHRcXHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcXG4gXFx0LmdldF9wYXVzZV9zdGF0c1xcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXFxuQEAgLTI0OTksOSArMjU5NCwxMCBAQCB2b2lkIHI4MTY5X2FwcGx5X2Zpcm13YXJlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHR0cC1cXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xcbiBcXG4gXFx0XFx0LyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovXFxuLVxcdFxcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbi1cXHRcXHRcXHRcXHQgICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbi1cXHRcXHRcXHRcXHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdFxcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAhKHZhbCBcXHUwMDI2IEJNQ1JfUkVTRVQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcXG4gXFx0fVxcbiB9XFxuIFxcbkBAIC0yNTM4LDYgKzI2MzQsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbitcXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXFx1MDAzZXBoeWRldiwgdHAtXFx1MDAzZW1hY192ZXJzaW9uKTtcXG4gXFxuIFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xcbkBAIC0yNTUyLDkgKzI2NTAsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQgICAgdHAtXFx1MDAzZXBjaV9kZXYtXFx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxcbiBcXHRcXHRwaHlfd3JpdGVfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xcbiBcXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4tXFx0XFx0cnRsX3NmcF9pbml0KHRwKTtcXG4tXFxuIFxcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cXG4gXFx0cGh5X3NwZWVkX3VwKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG5AQCAtMjY1NywxNSArMjc1Miw2IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBcXHRpZiAocGNpX2lzX3BjaWUodHAtXFx1MDAzZXBjaV9kZXYpIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbiBcXHRcXHRwY2llX3NldF9yZWFkcnEodHAtXFx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XFxuLVxcbi1cXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXFxuLVxcdGlmIChqdW1ibykge1xcbi1cXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcXG4tXFx0XFx0XFx0XFx0ICAgdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbi1cXHRcXHRwaHlfc3RhcnRfYW5lZyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0fVxcbiB9XFxuIFxcbiBERUNMQVJFX1JUTF9DT05EKHJ0bF9jaGlwY21kX2NvbmQpXFxuQEAgLTI3ODAsNyArMjg2Niw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xcbiBcXG4gXFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XFxuLVxcdFxcdHBoeV9zcGVlZF9kb3duKHRwLVxcdTAwM2VwaHlkZXYsIGZhbHNlKTtcXG4rXFx0XFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVxcdTAwM2VwaHlsaW5rLCBmYWxzZSk7XFxuIFxcdFxcdHJ0bF93b2xfZW5hYmxlX3J4KHRwKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTI4MzIsNiArMjkxOCwxNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3NldF9tYWdpY19yZWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZyZXEgKmlmciwgaW50IGNtZClcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XFxuK1xcbitcXHRpZiAoIW5ldGlmX3J1bm5pbmcoZGV2KSlcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXR1cm4gcGh5bGlua19taWlfaW9jdGwodHAtXFx1MDAzZXBoeWxpbmssIGlmciwgY21kKTtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XFxuQEAgLTMwOTgsOCArMzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xcbiBcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XFxuIFxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4ZTAyYywgMHgxODgwKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkOCwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkMiwgMHg4ODNjKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4ZTBhNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4gXFx0XFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0zMTE5LDYgKzMyMzAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiBcXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcXG4rXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuQEAgLTMxNTIsNiArMzI2NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHRcXHRydGxfZW5hYmxlX2x0cih0cCk7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XFxuQEAgLTMxNjQsNiArMzI3Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuK1xcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zNjU3LDYgKzM3NzEsNDIgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBzbG90ID0gUENJX1NMT1QocGRldi1cXHUwMDNlZGV2Zm4pO1xcbitcXHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcGRldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgZnVuYywgcG9zO1xcbitcXHR1MTYgdmFsO1xcbitcXG4rXFx0Zm9yIChmdW5jID0gMjsgZnVuYyBcXHUwMDNjIDg7IGZ1bmMrKykge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XFxuK1xcbitcXHRcXHRwb3MgPSBwY2lfYnVzX2ZpbmRfY2FwYWJpbGl0eShidXMsIGRldmZuLCBQQ0lfQ0FQX0lEX0VYUCk7XFxuK1xcdFxcdGlmIChwb3MpIHtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcXHUwMDI2dmFsKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgfD0gKFBDSV9FWFBfTE5LQ1RMX0FTUE1DIHwgUENJX0VYUF9MTktDVExfQ0xLUkVRX0VOKTtcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfd29yZChidXMsIGRldmZuLCBwb3MgKyBQQ0lfRVhQX0xOS0NUTCwgdmFsKTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XFxuK1xcdFxcdGlmIChwb3MpIHtcXG4rXFx0XFx0XFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCBcXHUwMDI2dmFsKTtcXG4rXFxuK1xcdFxcdFxcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfRDNob3Q7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTO1xcbitcXHRcXHRcXHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHtcXG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFxuIFxcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XFxuIFxcbi1cXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXFx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcXHUwMDI2IDB4M2ZmZjtcXG4tXFx0aWYgKHJnX3Nhd19jbnQgXFx1MDAzZSAwKSB7XFxuLVxcdFxcdHUxNiBzd19jbnRfMW1zX2luaTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpIHtcXG4rXFx0XFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuK1xcdFxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbitcXHRcXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuIFxcbi1cXHRcXHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFxcdTAwMjYgMHgwZmZmO1xcbi1cXHRcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcXG4rXFx0XFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4rXFx0XFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xcbkBAIC00MTM5LDEyICs0MjkxLDI1IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydChzdHJ1Y3QgIHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0Ym9vbCBqdW1ib19iZWZvcmUgPSBkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXFx1MDAzZSBFVEhfREFUQV9MRU47XFxuIFxcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChqdW1ib19iZWZvcmUgIT0ganVtYm9fYWZ0ZXIpIHtcXG4rXFx0XFx0dW5zaWduZWQgbG9uZyBjYXBzID0gdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XFxuK1xcbitcXHRcXHRpZiAoanVtYm9fYWZ0ZXIpXFxuK1xcdFxcdFxcdGNhcHMgXFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGNhcHMgfD0gKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcbitcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG4rXFx0fVxcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAzNCwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0XFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MTAwLDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUxMzAsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXFxuIFxcdGJpdG1hcF96ZXJvKHRwLVxcdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcXG4gXFxuLVxcdHBoeV9zdG9wKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4gXFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbiBcXHRcXHRydGxfc2ZwX3Jlc2V0KHRwKTtcXG4gXFxuIFxcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcXG5AQCAtNTAzMiwxNCArNTE3MiwxMiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X3VwKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdGFydCh0cCk7XFxuIFxcbiBcXHRwY2lfc2V0X21hc3Rlcih0cC1cXHUwMDNlcGNpX2Rldik7XFxuLVxcdHBoeV9pbml0X2h3KHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfcmVzdW1lKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYpXFxuK1xcdFxcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xcbitcXG4gXFx0bmFwaV9lbmFibGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG4gXFx0ZW5hYmxlX3dvcmsoXFx1MDAyNnRwLVxcdTAwM2V3ay53b3JrKTtcXG4gXFx0cnRsX3Jlc2V0X3dvcmsodHApO1xcbi1cXG4tXFx0cGh5X3N0YXJ0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5AQCAtNTA0OSwxMyArNTE4NywxNCBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdHBtX3J1bnRpbWVfZ2V0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbitcXHRwaHlsaW5rX3N0b3AodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRuZXRpZl9zdG9wX3F1ZXVlKGRldik7XFxuIFxcdHJ0bDgxNjlfZG93bih0cCk7XFxuIFxcdHJ0bDgxNjlfcnhfY2xlYXIodHApO1xcbiBcXG4gXFx0ZnJlZV9pcnEodHAtXFx1MDAzZWlycSwgdHApO1xcbiBcXG4tXFx0cGh5X2Rpc2Nvbm5lY3QodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0ZG1hX2ZyZWVfY29oZXJlbnQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXFx1MDAzZVJ4RGVzY0FycmF5LFxcbiBcXHRcXHRcXHQgIHRwLVxcdTAwM2VSeFBoeUFkZHIpO1xcbkBAIC01MTEyLDExICs1MjUxLDEzIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuLVxcbitcXHRpZiAodHAtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XFxuK1xcdFxcdGlmIChyZXR2YWwpXFxuK1xcdFxcdFxcdGdvdG8gZXJyX2ZyZWVfaXJxO1xcbitcXHR9XFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbitcXHRwaHlsaW5rX3N0YXJ0KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0cnRsODE2OV9pbml0X2NvdW50ZXJfb2Zmc2V0cyh0cCk7XFxuIFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuIG91dDpcXG5AQCAtNTIyMSw2ICs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXFxuIFxcdC8qIFNvbWUgY2hpcCB2ZXJzaW9ucyBtYXkgdHJ1bmNhdGUgcGFja2V0cyB3aXRob3V0IHRoaXMgaW5pdGlhbGl6YXRpb24gKi9cXG4gXFx0cnRsX2luaXRfcnhjZmcodHApO1xcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRyZXR1cm4gcnRsODE2OV9ydW50aW1lX3Jlc3VtZShkZXZpY2UpO1xcbiB9XFxuIFxcbkBAIC01Mjg4LDYgKzU0MzIsNyBAQCBzdGF0aWMgdm9pZCBydGxfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0XFx0cjgxNjlfcmVtb3ZlX2xlZHModHAtXFx1MDAzZWxlZHMpO1xcbiBcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXFx1MDAzZWRldik7XFxuK1xcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxcbiBcXHRcXHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcXG5AQCAtNTMxMCw3ICs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcXG4gXFx0Lm5kb19maXhfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9mZWF0dXJlc1xcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXFxuIFxcdC5uZG9fc2V0X21hY19hZGRyZXNzXFx0PSBydGxfc2V0X21hY19hZGRyZXNzLFxcbi1cXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcGh5X2RvX2lvY3RsX3J1bm5pbmcsXFxuK1xcdC5uZG9fZXRoX2lvY3RsXFx0XFx0PSBydGw4MTY5X2lvY3RsLFxcbiBcXHQubmRvX3NldF9yeF9tb2RlXFx0PSBydGxfc2V0X3J4X21vZGUsXFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxcbiBcXHQubmRvX3BvbGxfY29udHJvbGxlclxcdD0gcnRsODE2OV9uZXRwb2xsLFxcbkBAIC01NDc0LDE2ICs1NjE5LDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyZXR1cm4gLUVVTkFUQ0g7XFxuIFxcdH1cXG4gXFxuLVxcdHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcXG4tXFx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxcbi1cXHRcXHRwaHlfc3VwcG9ydF9lZWUodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXFx1MDAzZXBoeWRldik7XFxuLVxcbi1cXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuLVxcdFxcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVxcdTAwM2VwaHlkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcXG4tXFxuIFxcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cXG4gXFx0cGh5X3N1c3BlbmQodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcbkBAIC01NTk5LDYgKzU3MzQsMjQ3IEBAIHN0YXRpYyBib29sIHJ0bF9hc3BtX2lzX3NhZmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHJldHVybiBmYWxzZTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4rXFx0cG1fcnVudGltZV9pZGxlKHRwX3RvX2Rldih0cCkpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfdXAoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuK1xcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4rXFx0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XFxuK1xcbitcXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0aWYgKCF0cC1cXHUwMDNlcGNzLm9wcylcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcXG4rXFx0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXFxuK1xcdFxcdHJldHVybiBcXHUwMDI2dHAtXFx1MDAzZXBjcztcXG4rXFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4rXFx0dTE2IHZhbCA9IDA7XFxuK1xcbitcXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcXG4rXFx0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XFxuK1xcdHZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTtcXG4rXFx0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnRwLVxcdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdHJldHVybiB2YWw7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcXG4rXFx0XFx0XFx0XFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKSB7XFxuK1xcdFxcdHUxNiBzdGF0MTtcXG4rXFxuK1xcdFxcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xcbitcXG4rXFx0XFx0aWYgKCEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpKVxcbitcXHRcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdHN0YXRlLVxcdTAwM2VsaW5rID0gISEoc3RhdDEgXFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xcbitcXHRcXHRpZiAoIXN0YXRlLVxcdTAwM2VsaW5rKVxcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRcXHRpZiAoc3RhdGUtXFx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxcbitcXHRcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHN0YXRlLVxcdTAwM2VzcGVlZCA9IFNQRUVEXzEwMDAwO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1MTYgYm1zciwgbHBhO1xcbitcXG4rXFx0XFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XFxuK1xcdFxcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcXG4rXFx0XFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xcbitcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfY29uZmlnKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXFxuK1xcdFxcdFxcdCAgICAgIGJvb2wgcGVybWl0X3BhdXNlX3RvX21hYylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcXG4rXFx0XFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcXG4rXFx0XFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHRjYXNlIFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg6XFxuK1xcdFxcdFxcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGRlZmF1bHQ6XFxuK1xcdFxcdFxcdG5ldGRldl9lcnIodHAtXFx1MDAzZWRldiwgXFxcIlVuc3VwcG9ydGVkIFNGUCBpbnRlcmZhY2UgbW9kZTogJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgIHBoeV9tb2RlcyhpbnRlcmZhY2UpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXFxuK1xcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfZGlzYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xcbitcXG4rXFx0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7XFxuK1xcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcXG4rXFx0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcXG4rXFx0Lm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sXFxuK1xcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcXG4rXFx0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXFxuK1xcdC5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSxcXG4rfTtcXG4rXFxuK3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IDA7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcXG4rXFxuK1xcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXFxuK1xcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24ndCBzdXBwb3J0IDIuNUcgZWVlXFxuK1xcdCAqL1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzI1MDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ181MDAwRkQ7XFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcXG4rXFxuK1xcdHJldHVybiBjYXBzO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xcbitcXHQucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsXFxuK1xcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxcbitcXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcXG4rXFx0LnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRzdHJ1Y3QgcGh5bGluayAqcGw7XFxuK1xcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZXYgPSBcXHUwMDI2dHAtXFx1MDAzZWRldi1cXHUwMDNlZGV2O1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcudHlwZSA9IFBIWUxJTktfTkVUREVWO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcyA9IHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHRwKTtcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDX0FTWU1fUEFVU0UgfCBNQUNfU1lNX1BBVVNFO1xcbitcXG4rXFx0c3dpdGNoICh0cC1cXHUwMDNlc2ZwX21vZGUpIHtcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxNjhfQUY6XFxuK1xcdFxcdHRwLVxcdTAwM2VwY3Mub3BzID0gXFx1MDAyNnI4MTY5X3Bjc19vcHM7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgUlRMX1NGUF84MTI3X0FURjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5kZWZhdWx0X2FuX2luYmFuZCA9IHRydWU7XFxuK1xcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcXG4rXFx0XFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVgsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxcbitcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIE1BQ18yNTAwRkQgfCBNQUNfNTAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbitcXHRcXHRcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXG4rXFx0XFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiBcXHUwMDNjIFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XFxuK1xcdFxcdFxcdFxcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcXG4rXFx0XFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcubHBpX2ludGVyZmFjZXMpO1xcbitcXG4rXFx0cGwgPSBwaHlsaW5rX2NyZWF0ZShcXHUwMDI2dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVxcdTAwM2Vmd25vZGUsXFxuK1xcdFxcdFxcdCAgICBwaHlfbW9kZSwgXFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xcbitcXHRpZiAoSVNfRVJSKHBsKSlcXG4rXFx0XFx0cmV0dXJuIFBUUl9FUlIocGwpO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmsgPSBwbDtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcXG5AQCAtNTY2Nyw2ICs2MDQzLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdFxcdFxcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XFxuIFxcdHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXFx1MDAzZW1hY192ZXJzaW9uO1xcbiBcXHR0cC1cXHUwMDNlZndfbmFtZSA9IGNoaXAtXFx1MDAzZWZ3X25hbWU7XFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuIFxcbiBcXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xcbiBcXHQgKiBwcm9ibGVtcyBhcyB3ZWxsIGFzIGZ1bGwgc3lzdGVtIGhhbmdzIGZvciBzb21lIFBDSWUgZGV2aWNlcyB1c2Vycy5cXG5AQCAtNTY3OSwxMiArNjA1Niw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXHR9XFxuIFxcdHRwLVxcdTAwM2Vhc3BtX21hbmFnZWFibGUgPSAhcmM7XFxuIFxcbi1cXHRpZiAocnRsX2lzXzgxMjUodHApKSB7XFxuLVxcdFxcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCAweGQwMDYpO1xcbi1cXG4tXFx0XFx0aWYgKChkYXRhIFxcdTAwMjYgMHhmZikgPT0gMHgwNylcXG4tXFx0XFx0XFx0dHAtXFx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcXG4tXFx0fVxcbitcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcXG4gXFxuIFxcdHRwLVxcdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XFxuIFxcdHRwLVxcdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcXG5AQCAtNTc4OCwxMyArNjE2MCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XFxuIFxcbi1cXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xcbitcXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xcbiBcXHRpZiAocmMpXFxuIFxcdFxcdHJldHVybiByYztcXG4gXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XFxuK1xcdFxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdFxcdGlmIChyYykge1xcbitcXHRcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXHRcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4gXFx0cmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTtcXG4tXFx0aWYgKHJjKVxcbitcXHRpZiAocmMpIHtcXG4rXFx0XFx0cGh5bGlua19kZXN0cm95KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbitcXHR9XFxuIFxcbiBcXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcXG4gXFx0XFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcXG5AQCAtNTgxNyw2ICs2MTk5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdFxcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcXG4gXFx0fVxcbiBcXG4rXFx0aWYgKHJ0bF9pc184MTE2YWYodHApKVxcbitcXHRcXHRydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9ucyh0cC1cXHUwMDNlcGNpX2Rldik7XFxuK1xcbiBcXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4gXFx0XFx0cG1fcnVudGltZV9wdXRfc3luYyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2KTtcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuaW5kZXggNTlkZmUzNWFmYTU0ZmMuLjllOWNkNzkzMDFkNjZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcGh5bGluay5jXFxuQEAgLTE4MjgsNiArMTgyOCw5MyBAQCBpbnQgcGh5bGlua19zZXRfZml4ZWRfbGluayhzdHJ1Y3QgcGh5bGluayAqcGwsXFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwocGh5bGlua19zZXRfZml4ZWRfbGluayk7XFxuIFxcbisvKipcXG4rICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbisgKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4rICogQG1hY19wYXVzZTogdGhlIG5ldyBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzIG1hc2tcXG4rICpcXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXFxuKyAqIHN1Y2ggYXMgbG9zaW5nL2dhaW5pbmcgUGF1c2UgZnJhbWUgc3VwcG9ydCBiYXNlZCBvbiBNVFUgc2l6ZS5cXG4rICogSXQgcmVjYWxjdWxhdGVzIHN1cHBvcnRlZCBsaW5rIG1vZGVzIGFuZCB0cmlnZ2VycyByZW5lZ290aWF0aW9uIGlmIG5lZWRlZC5cXG4rICovXFxuK3ZvaWQgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyhzdHJ1Y3QgcGh5bGluayAqcGwsIHVuc2lnbmVkIGxvbmcgbWFjX3BhdXNlKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKmNvbmZpZyA9IFxcdTAwMjZwbC1cXHUwMDNlbGlua19jb25maWc7XFxuK1xcdHVuc2lnbmVkIGxvbmcgb2xkX3BhdXNlLCBjYXBzX2FkZGVkLCBjYXBzX3JlbW92ZWQ7XFxuK1xcdGJvb2wgcGF1c2VfYWR2LCBhc3ltX2FkdjtcXG4rXFxuK1xcdEFTU0VSVF9SVE5MKCk7XFxuK1xcbitcXHRpZiAobWFjX3BhdXNlIFxcdTAwMjYgfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpKSB7XFxuK1xcdFxcdHBoeWxpbmtfZXJyKHBsLCBcXFwiQXR0ZW1wdGVkIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBub24tcGF1c2UgTUFDIGNhcGFiaWxpdGllc1xcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4rXFx0b2xkX3BhdXNlID0gcGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcXHUwMDI2IChNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xcbitcXHRjYXBzX2FkZGVkID0gbWFjX3BhdXNlIFxcdTAwMjYgfm9sZF9wYXVzZTtcXG4rXFx0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFxcdTAwMjYgfm1hY19wYXVzZTtcXG4rXFxuK1xcdGlmICghY2Fwc19hZGRlZCBcXHUwMDI2XFx1MDAyNiAhY2Fwc19yZW1vdmVkKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZwbC1cXHUwMDNlc3RhdGVfbXV0ZXgpO1xcbitcXG4rXFx0cGwtXFx1MDAzZWNvbmZpZy1cXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcXHUwMDI2PSB+KE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XFxuK1xcdHBsLVxcdTAwM2Vjb25maWctXFx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlO1xcbitcXG4rXFx0aWYgKGNhcHNfcmVtb3ZlZCBcXHUwMDI2IE1BQ19TWU1fUEFVU0UpXFxuK1xcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRpZiAoY2Fwc19yZW1vdmVkIFxcdTAwMjYgTUFDX0FTWU1fUEFVU0UpXFxuK1xcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRsaW5rbW9kZV9hbmQoY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZywgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcbitcXHRpZiAoY2Fwc19hZGRlZCBcXHUwMDI2IE1BQ19TWU1fUEFVU0UpIHtcXG4rXFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldiBcXHUwMDI2XFx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpKVxcbitcXHRcXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULCBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFx0fVxcbitcXHRpZiAoY2Fwc19hZGRlZCBcXHUwMDI2IE1BQ19BU1lNX1BBVVNFKSB7XFxuK1xcdFxcdGxpbmttb2RlX3NldF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVxcdTAwM2VzdXBwb3J0ZWQpO1xcbitcXHRcXHRpZiAocGwtXFx1MDAzZXBoeWRldiBcXHUwMDI2XFx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCwgQXN5bV9QYXVzZSkpXFxuK1xcdFxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXFx1MDAzZXN1cHBvcnRlZCk7XFxuK1xcdH1cXG4rXFxuK1xcdGxpbmttb2RlX2FuZChjb25maWctXFx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXFx1MDAzZWFkdmVydGlzaW5nLCBwbC1cXHUwMDNlc3VwcG9ydGVkKTtcXG4rXFxuK1xcdGlmIChjb25maWctXFx1MDAzZXBhdXNlIFxcdTAwMjYgTUxPX1BBVVNFX0FOKSB7XFxuK1xcdFxcdGlmIChwaHlsaW5rX3Rlc3QocGwtXFx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoY29uZmlnLVxcdTAwM2VwYXVzZSBcXHUwMDI2IE1MT19QQVVTRV9SWCkgXFx1MDAyNlxcdTAwMjYgKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfVFgpKVxcbitcXHRcXHRcXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuK1xcbitcXHRcXHRpZiAocGh5bGlua190ZXN0KHBsLVxcdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfUlgpIF4gKGNvbmZpZy1cXHUwMDNlcGF1c2UgXFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcXG4rXFx0XFx0XFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgY29uZmlnLVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcGwtXFx1MDAzZXBoeWRldilcXG4rXFx0XFx0cGh5bGlua19jaGFuZ2VfaW5iYW5kX2FkdmVydChwbCk7XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VzdGF0ZV9tdXRleCk7XFxuK1xcbitcXHRpZiAocGwtXFx1MDAzZXBoeWRldikge1xcbitcXHRcXHRwYXVzZV9hZHYgPSBsaW5rbW9kZV90ZXN0X2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbitcXHRcXHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIGNvbmZpZy1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbitcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2cGwtXFx1MDAzZXBoeWRldi1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbitcXHRcXHRcXHRcXHQgcGwtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlX2Fkdik7XFxuK1xcdFxcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXFxuK1xcdFxcdFxcdFxcdCBwbC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZywgYXN5bV9hZHYpO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnBsLVxcdTAwM2VwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0XFx0cGh5X3N0YXJ0X2FuZWcocGwtXFx1MDAzZXBoeWRldik7XFxuK1xcdH1cXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKTtcXG4rXFxuIC8qKlxcbiAgKiBwaHlsaW5rX2NyZWF0ZSgpIC0gY3JlYXRlIGEgcGh5bGluayBpbnN0YW5jZVxcbiAgKiBAY29uZmlnOiBhIHBvaW50ZXIgdG8gdGhlIHRhcmdldCBcXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jIGIvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG5pbmRleCBiNjVkMGY1ZmExYTAxNC4uNDcyMWJhMDcxY2JiZTQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xcbkBAIC0xNyw3ICsxNyw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY2xrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmdfY2hvaWNlcy5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjbmV0L3BoeS9yZWFsdGVrX3BoeS5oXFx1MDAzZVxcbiBcXG4gI2luY2x1ZGUgXFxcIi4uL3BoeWxpYi5oXFxcIlxcbiAjaW5jbHVkZSBcXFwicmVhbHRlay5oXFxcIlxcbkBAIC0yNjQ2LDQ1ICsyNjQ1LDYgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgyMjFiX2hhbmRsZV9pbnRlcnJ1cHQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4gXFx0cmV0dXJuIElSUV9IQU5ETEVEO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IHJ0bGdlbl9zZnBfZ2V0X2ZlYXR1cmVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuLXtcXG4tXFx0bGlua21vZGVfc2V0X2JpdChFVEhUT09MX0xJTktfTU9ERV8xMDAwMGJhc2VUX0Z1bGxfQklULFxcbi1cXHRcXHRcXHQgcGh5ZGV2LVxcdTAwM2VzdXBwb3J0ZWQpO1xcbi1cXG4tXFx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xcbi1cXHRwaHlkZXYtXFx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XFxuLVxcdHBoeWRldi1cXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XFxuLVxcbi1cXHRwaHlkZXYtXFx1MDAzZXBvcnQgPSBQT1JUX0ZJQlJFO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdGludCB2YWwsIGVycjtcXG4tXFxuLVxcdGVyciA9IGdlbnBoeV91cGRhdGVfbGluayhwaHlkZXYpO1xcbi1cXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXG4tXFx0aWYgKCFwaHlkZXYtXFx1MDAzZWxpbmspXFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXG4tXFx0dmFsID0gcGh5X3JlYWQocGh5ZGV2LCBSVExfUEhZU1IpO1xcbi1cXHRpZiAodmFsIFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIHZhbDtcXG4tXFxuLVxcdHJ0bGdlbl9kZWNvZGVfcGh5c3IocGh5ZGV2LCB2YWwpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9jb25maWdfYW5lZyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi17XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XFxuIFxcdHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxcbkBAIC0yOTM0LDIwICsyODk0LDYgQEAgc3RhdGljIHN0cnVjdCBwaHlfZHJpdmVyIHJlYWx0ZWtfZHJ2c1tdID0ge1xcbiBcXHRcXHQud3JpdGVfcGFnZVxcdD0gcnRsODIxeF93cml0ZV9wYWdlLFxcbiBcXHRcXHQucmVhZF9tbWRcXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXFxuIFxcdFxcdC53cml0ZV9tbWRcXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxcbi1cXHR9LCB7XFxuLVxcdFxcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXFxuLVxcdFxcdC5uYW1lXFx0XFx0PSBcXFwiUmVhbHRlayBTRlAgUEhZIE1vZGVcXFwiLFxcbi1cXHRcXHQuZmxhZ3NcXHRcXHQ9IFBIWV9JU19JTlRFUk5BTCxcXG4tXFx0XFx0LnByb2JlXFx0XFx0PSBydGw4MjJ4X3Byb2JlLFxcbi1cXHRcXHQuZ2V0X2ZlYXR1cmVzXFx0PSBydGxnZW5fc2ZwX2dldF9mZWF0dXJlcyxcXG4tXFx0XFx0LmNvbmZpZ19hbmVnXFx0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxcbi1cXHRcXHQucmVhZF9zdGF0dXNcXHQ9IHJ0bGdlbl9zZnBfcmVhZF9zdGF0dXMsXFxuLVxcdFxcdC5zdXNwZW5kXFx0PSBnZW5waHlfc3VzcGVuZCxcXG4tXFx0XFx0LnJlc3VtZVxcdFxcdD0gcnRsZ2VuX3Jlc3VtZSxcXG4tXFx0XFx0LnJlYWRfcGFnZVxcdD0gcnRsODIxeF9yZWFkX3BhZ2UsXFxuLVxcdFxcdC53cml0ZV9wYWdlXFx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXFxuLVxcdFxcdC5yZWFkX21tZFxcdD0gcnRsODIyeF9yZWFkX21tZCxcXG4tXFx0XFx0LndyaXRlX21tZFxcdD0gcnRsODIyeF93cml0ZV9tbWQsXFxuIFxcdH0sIHtcXG4gXFx0XFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAxY2NhZDApLFxcbiBcXHRcXHQubmFtZVxcdFxcdD0gXFxcIlJUTDgyMjQgMi41R2JwcyBQSFlcXFwiLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaCBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuaW5kZXggMmJjMGRiM2Q1MmFjOGQuLmUzYzc4MjIxMDBhYmE2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcGh5bGluay5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcXG5AQCAtODQyLDQgKzg0Miw2IEBAIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19iZWdpbihzdHJ1Y3QgcGh5bGluayAqcGwpO1xcbiBcXG4gdm9pZCBwaHlsaW5rX3JlcGxheV9saW5rX2VuZChzdHJ1Y3QgcGh5bGluayAqcGwpO1xcbiBcXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpO1xcbitcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oIGIvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmhcXG5kZWxldGVkIGZpbGUgbW9kZSAxMDA2NDRcXG5pbmRleCBkNjgzYmMxYjA2NTljZC4uMDAwMDAwMDAwMDAwMDBcXG4tLS0gYS9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxcbisrKyAvZGV2L251bGxcXG5AQCAtMSw3ICswLDAgQEBcXG4tLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi9cXG4tI2lmbmRlZiBfUkVBTFRFS19QSFlfSFxcbi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9IXFxuLVxcbi0jZGVmaW5lXFx0UEhZX0lEX1JUTF9EVU1NWV9TRlBcXHQweDAwMWNjYmZmXFxuLVxcbi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6MzM6NTkuOTU5NTU2ODY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTkwNzY3NTc2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3dyaXRlXCIsXG4gICAgXCJyODEyN19zZHNfbW9kaWZ5XCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xZ1wiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMTBnXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGxfaXNfODExNmFmXCIsXG4gICAgXCJydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9uc1wiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgUmVhbHRlayByODE2OSBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBhbmQgaW50cm9kdWNlcyBhIG5ldyBwaHlsaW5rIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc2YTI5NjE2NDkwMTE0ZjM4NjJmYTQyMDdhODdhZmM2Njc4NmQ5YmVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAxMCAwNTozMzo1NyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjU4MThhOWE1MDBhODZkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbkBAIC04Niw4ICs4Niw4IEBAIGNvbmZpZyBSODE2OVxuIFx0ZGVwZW5kcyBvbiBQQ0lcbiBcdHNlbGVjdCBGV19MT0FERVJcbiBcdHNlbGVjdCBDUkMzMlxuLVx0c2VsZWN0IFBIWUxJQlxuIFx0c2VsZWN0IFJFQUxURUtfUEhZXG4rXHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIwLi5jMGIwYzJiYzVhNDg1NSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuQEAgLTI2LDEyICsyNiwxMiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRmaWVsZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2lwNl9jaGVja3N1bS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L25ldGRldl9xdWV1ZXMuaFx1MDAzZVxuLSNpbmNsdWRlIFx1MDAzY25ldC9waHkvcmVhbHRla19waHkuaFx1MDAzZVxuIFxuICNpbmNsdWRlIFwicjgxNjkuaFwiXG4gI2luY2x1ZGUgXCJyODE2OV9maXJtd2FyZS5oXCJcbkBAIC05Niw2ICs5NiwyNSBAQFxuICNkZWZpbmUgSlVNQk9fOUtcdCg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4gI2RlZmluZSBKVU1CT18xNktcdChTWl8xNksgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pXG4gXG4rI2RlZmluZSBSODEyN19TRFNfQ01EXHRcdDB4MjM0OFxuKyNkZWZpbmUgUjgxMjdfU0RTX0FERFJcdFx0MHgyMzRhXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9JTlx0MHgyMzRjXG4rI2RlZmluZSBSODEyN19TRFNfREFUQV9PVVRcdDB4MjM0ZVxuKyNkZWZpbmUgUjgxMjdfU0RTX0NNRF9FWEVDXHRCSVQoMClcbisjZGVmaW5lIFI4MTI3X1NEU19DTURfV0VcdEJJVCgxKVxuKyNkZWZpbmUgT0NQX1NEU19BRERSX1JFR1x0MHhlYjEwXG4rI2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcdFx0MHhlYjBlXG4rI2RlZmluZSBPQ1BfU0RTX0RBVEFfUkVHXHQweGViMTRcbisjZGVmaW5lIFNEU19DTURfUkVBRFx0XHQweDAwMDFcbisjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcdDB4NDBcbisjZGVmaW5lIFJUTF9TRFNfQzQ1X0JBU0VcdDB4MDA4MFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RcdFx0MHhkYzAwXG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXHQweDAwNzhcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRlx0MHgwMDMwXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXHRcdDB4ZDAwNlxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXHQweDAwZmZcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfODExNkFGXHQweDAwMDBcbitcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuIFx0dTMyIG1hc2s7XG4gXHR1MzIgdmFsO1xuQEAgLTMzNCwxMSArMzUzLDEzIEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuK1x0U0VORF9MVFJfTVNHXHQ9IDB4ZTAzOCxcbiBcbiAjZGVmaW5lIEFMRFBTX0xUUl9FTlx0XHRcdEJJVCgwKVxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlx0XHRCSVQoMClcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXHRcdEJJVCgxNClcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlx0XHRcdEdFTk1BU0soMTUsIDE0KVxuKyNkZWZpbmUgTFRSX01TR19FTlx0XHRcdEJJVCgwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiArNzQ5LDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XG4gXHRSVExfREFTSF8yNV9CUCxcbiB9O1xuIFxuK2VudW0gcnRsX3NmcF9tb2RlIHtcbitcdFJUTF9TRlBfTk9ORSxcbitcdFJUTF9TRlBfODE2OF9BRixcbitcdFJUTF9TRlBfODEyN19BVEYsXG4rfTtcbitcbiBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHZvaWQgX19pb21lbSAqbW1pb19hZGRyO1x0LyogbWVtb3J5IG1hcCBwaHlzaWNhbCBhZGRyZXNzICovXG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjtcbkBAIC03MzYsNiArNzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgbmFwaV9zdHJ1Y3QgbmFwaTtcbiBcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XG4gXHRlbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlO1xuK1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICs3NzgsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHUzMiBpcnFfbWFzaztcbiBcdGludCBpcnE7XG4gXHRzdHJ1Y3QgY2xrICpjbGs7XG4rXHRpbnQgc3BlZWQ7XG4gXG4gXHRzdHJ1Y3Qge1xuIFx0XHRERUNMQVJFX0JJVE1BUChmbGFncywgUlRMX0ZMQUdfTUFYKTtcbkBAIC03NjIsNyArNzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiArODAyLDkgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuIH07XG4gXG4gdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7XG5AQCAtMTEyOCwxMCArMTE1OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKVxuIFx0aWYgKHJ0bF9vY3BfcmVnX2ZhaWx1cmUocmVnKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHQvKiBSZXR1cm4gZHVtbXkgTUlJX1BIWVNJRDIgaW4gU0ZQIG1vZGUgdG8gbWF0Y2ggU0ZQIFBIWSBkcml2ZXIgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSBcdTAwMjZcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTE5OSw2ICsxMjI2LDczIEBAIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0dXNsZWVwX3JhbmdlKDEwLCAyMCk7XG4gfVxuIFxuK0RFQ0xBUkVfUlRMX0NPTkQocjgxMjdfc2RzX2NtZF9jb25kKVxuK3tcbitcdHJldHVybiBSVExfUjE2KHRwLCBSODEyN19TRFNfQ01EKSBcdTAwMjYgUjgxMjdfU0RTX0NNRF9FWEVDO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLCB1MTYgcmVnKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQUREUiwgYWRkcik7XG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfQ01ELCBSODEyN19TRFNfQ01EX0VYRUMpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gUlRMX1IxNih0cCwgUjgxMjdfU0RTX0RBVEFfT1VUKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgaW50IHI4MTI3X3Nkc193cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IGluZGV4LCB1MTYgcGFnZSxcbitcdFx0XHQgICB1MTYgcmVnLCB1MTYgdmFsKVxuK3tcbitcdHUxNiBhZGRyID0gKGluZGV4IFx1MDAzY1x1MDAzYyAxMSkgfCAocGFnZSBcdTAwM2NcdTAwM2MgNSkgfCByZWc7XG4rXG4rXHRSVExfVzE2KHRwLCBSODEyN19TRFNfREFUQV9JTiwgdmFsKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19BRERSLCBhZGRyKTtcbitcdFJUTF9XMTYodHAsIFI4MTI3X1NEU19DTUQsIFI4MTI3X1NEU19DTURfRVhFQyB8IFI4MTI3X1NEU19DTURfV0UpO1xuK1xuK1x0aWYgKHJ0bF9sb29wX3dhaXRfbG93KHRwLCBcdTAwMjZyODEyN19zZHNfY21kX2NvbmQsIDEwLCAxMDApKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCByODEyN19zZHNfbW9kaWZ5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgaW5kZXgsIHUxNiBwYWdlLFxuK1x0XHRcdCAgICAgdTE2IHJlZywgdTE2IGNsZWFybWFzaywgdTE2IHNldG1hc2spXG4re1xuK1x0aW50IHZhbCA9IHI4MTI3X3Nkc19yZWFkKHRwLCBpbmRleCwgcGFnZSwgcmVnKTtcbitcbitcdGlmICh2YWwgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdHZhbCA9ICh2YWwgXHUwMDI2IH5jbGVhcm1hc2spIHwgc2V0bWFzaztcbitcdHI4MTI3X3Nkc193cml0ZSh0cCwgaW5kZXgsIHBhZ2UsIHJlZywgdmFsKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aW50IHZhbDtcbitcbitcdHI4MTI3X3NmcF9zZHNfcGh5X3Jlc2V0KHRwKTtcbitcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDEsIDMxLCAwLCBCSVQoMykpO1xuK1x0cjgxMjdfc2RzX21vZGlmeSh0cCwgMCwgMiwgIDAsIEJJVCgxMykgfCBCSVQoMTIpIHwgQklUKDYpLCBCSVQoMTIpIHwgQklUKDYpKTtcbitcdHI4MTI3X3Nkc19tb2RpZnkodHAsIDAsIDAsICA0LCAwLCBCSVQoMikpO1xuK1xuK1x0UlRMX1cxNih0cCwgMHgyMzNhLCAweDgwMDQpO1xuK1x0UlRMX1cxNih0cCwgMHgyMzNlLCAoUlRMX1IxNih0cCwgMHgyMzNlKSBcdTAwMjYgfjB4MzAwMykgfCAweDAwMDIpO1xuK1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDBhLCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjNDY2LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA4LCAweDAwMDApO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODBhLCAweDAwMDApO1xuK1xuK1x0dmFsID0gcjgxNjhfcGh5X29jcF9yZWFkKHRwLCAweGM4MDQpO1xuK1x0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHI4MTI3X3NmcF9pbml0XzEwZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpbnQgdmFsO1xuQEAgLTEyMTcsMTIgKzEzMTEsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiArMTM3MSwxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZywgdmFsdWUpO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHJldHVybiB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzUyIFx1MDAyNlx1MDAyNlxuK1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4rXHRcdFJUTF9QS0dfREVURUNUXzgxMTZBRiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCkgXHUwMDI2IFJUTF9JTlRfSFdfSURfTUFTSykgPT1cbitcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4rfVxuK1xuIHN0YXRpYyBpbnQgbWFjX21jdV9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnKVxuIHtcbiBcdHJldHVybiByODE2OF9tYWNfb2NwX3JlYWQodHAsIHRwLVx1MDAzZW9jcF9iYXNlICsgcmVnKTtcbkBAIC0xNTc4LDYgKzE2NzUsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiB9XG4gXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuK1x0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XG4rXG4rXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbitcdFx0XHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcbitcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbitcdFx0cmV0dXJuIFJUTF9TRlBfODE2OF9BRjtcbitcdH1cbitcbitcdHJldHVybiBSVExfU0ZQX05PTkU7XG4rfVxuK1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgKzE3ODQsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cnRsX3BjaV9jb21taXQodHApO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXG4ge1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8XG4gXHQgICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zOCkge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4rXHRcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTY5Miw3ICsxODAxLDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcbiBcdFx0ICAgdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNikge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcbitcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgKzE4MDksNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XG4gXHRcdH1cbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xuLVx0XHRpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWQwLCBFUklBUl9NQVNLXzAwMTEsIDB4NGQwMik7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMjA3NCwxMSArMjE4MywxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuK1x0aWYgKHRwLVx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXG4gXHRcdHJldHVybiBjaTtcbiBcbiBcdGZvciAoOyBjaS1cdTAwM2VzcGVlZDsgY2krKykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuK1x0XHRpZiAodHAtXHUwMDNlc3BlZWQgPT0gY2ktXHUwMDNlc3BlZWQpXG4gXHRcdFx0cmV0dXJuIGNpO1xuIFx0fVxuIFxuQEAgLTIyMzYsNyArMjM0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuLVx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkO1xuK1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICsyMzYzLDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldCA9IHBoeV9ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldCA9IHBoeWxpbmtfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0yMjcwLDcgKzIzNzksNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcmluZ3BhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMwMSwxMyArMjQxMCw4IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3BhdXNlcGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHRcdCAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XG4tXG4tXHRwaHlfZ2V0X3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgXHUwMDI2dHhfcGF1c2UsIFx1MDAyNnJ4X3BhdXNlKTtcbiBcbi1cdGRhdGEtXHUwMDNlYXV0b25lZyA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhdXRvbmVnO1xuLVx0ZGF0YS1cdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XG4tXHRkYXRhLVx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcbitcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICsyNDIyLDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRpZiAoZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRwaHlfc2V0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBkYXRhLVx1MDAzZXJ4X3BhdXNlLCBkYXRhLVx1MDAzZXR4X3BhdXNlKTtcbi1cbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX21hY19zdGF0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzODYsMzQgKzI0ODgsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbitzdGF0aWMgaW50IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVx1MDAzZXBoeWRldjtcbi1cdGludCBkdXBsZXggPSBjbWQtXHUwMDNlYmFzZS5kdXBsZXg7XG4tXHRpbnQgc3BlZWQgPSBjbWQtXHUwMDNlYmFzZS5zcGVlZDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJldHVybiBwaHlfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHBoeWRldiwgY21kKTtcbi1cbi1cdGlmIChjbWQtXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4tXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXHUwMDNlc3VwcG9ydGVkKSlcbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdHBoeWRldi1cdTAwM2VhdXRvbmVnID0gQVVUT05FR19ESVNBQkxFO1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gZHVwbGV4O1xuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXG4rXHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4gXG4tXHRydGxfc2ZwX2luaXQodHApO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4rfVxuIFxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNnBoeWRldi1cdTAwM2Vsb2NrKTtcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbi1cdHJldHVybiAwO1xuK1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9ud2F5X3Jlc2V0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG5AQCAtMjQzMSwxMCArMjUyNiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuK1x0Lm53YXlfcmVzZXRcdFx0PSBydGw4MTY5X253YXlfcmVzZXQsXG4gXHQuZ2V0X2VlZVx0XHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcbiBcdC5zZXRfZWVlXHRcdD0gcnRsODE2OV9zZXRfZWVlLFxuLVx0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsXG4rXHQuZ2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LnNldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5nZXRfcmluZ3BhcmFtXHRcdD0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLFxuIFx0LmdldF9wYXVzZV9zdGF0c1x0PSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cyxcbkBAIC0yNDk5LDkgKzI1OTQsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4rXHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbitcdFx0XHRcdFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XG4gXHR9XG4gfVxuIFxuQEAgLTI1MzgsNiArMjYzNCw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9zY2hlZHVsZV90YXNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBlbnVtIHJ0bF9mbGFnIGZsYWcpXG4gXG4gc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4rXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuIFx0cjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtXHUwMDNlcGh5ZGV2LCB0cC1cdTAwM2VtYWNfdmVyc2lvbik7XG4gXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNjPSBSVExfR0lHQV9NQUNfVkVSXzA2KSB7XG5AQCAtMjU1Miw5ICsyNjUwLDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdCAgICB0cC1cdTAwM2VwY2lfZGV2LVx1MDAzZXN1YnN5c3RlbV9kZXZpY2UgPT0gMHhlMDAwKVxuIFx0XHRwaHlfd3JpdGVfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDAwMDEsIDB4MTAsIDB4ZjAxYik7XG4gXG4tXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUpXG4tXHRcdHJ0bF9zZnBfaW5pdCh0cCk7XG4tXG4gXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXG4gXHRwaHlfc3BlZWRfdXAodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC0yNjU3LDE1ICsyNzUyLDYgQEAgc3RhdGljIHZvaWQgcnRsX2p1bWJvX2NvbmZpZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdGlmIChwY2lfaXNfcGNpZSh0cC1cdTAwM2VwY2lfZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbiBcdFx0cGNpZV9zZXRfcmVhZHJxKHRwLVx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XG4tXG4tXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4tXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4tXHR9XG4gfVxuIFxuIERFQ0xBUkVfUlRMX0NPTkQocnRsX2NoaXBjbWRfY29uZClcbkBAIC0yNzgwLDcgKzI4NjYsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI5MTgsMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE5NCwyMyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4gXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbiBcdFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XG4gXHRcdGZhbGx0aHJvdWdoO1xuQEAgLTMxMTksNiArMzIzMCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0fVxuIFx0LyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi9cbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDMsIExUUl9PQkZGX0xPQ0tfRU4pO1xuK1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICszMjY0LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHRcdHJ0bF9lbmFibGVfbHRyKHRwKTtcbiBcdFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XG4rXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XG4gXHRcdFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXG4gXHRcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTtcbkBAIC0zMTY0LDYgKzMyNzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XG4gXHRcdFx0YnJlYWs7XG5AQCAtMzY1Nyw2ICszNzcxLDQyIEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTY4ZXBfMyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGU4NjAsIDB4MDAwMCwgMHgwMDgwKTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4re1xuK1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbitcdHN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LVx1MDAzZWJ1cztcbitcdGludCBmdW5jLCBwb3M7XG4rXHR1MTYgdmFsO1xuK1xuK1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYysrKSB7XG4rXHRcdHVuc2lnbmVkIGludCBkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9FWFApO1xuK1x0XHRpZiAocG9zKSB7XG4rXHRcdFx0cGNpX2J1c19yZWFkX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9FWFBfTE5LQ1RMLCBcdTAwMjZ2YWwpO1xuK1xuK1x0XHRcdGlmIChQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdHZhbCB8PSAoUENJX0VYUF9MTktDVExfQVNQTUMgfCBQQ0lfRVhQX0xOS0NUTF9DTEtSRVFfRU4pO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX0VYUF9MTktDVEwsIHZhbCk7XG4rXHRcdH1cbitcbitcdFx0cG9zID0gcGNpX2J1c19maW5kX2NhcGFiaWxpdHkoYnVzLCBkZXZmbiwgUENJX0NBUF9JRF9QTSk7XG4rXHRcdGlmIChwb3MpIHtcbitcdFx0XHRwY2lfYnVzX3JlYWRfY29uZmlnX3dvcmQoYnVzLCBkZXZmbiwgcG9zICsgUENJX1BNX0NUUkwsIFx1MDAyNnZhbCk7XG4rXG4rXHRcdFx0aWYgKFBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0dmFsIFx1MDAyNj0gflBDSV9QTV9DVFJMX1NUQVRFX01BU0s7XG4rXHRcdFx0dmFsIHw9IFBDSV9EM2hvdDtcbitcdFx0XHR2YWwgfD0gUENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbitcdFx0XHRwY2lfYnVzX3dyaXRlX2NvbmZpZ193b3JkKGJ1cywgZGV2Zm4sIHBvcyArIFBDSV9QTV9DVFJMLCB2YWwpO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XG5AQCAtMzY5MywxMiArMzg0MywxNCBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcbiBcdHJ0bF9wY2llX3N0YXRlX2wybDNfZGlzYWJsZSh0cCk7XG4gXG4tXHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4tXHRpZiAocmdfc2F3X2NudCBcdTAwM2UgMCkge1xuLVx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4rXHRcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbitcdFx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbitcdFx0XHR1MTYgc3dfY250XzFtc19pbmk7XG4gXG4tXHRcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXHUwMDI2IDB4MGZmZjtcbi1cdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XG4rXHRcdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuK1x0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7XG5AQCAtNDEzOSwxMiArNDI5MSwyNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnQoc3RydWN0ICBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcdGJvb2wganVtYm9fYmVmb3JlID0gZGV2LVx1MDAzZW10dSBcdTAwM2UgRVRIX0RBVEFfTEVOO1xuK1x0Ym9vbCBqdW1ib19hZnRlciA9IG5ld19tdHUgXHUwMDNlIEVUSF9EQVRBX0xFTjtcbiBcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbiBcdHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcih0cCk7XG4gXG4rXHRpZiAoanVtYm9fYmVmb3JlICE9IGp1bWJvX2FmdGVyKSB7XG4rXHRcdHVuc2lnbmVkIGxvbmcgY2FwcyA9IHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXM7XG4rXG4rXHRcdGlmIChqdW1ib19hZnRlcilcbitcdFx0XHRjYXBzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1x0XHRlbHNlXG4rXHRcdFx0Y2FwcyB8PSAoTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKTtcbitcbitcdFx0cGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcyh0cC1cdTAwM2VwaHlsaW5rLCBjYXBzKTtcbitcdH1cbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC00ODY5LDggKzUwMzQsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKVxuLVx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZykge1xuK1x0XHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVx1MDAzZXBoeWRldik7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0XHRcdHBoeWxpbmtfbWFjX2NoYW5nZSh0cC1cdTAwM2VwaHlsaW5rLFxuK1x0XHRcdFx0XHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXHUwMDI2IExpbmtTdGF0dXMpKTtcbitcdH1cbiBcbiBcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XG4gXHRuYXBpX3NjaGVkdWxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuQEAgLTQ5MzAsOSArNTEwMCw2IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9wb2xsKHN0cnVjdCBuYXBpX3N0cnVjdCAqbmFwaSwgaW50IGJ1ZGdldClcbiBcbiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4ge1xuLVx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cmV0dXJuO1xuLVxuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzM0IC4uLiBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHQvKiBBZGp1c3QgRUVFIExFRCBmcmVxdWVuY3kgKi9cbkBAIC00OTYzLDQwICs1MTMwLDE1IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbi1cbi1cdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XG4tXHRcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XG4tXHRcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlZW5hYmxlX3R4X2xwaSk7XG4tXHRcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cG1fcnVudGltZV9pZGxlKGQpO1xuLVx0fVxuLVxuLVx0cGh5X3ByaW50X3N0YXR1cyh0cC1cdTAwM2VwaHlkZXYpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuLVx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVxuLVx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLVx1MDAzZWRldiwgcGh5ZGV2LCByODE2OV9waHlsaW5rX2hhbmRsZXIsXG4tXHRcdFx0XHQgcGh5X21vZGUpO1xuLVx0aWYgKHJldClcbitcdHJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluaywgdHAtXHUwMDNlcGh5ZGV2KTtcbitcdGlmIChyZXQpIHtcbitcdFx0bmV0ZGV2X2Vycih0cC1cdTAwM2VkZXYsIFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxuXCIpO1xuIFx0XHRyZXR1cm4gcmV0O1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuLVx0XHRwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7XG4tXG4tXHRwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpO1xuK1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUwMDcsMTAgKzUxNDksOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xuIFx0Yml0bWFwX3plcm8odHAtXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XG4gXG4tXHRwaHlfc3RvcCh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbitcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRydGxfc2ZwX3Jlc2V0KHRwKTtcbiBcbiBcdHJ0bDgxNjlfdXBkYXRlX2NvdW50ZXJzKHRwKTtcbkBAIC01MDMyLDE0ICs1MTcyLDEyIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfdXAoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcbiBcdHBjaV9zZXRfbWFzdGVyKHRwLVx1MDAzZXBjaV9kZXYpO1xuLVx0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbitcdFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXG4gXHRuYXBpX2VuYWJsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbiBcdGVuYWJsZV93b3JrKFx1MDAyNnRwLVx1MDAzZXdrLndvcmspO1xuIFx0cnRsX3Jlc2V0X3dvcmsodHApO1xuLVxuLVx0cGh5X3N0YXJ0KHRwLVx1MDAzZXBoeWRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTUwNDksMTMgKzUxODcsMTQgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRwbV9ydW50aW1lX2dldF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbitcdHBoeWxpbmtfc3RvcCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdG5ldGlmX3N0b3BfcXVldWUoZGV2KTtcbiBcdHJ0bDgxNjlfZG93bih0cCk7XG4gXHRydGw4MTY5X3J4X2NsZWFyKHRwKTtcbiBcbiBcdGZyZWVfaXJxKHRwLVx1MDAzZWlycSwgdHApO1xuIFxuLVx0cGh5X2Rpc2Nvbm5lY3QodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeWxpbmtfZGlzY29ubmVjdF9waHkodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHRkbWFfZnJlZV9jb2hlcmVudChcdTAwMjZwZGV2LVx1MDAzZWRldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtXHUwMDNlUnhEZXNjQXJyYXksXG4gXHRcdFx0ICB0cC1cdTAwM2VSeFBoeUFkZHIpO1xuQEAgLTUxMTIsMTEgKzUyNTEsMTMgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfcmVsZWFzZV9md18yO1xuIFxuLVx0cmV0dmFsID0gcjgxNjlfcGh5X2Nvbm5lY3QodHApO1xuLVx0aWYgKHJldHZhbClcbi1cdFx0Z290byBlcnJfZnJlZV9pcnE7XG4tXG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4rXHRcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcbitcdFx0aWYgKHJldHZhbClcbitcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbitcdH1cbiBcdHJ0bDgxNjlfdXAodHApO1xuK1x0cGh5bGlua19zdGFydCh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuIFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbiBvdXQ6XG5AQCAtNTIyMSw2ICs1MzYyLDkgQEAgc3RhdGljIGludCBydGw4MTY5X3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UpXG4gXHQvKiBTb21lIGNoaXAgdmVyc2lvbnMgbWF5IHRydW5jYXRlIHBhY2tldHMgd2l0aG91dCB0aGlzIGluaXRpYWxpemF0aW9uICovXG4gXHRydGxfaW5pdF9yeGNmZyh0cCk7XG4gXG4rXHRpZiAocnRsX2lzXzgxMTZhZih0cCkpXG4rXHRcdHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zKHRwLVx1MDAzZXBjaV9kZXYpO1xuK1xuIFx0cmV0dXJuIHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoZGV2aWNlKTtcbiB9XG4gXG5AQCAtNTI4OCw2ICs1NDMyLDcgQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHI4MTY5X3JlbW92ZV9sZWRzKHRwLVx1MDAzZWxlZHMpO1xuIFxuIFx0dW5yZWdpc3Rlcl9uZXRkZXYodHAtXHUwMDNlZGV2KTtcbitcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGlmICh0cC1cdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XG5AQCAtNTMxMCw3ICs1NDU1LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHtcbiBcdC5uZG9fZml4X2ZlYXR1cmVzXHQ9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLFxuIFx0Lm5kb19zZXRfZmVhdHVyZXNcdD0gcnRsODE2OV9zZXRfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBydGxfc2V0X21hY19hZGRyZXNzLFxuLVx0Lm5kb19ldGhfaW9jdGxcdFx0PSBwaHlfZG9faW9jdGxfcnVubmluZyxcbitcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcnRsODE2OV9pb2N0bCxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsX3NldF9yeF9tb2RlLFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuIFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gcnRsODE2OV9uZXRwb2xsLFxuQEAgLTU0NzQsMTYgKzU2MTksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJldHVybiAtRVVOQVRDSDtcbiBcdH1cbiBcbi1cdHRwLVx1MDAzZXBoeWRldi1cdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4tXHRpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHBoeV9zdXBwb3J0X2VlZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3N1cHBvcnRfYXN5bV9wYXVzZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVxuLVx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuLVx0XHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cdTAwM2VwaHlkZXYsXG4tXHRcdFx0XHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XG4tXG4gXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXG4gXHRwaHlfc3VzcGVuZCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTU1OTksNiArNTczNCwyNDcgQEAgc3RhdGljIGJvb2wgcnRsX2FzcG1faXNfc2FmZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJldHVybiBmYWxzZTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4rXHRwbV9ydW50aW1lX2lkbGUodHBfdG9fZGV2KHRwKSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbitcdFx0XHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0ICAgIGludCBzcGVlZCwgaW50IGR1cGxleCwgYm9vbCB0eF9wYXVzZSwgYm9vbCByeF9wYXVzZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xuK1xuK1x0dHAtXHUwMDNlc3BlZWQgPSBzcGVlZDtcbitcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xuK1xuK1x0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbitcdFx0XHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdGlmICghdHAtXHUwMDNlcGNzLm9wcylcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRpZiAoaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVggfHxcbitcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSKVxuK1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuK1xuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfY29uZmlnKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcbitcdFx0XHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rfVxuK1xuK3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXG4re1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdHUxNiB2YWwgPSAwO1xuK1xuK1x0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnRwLVx1MDAzZW1hY19vY3BfbG9jaywgZmxhZ3MpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcbitcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xuK1x0dmFsID0gX19yODE2OF9tYWNfb2NwX3JlYWQodHAsIE9DUF9TRFNfREFUQV9SRUcpO1xuK1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXG4rXHRyZXR1cm4gdmFsO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG4rXHRcdFx0XHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbitcdFx0XHRcdCAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbitcdFx0dTE2IHN0YXQxO1xuK1xuK1x0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0aWYgKCEoc3RhdDEgXHUwMDI2IE1ESU9fU1RBVDFfTFNUQVRVUykpXG4rXHRcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICsgTURJT19TVEFUMSk7XG4rXG4rXHRcdHN0YXRlLVx1MDAzZWxpbmsgPSAhIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcbitcdFx0aWYgKCFzdGF0ZS1cdTAwM2VsaW5rKVxuK1x0XHRcdHJldHVybjtcbitcbitcdFx0aWYgKHN0YXRlLVx1MDAzZWludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYKVxuK1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDtcbitcdFx0ZWxzZVxuK1x0XHRcdHN0YXRlLVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4rXG4rXHRcdHN0YXRlLVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuK1x0fSBlbHNlIHtcbitcdFx0dTE2IGJtc3IsIGxwYTtcbitcbitcdFx0Ym1zciA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfQk1TUik7XG4rXHRcdGxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgKyBNSUlfTFBBKTtcbitcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuK1x0fVxuK31cbitcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbitcdFx0XHQgICAgICBib29sIHBlcm1pdF9wYXVzZV90b19tYWMpXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpIHtcbitcdFx0c3dpdGNoIChpbnRlcmZhY2UpIHtcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI6XG4rXHRcdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbitcdFx0XHRicmVhaztcbitcdFx0Y2FzZSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOlxuK1x0XHRcdHI4MTI3X3NmcF9pbml0XzFnKHRwKTtcbitcdFx0XHRicmVhaztcbitcdFx0ZGVmYXVsdDpcbitcdFx0XHRuZXRkZXZfZXJyKHRwLVx1MDAzZWRldiwgXCJVbnN1cHBvcnRlZCBTRlAgaW50ZXJmYWNlIG1vZGU6ICVzXFxuXCIsXG4rXHRcdFx0XHQgICBwaHlfbW9kZXMoaW50ZXJmYWNlKSk7XG4rXHRcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3Bjc192YWxpZGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLFxuK1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4re1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXG4re1xuK31cbitcbitzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0cnRsX2VuYWJsZV90eF9scGkodHAsIGZhbHNlKTtcbit9XG4rXG4rc3RhdGljIGludCBydGxfbWFjX2VuYWJsZV90eF9scGkoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHUzMiB0aW1lciwgYm9vbCB0eF9jbGtfc3RvcClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cnVlKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfbWFjX29wcyBydGxfcGh5bGlua19tYWNfb3BzID0ge1xuK1x0Lm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLFxuK1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbitcdC5tYWNfbGlua19kb3duICA9IHJ0bF9tYWNfbGlua19kb3duLFxuK1x0Lm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLFxuK1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4rXHQubWFjX2VuYWJsZV90eF9scGkgPSBydGxfbWFjX2VuYWJsZV90eF9scGksXG4rfTtcbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyBydGw4MTY5X2dldF9scGlfY2FwcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuK1xuK1x0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSB8fCB0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdGNhcHMgfD0gTUFDXzEwMEZEIHwgTUFDXzEwMDBGRDtcbitcbitcdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzXG4rXHQgKiBSVExfR0lHQV9NQUNfVkVSXzYxIGRvZXNuJ3Qgc3VwcG9ydCAyLjVHIGVlZVxuK1x0ICovXG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYzKVxuK1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuK1x0XHRjYXBzIHw9IE1BQ181MDAwRkQ7XG4rXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0Y2FwcyB8PSBNQUNfMTAwMDBGRDtcbitcbitcdHJldHVybiBjYXBzO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuK1x0LnBjc192YWxpZGF0ZSA9IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlLFxuK1x0LnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsXG4rXHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbitcdC5wY3NfYW5fcmVzdGFydCA9IHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQsXG4rfTtcbitcbitzdGF0aWMgaW50IHJ0bF9pbml0X3BoeWxpbmsoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuK1x0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnR5cGUgPSBQSFlMSU5LX05FVERFVjtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ19BU1lNX1BBVVNFIHwgTUFDX1NZTV9QQVVTRTtcbitcbitcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbitcdGNhc2UgUlRMX1NGUF84MTY4X0FGOlxuK1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMDAwQkFTRVg7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHRjYXNlIFJUTF9TRlBfODEyN19BVEY6XG4rXHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMTAwMDBGRDtcbitcdFx0X19zZXRfYml0KFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUiwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRfX3NldF9iaXQoUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCwgdHAtXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xuK1x0XHRicmVhaztcbitcdGRlZmF1bHQ6XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRCB8XG4rXHRcdFx0XHRcdFx0XHQgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xuK1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XG4rXHRcdFx0XHRcdFx0XHQgICAgICAgTUFDXzI1MDBGRCB8IE1BQ181MDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xuK1x0XHRlbHNlXG4rXHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4rXHRcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXG4rXHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbitcdFx0XHRwaHlfbW9kZSA9IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6XG4rXHRcdFx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuK1x0XHRlbHNlXG4rXHRcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4rXHRcdGJyZWFrO1xuK1x0fVxuK1xuK1x0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7XG4rXHRpZiAodHAtXHUwMDNlcGh5bGlua19jb25maWcubHBpX2NhcGFiaWxpdGllcylcbitcdFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfaW50ZXJmYWNlcyk7XG4rXG4rXHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbitcdFx0XHQgICAgcGh5X21vZGUsIFx1MDAyNnJ0bF9waHlsaW5rX21hY19vcHMpO1xuK1x0aWYgKElTX0VSUihwbCkpXG4rXHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbitcbitcdHRwLVx1MDAzZXBoeWxpbmsgPSBwbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgKzYwNDMsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0XHRcdCAgICAgZXh0X3hpZF9zdHIsIHhpZCk7XG4gXHR0cC1cdTAwM2VtYWNfdmVyc2lvbiA9IGNoaXAtXHUwMDNlbWFjX3ZlcnNpb247XG4gXHR0cC1cdTAwM2Vmd19uYW1lID0gY2hpcC1cdTAwM2Vmd19uYW1lO1xuK1x0dHAtXHUwMDNlc3BlZWQgPSBTUEVFRF9VTktOT1dOO1xuIFxuIFx0LyogRGlzYWJsZSBBU1BNIEwxIGFzIHRoYXQgY2F1c2UgcmFuZG9tIGRldmljZSBzdG9wIHdvcmtpbmdcbiBcdCAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzLlxuQEAgLTU2NzksMTIgKzYwNTYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4rXHR0cC1cdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xuIFxuIFx0dHAtXHUwMDNlZGFzaF90eXBlID0gcnRsX2dldF9kYXNoX3R5cGUodHApO1xuIFx0dHAtXHUwMDNlZGFzaF9lbmFibGVkID0gcnRsX2Rhc2hfaXNfZW5hYmxlZCh0cCk7XG5AQCAtNTc4OCwxMyArNjE2MCwyMyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcbiBcdHBjaV9zZXRfZHJ2ZGF0YShwZGV2LCB0cCk7XG4gXG4tXHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xuK1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkge1xuK1x0XHRyYyA9IHI4MTY5X21kaW9fcmVnaXN0ZXIodHApO1xuK1x0XHRpZiAocmMpIHtcbitcdFx0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4rXHRcdFx0cmV0dXJuIHJjO1xuK1x0XHR9XG4rXHR9XG4rXG4gXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xuLVx0aWYgKHJjKVxuK1x0aWYgKHJjKSB7XG4rXHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcdFx0cmV0dXJuIHJjO1xuK1x0fVxuIFxuIFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX1I4MTY5X0xFRFMpKSB7XG4gXHRcdGlmIChydGxfaXNfODEyNSh0cCkpXG5AQCAtNTgxNyw2ICs2MTk5LDkgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbitcdGlmIChydGxfaXNfODExNmFmKHRwKSlcbitcdFx0cnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnModHAtXHUwMDNlcGNpX2Rldik7XG4rXG4gXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbmluZGV4IDU5ZGZlMzVhZmE1NGZjLi45ZTljZDc5MzAxZDY2YyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNcbkBAIC0xODI4LDYgKzE4MjgsOTMgQEAgaW50IHBoeWxpbmtfc2V0X2ZpeGVkX2xpbmsoc3RydWN0IHBoeWxpbmsgKnBsLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcbiBcbisvKipcbisgKiBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKCkgLSBEeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlXG4rICogQHBsOiBhIHBvaW50ZXIgdG8gYSBcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcbisgKiBAbWFjX3BhdXNlOiB0aGUgbmV3IE1BQyBwYXVzZSBjYXBhYmlsaXRpZXMgbWFza1xuKyAqXG4rICogVGhpcyBmdW5jdGlvbiBhbGxvd3MgYSBNQUMgZHJpdmVyIHRvIGR5bmFtaWNhbGx5IGNoYW5nZSBpdHMgcGF1c2Ugc3RhdGUsXG4rICogc3VjaCBhcyBsb3NpbmcvZ2FpbmluZyBQYXVzZSBmcmFtZSBzdXBwb3J0IGJhc2VkIG9uIE1UVSBzaXplLlxuKyAqIEl0IHJlY2FsY3VsYXRlcyBzdXBwb3J0ZWQgbGluayBtb2RlcyBhbmQgdHJpZ2dlcnMgcmVuZWdvdGlhdGlvbiBpZiBuZWVkZWQuXG4rICovXG4rdm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXG4re1xuK1x0c3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqY29uZmlnID0gXHUwMDI2cGwtXHUwMDNlbGlua19jb25maWc7XG4rXHR1bnNpZ25lZCBsb25nIG9sZF9wYXVzZSwgY2Fwc19hZGRlZCwgY2Fwc19yZW1vdmVkO1xuK1x0Ym9vbCBwYXVzZV9hZHYsIGFzeW1fYWR2O1xuK1xuK1x0QVNTRVJUX1JUTkwoKTtcbitcbitcdGlmIChtYWNfcGF1c2UgXHUwMDI2IH4oTUFDX1NZTV9QQVVTRSB8IE1BQ19BU1lNX1BBVVNFKSkge1xuK1x0XHRwaHlsaW5rX2VycihwbCwgXCJBdHRlbXB0ZWQgdG8gZHluYW1pY2FsbHkgY2hhbmdlIG5vbi1wYXVzZSBNQUMgY2FwYWJpbGl0aWVzXFxuXCIpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4rXHRvbGRfcGF1c2UgPSBwbC1cdTAwM2Vjb25maWctXHUwMDNlbWFjX2NhcGFiaWxpdGllcyBcdTAwMjYgKE1BQ19TWU1fUEFVU0UgfCBNQUNfQVNZTV9QQVVTRSk7XG4rXHRjYXBzX2FkZGVkID0gbWFjX3BhdXNlIFx1MDAyNiB+b2xkX3BhdXNlO1xuK1x0Y2Fwc19yZW1vdmVkID0gb2xkX3BhdXNlIFx1MDAyNiB+bWFjX3BhdXNlO1xuK1xuK1x0aWYgKCFjYXBzX2FkZGVkIFx1MDAyNlx1MDAyNiAhY2Fwc19yZW1vdmVkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdHBsLVx1MDAzZWNvbmZpZy1cdTAwM2VtYWNfY2FwYWJpbGl0aWVzIFx1MDAyNj0gfihNQUNfU1lNX1BBVVNFIHwgTUFDX0FTWU1fUEFVU0UpO1xuK1x0cGwtXHUwMDNlY29uZmlnLVx1MDAzZW1hY19jYXBhYmlsaXRpZXMgfD0gbWFjX3BhdXNlO1xuK1xuK1x0aWYgKGNhcHNfcmVtb3ZlZCBcdTAwMjYgTUFDX1NZTV9QQVVTRSlcbitcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdGlmIChjYXBzX3JlbW92ZWQgXHUwMDI2IE1BQ19BU1lNX1BBVVNFKVxuK1x0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRsaW5rbW9kZV9hbmQoY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nLCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIHBsLVx1MDAzZXN1cHBvcnRlZCk7XG4rXG4rXHRpZiAoY2Fwc19hZGRlZCBcdTAwMjYgTUFDX1NZTV9QQVVTRSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdFx0aWYgKHBsLVx1MDAzZXBoeWRldiBcdTAwMjZcdTAwMjYgIXBoeWxpbmtfdGVzdChwbC1cdTAwM2VwaHlkZXYtXHUwMDNlc3VwcG9ydGVkLCBQYXVzZSkpXG4rXHRcdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdH1cbitcdGlmIChjYXBzX2FkZGVkIFx1MDAyNiBNQUNfQVNZTV9QQVVTRSkge1xuK1x0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBwbC1cdTAwM2VzdXBwb3J0ZWQpO1xuK1x0XHRpZiAocGwtXHUwMDNlcGh5ZGV2IFx1MDAyNlx1MDAyNiAhcGh5bGlua190ZXN0KHBsLVx1MDAzZXBoeWRldi1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpKVxuK1x0XHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCwgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcdH1cbitcbitcdGxpbmttb2RlX2FuZChjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcsIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZywgcGwtXHUwMDNlc3VwcG9ydGVkKTtcbitcbitcdGlmIChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9BTikge1xuK1x0XHRpZiAocGh5bGlua190ZXN0KHBsLVx1MDAzZXN1cHBvcnRlZCwgUGF1c2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGNvbmZpZy1cdTAwM2VwYXVzZSBcdTAwMjYgTUxPX1BBVVNFX1JYKSBcdTAwMjZcdTAwMjYgKGNvbmZpZy1cdTAwM2VwYXVzZSBcdTAwMjYgTUxPX1BBVVNFX1RYKSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCwgY29uZmlnLVx1MDAzZWFkdmVydGlzaW5nKTtcbitcbitcdFx0aWYgKHBoeWxpbmtfdGVzdChwbC1cdTAwM2VzdXBwb3J0ZWQsIEFzeW1fUGF1c2UpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKChjb25maWctXHUwMDNlcGF1c2UgXHUwMDI2IE1MT19QQVVTRV9SWCkgXiAoY29uZmlnLVx1MDAzZXBhdXNlIFx1MDAyNiBNTE9fUEFVU0VfVFgpKSlcbitcdFx0XHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULCBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuK1x0fVxuK1xuK1x0aWYgKCFwbC1cdTAwM2VwaHlkZXYpXG4rXHRcdHBoeWxpbmtfY2hhbmdlX2luYmFuZF9hZHZlcnQocGwpO1xuK1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnBsLVx1MDAzZXN0YXRlX211dGV4KTtcbitcbitcdGlmIChwbC1cdTAwM2VwaHlkZXYpIHtcbitcdFx0cGF1c2VfYWR2ID0gbGlua21vZGVfdGVzdF9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxuK1x0XHRcdFx0XHQgICAgICBjb25maWctXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuK1x0XHRhc3ltX2FkdiA9IGxpbmttb2RlX3Rlc3RfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULFxuK1x0XHRcdFx0XHQgICAgIGNvbmZpZy1cdTAwM2VhZHZlcnRpc2luZyk7XG4rXG4rXHRcdG11dGV4X2xvY2soXHUwMDI2cGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWxvY2spO1xuK1x0XHRsaW5rbW9kZV9tb2RfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbitcdFx0XHRcdCBwbC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcsIHBhdXNlX2Fkdik7XG4rXHRcdGxpbmttb2RlX21vZF9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4rXHRcdFx0XHQgcGwtXHUwMDNlcGh5ZGV2LVx1MDAzZWFkdmVydGlzaW5nLCBhc3ltX2Fkdik7XG4rXHRcdG11dGV4X3VubG9jayhcdTAwMjZwbC1cdTAwM2VwaHlkZXYtXHUwMDNlbG9jayk7XG4rXG4rXHRcdHBoeV9zdGFydF9hbmVnKHBsLVx1MDAzZXBoeWRldik7XG4rXHR9XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xuK1xuIC8qKlxuICAqIHBoeWxpbmtfY3JlYXRlKCkgLSBjcmVhdGUgYSBwaHlsaW5rIGluc3RhbmNlXG4gICogQGNvbmZpZzogYSBwb2ludGVyIHRvIHRoZSB0YXJnZXQgXHUwMDI2c3RydWN0IHBoeWxpbmtfY29uZmlnXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmMgYi9kcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY1xuaW5kZXggYjY1ZDBmNWZhMWEwMTQuLjQ3MjFiYTA3MWNiYmU0IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3JlYWx0ZWsvcmVhbHRla19tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L3BoeS9yZWFsdGVrL3JlYWx0ZWtfbWFpbi5jXG5AQCAtMTcsNyArMTcsNiBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jbGsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19jaG9pY2VzLmhcdTAwM2Vcbi0jaW5jbHVkZSBcdTAwM2NuZXQvcGh5L3JlYWx0ZWtfcGh5LmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcIi4uL3BoeWxpYi5oXCJcbiAjaW5jbHVkZSBcInJlYWx0ZWsuaFwiXG5AQCAtMjY0Niw0NSArMjY0NSw2IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MjIxYl9oYW5kbGVfaW50ZXJydXB0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4gXHRyZXR1cm4gSVJRX0hBTkRMRUQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbi17XG4tXHRsaW5rbW9kZV9zZXRfYml0KEVUSFRPT0xfTElOS19NT0RFXzEwMDAwYmFzZVRfRnVsbF9CSVQsXG4tXHRcdFx0IHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpO1xuLVxuLVx0Lyogc2V0IGRlZmF1bHQgbW9kZSAqL1xuLVx0cGh5ZGV2LVx1MDAzZXNwZWVkID0gU1BFRURfMTAwMDA7XG4tXHRwaHlkZXYtXHUwMDNlZHVwbGV4ID0gRFVQTEVYX0ZVTEw7XG4tXG4tXHRwaHlkZXYtXHUwMDNlcG9ydCA9IFBPUlRfRklCUkU7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX3JlYWRfc3RhdHVzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0aW50IHZhbCwgZXJyO1xuLVxuLVx0ZXJyID0gZ2VucGh5X3VwZGF0ZV9saW5rKHBoeWRldik7XG4tXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuLVxuLVx0aWYgKCFwaHlkZXYtXHUwMDNlbGluaylcbi1cdFx0cmV0dXJuIDA7XG4tXG4tXHR2YWwgPSBwaHlfcmVhZChwaHlkZXYsIFJUTF9QSFlTUik7XG4tXHRpZiAodmFsIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gdmFsO1xuLVxuLVx0cnRsZ2VuX2RlY29kZV9waHlzcihwaHlkZXYsIHZhbCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIGludCBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4te1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIHN0YXRpYyBzdHJ1Y3QgcGh5X2RyaXZlciByZWFsdGVrX2RydnNbXSA9IHtcbiBcdHtcbiBcdFx0UEhZX0lEX01BVENIX0VYQUNUKDB4MDAwMDgyMDEpLFxuQEAgLTI5MzQsMjAgKzI4OTQsNiBAQCBzdGF0aWMgc3RydWN0IHBoeV9kcml2ZXIgcmVhbHRla19kcnZzW10gPSB7XG4gXHRcdC53cml0ZV9wYWdlXHQ9IHJ0bDgyMXhfd3JpdGVfcGFnZSxcbiBcdFx0LnJlYWRfbW1kXHQ9IHJ0bDgyMnhfcmVhZF9tbWQsXG4gXHRcdC53cml0ZV9tbWRcdD0gcnRsODIyeF93cml0ZV9tbWQsXG4tXHR9LCB7XG4tXHRcdFBIWV9JRF9NQVRDSF9FWEFDVChQSFlfSURfUlRMX0RVTU1ZX1NGUCksXG4tXHRcdC5uYW1lXHRcdD0gXCJSZWFsdGVrIFNGUCBQSFkgTW9kZVwiLFxuLVx0XHQuZmxhZ3NcdFx0PSBQSFlfSVNfSU5URVJOQUwsXG4tXHRcdC5wcm9iZVx0XHQ9IHJ0bDgyMnhfcHJvYmUsXG4tXHRcdC5nZXRfZmVhdHVyZXNcdD0gcnRsZ2VuX3NmcF9nZXRfZmVhdHVyZXMsXG4tXHRcdC5jb25maWdfYW5lZ1x0PSBydGxnZW5fc2ZwX2NvbmZpZ19hbmVnLFxuLVx0XHQucmVhZF9zdGF0dXNcdD0gcnRsZ2VuX3NmcF9yZWFkX3N0YXR1cyxcbi1cdFx0LnN1c3BlbmRcdD0gZ2VucGh5X3N1c3BlbmQsXG4tXHRcdC5yZXN1bWVcdFx0PSBydGxnZW5fcmVzdW1lLFxuLVx0XHQucmVhZF9wYWdlXHQ9IHJ0bDgyMXhfcmVhZF9wYWdlLFxuLVx0XHQud3JpdGVfcGFnZVx0PSBydGw4MjF4X3dyaXRlX3BhZ2UsXG4tXHRcdC5yZWFkX21tZFx0PSBydGw4MjJ4X3JlYWRfbW1kLFxuLVx0XHQud3JpdGVfbW1kXHQ9IHJ0bDgyMnhfd3JpdGVfbW1kLFxuIFx0fSwge1xuIFx0XHRQSFlfSURfTUFUQ0hfRVhBQ1QoMHgwMDFjY2FkMCksXG4gXHRcdC5uYW1lXHRcdD0gXCJSVEw4MjI0IDIuNUdicHMgUEhZXCIsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmggYi9pbmNsdWRlL2xpbnV4L3BoeWxpbmsuaFxuaW5kZXggMmJjMGRiM2Q1MmFjOGQuLmUzYzc4MjIxMDBhYmE2IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9waHlsaW5rLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcGh5bGluay5oXG5AQCAtODQyLDQgKzg0Miw2IEBAIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19iZWdpbihzdHJ1Y3QgcGh5bGluayAqcGwpO1xuIFxuIHZvaWQgcGh5bGlua19yZXBsYXlfbGlua19lbmQoc3RydWN0IHBoeWxpbmsgKnBsKTtcbiBcbit2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XG4rXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvcGh5L3JlYWx0ZWtfcGh5LmggYi9pbmNsdWRlL25ldC9waHkvcmVhbHRla19waHkuaFxuZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCBkNjgzYmMxYjA2NTljZC4uMDAwMDAwMDAwMDAwMDBcbi0tLSBhL2luY2x1ZGUvbmV0L3BoeS9yZWFsdGVrX3BoeS5oXG4rKysgL2Rldi9udWxsXG5AQCAtMSw3ICswLDAgQEBcbi0vKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuLSNpZm5kZWYgX1JFQUxURUtfUEhZX0hcbi0jZGVmaW5lIF9SRUFMVEVLX1BIWV9IXG4tXG4tI2RlZmluZVx0UEhZX0lEX1JUTF9EVU1NWV9TRlBcdDB4MDAxY2NiZmZcbi1cbi0jZW5kaWYgLyogX1JFQUxURUtfUEhZX0ggKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjMzOjU5Ljk1OTU1OTcyOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzA0Mjc3Mzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiByODE2OSBEcml2ZXIgYW5kIHBoeWxpbmsgSW50ZWdyYXRpb24qKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggc2VyaWVzIHRoYXQgcmVmYWN0b3JzIHRoZSBSZWFsdGVrIHI4MTY5IGRyaXZlciB0byB1c2UgcGh5bGluay4gVGhhdCBtZWFucyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBkcml2ZXIgaXRzZWxmIGFuZCB0aGUgcGh5bGluayBjb3JlLCB3aGljaCwgZm9yIGEgbmV0d29ya2luZyBleHBlcnQgbGlrZSBteXNlbGYsIGltbWVkaWF0ZWx5IHNjcmVhbXMgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gIFRoZSBwYXRjaCB0b3VjaGVzIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY2AsIGBkcml2ZXJzL25ldC9waHkvcGh5bGluay5jYCwgYW5kIHBvdGVudGlhbGx5IGBkcml2ZXJzL25ldC9waHkvcmVhbHRlay9yZWFsdGVrX21haW4uY2AuXG5cbkZpcnN0IHRoaW5ncyBmaXJzdDogcmVhY2hhYmlsaXR5LiBUaGUgcjgxNjkgZHJpdmVyIGlzIGZvciBSZWFsdGVrIFBDSSBFdGhlcm5ldCBhZGFwdGVycy4gQ2FuIHdlIGFjdHVhbGx5IGhpdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IFFFTVUgaXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBNeSBpbml0aWFsIHRob3VnaHQgd2FzIHRoYXQgaXQgbWlnaHQgZW11bGF0ZSBgcnRsODEzOWAsIGJ1dCBkb2VzIGl0IHN1cHBvcnQgYHJ0bDgxNjlgIGRpcmVjdGx5PyBBIHF1aWNrIGNoZWNrIG9mIHRoZSBkb2N1bWVudGF0aW9uIG9yIHNvdXJjZSBjb25maXJtcy4uLiBubywgbmF0aXZlbHksIGl0IGRvZXNuJ3QuIEhvd2V2ZXIsIHRoZSBgc3l6X3BjaV9kZXZpY2VgIHByaW1pdGl2ZSBpbiBzeXprYWxsZXIgaXMgbXkgc2F2aW5nIGdyYWNlLiBUaGlzIHBzZXVkby1kZXZpY2UgYWxsb3dzIHVzIHRvIGZ1enogKmFueSogUENJIGRyaXZlciBieSBlbXVsYXRpbmcgdGhlIFBDSSBkZXZpY2UgaXRzZWxmLiBFeGNlbGxlbnQuIFRoaXMgbWVhbnMgdGhlIHI4MTY5IGlzIGluZGVlZCByZWFjaGFibGUgYW5kIGZ1enphYmxlLlxuXG5UaGlzIGBwaHlsaW5rLmNgIG1vZGlmaWNhdGlvbiwgd2l0aCB0aGUgYWRkaXRpb24gb2YgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgLCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGV5ZS4gUGh5bGluayBpcyBhIGNlbnRyYWwgbmV0d29ya2luZyBjb21wb25lbnQsIHNvIGNoYW5nZXMgdGhlcmUgaGF2ZSBicm9hZGVyIGltcGxpY2F0aW9ucy4gSXQncyB1c2VkIGJ5IG1hbnkgZHJpdmVycywgYW5kIHRoYXQgbmV3IGZ1bmN0aW9uIG5lZWRzIHRvIGJlIGNoZWNrZWQuIExldCdzIHNlZSBpZiB0aGF0J3MgcmVhY2hhYmxlIC0gYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGlzIGNhbGxlZCBmcm9tIGBydGw4MTY5X2NoYW5nZV9tdHVgLiBHb29kLlxuXG5Ob3cgZm9yIHRoZSBjb25maWd1cmF0aW9ucy4gSSBrbm93IHdlJ2xsIGJlIGxvb2tpbmcgYXQgYENPTkZJR19SODE2OWAgKHdoaWNoLCBmcm9tIHRoZSBsb29rcyBvZiBpdCwgc2VsZWN0cyBgQ09ORklHX1BIWUxJTktgKSBhbmQgYENPTkZJR19QQ0lgLiBUaW1lIHRvIHZlcmlmeSB0aGF0IGBDT05GSUdfUjgxNjlgIGRlcGVuZHMgb24gYFBDSWAgaW4gdGhlIGBLY29uZmlnYCBmaWxlcy4gQ29uZmlybWVkLlxuXG5GaW5hbGx5LCBsZXQncyBuYWlsIGRvd24gb3VyIGZ1enppbmcgdGFyZ2V0cy4gSW4gYGRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmNgLCBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2AgaXMgdGhlIG5ldyBraWQgb24gdGhlIGJsb2NrLiAgVGhlbiwgaW4gdGhlIFJlYWx0ZWsgZHJpdmVyIChgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNgKSwgd2UgaGF2ZSBgcnRsODE2OV9jaGFuZ2VfbXR1YCwgYWxvbmcgd2l0aCBhIHdob2xlIGxpc3Qgb2YgZnVuY3Rpb25zIHRoYXQgbmVlZCB0byBiZSB0ZXN0ZWQsIGxpa2UgYHJ0bF9pbml0X3BoeWxpbmtgLCBgcnRsODE2OV9wY3NfY29uZmlnYCwgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19saW5rX2Rvd25gLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgdGhlIFNEUyBhbmQgU0ZQIGZ1bmN0aW9ucy4gVGltZSB0byBzdGFydCBkaWdnaW5nIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkyNSwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgwMCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTEwVDA1OjM0OjExLjI2MzgzOTIxNVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODM0MTQzMDgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NDI5MT1zdGF0aWMgaW50IHJ0bDgxNjlfY2hhbmdlX210dShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTQzMDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NDMxMDpcXHRcXHRwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHRwLVxcdTAwM2VwaHlsaW5rLCBjYXBzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy00MzExLVxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmM9MTgyOT1FWFBPUlRfU1lNQk9MX0dQTChwaHlsaW5rX3NldF9maXhlZF9saW5rKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4MzI6ICogcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllcygpIC0gRHluYW1pY2FsbHkgdXBkYXRlIE1BQyBwYXVzZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzMy0gKiBAcGw6IGEgcG9pbnRlciB0byBhIFxcdTAwMjZzdHJ1Y3QgcGh5bGluayByZXR1cm5lZCBmcm9tIHBoeWxpbmtfY3JlYXRlKClcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTgzOS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5bGluay5jOjE4NDA6dm9pZCBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzKHN0cnVjdCBwaHlsaW5rICpwbCwgdW5zaWduZWQgbG9uZyBtYWNfcGF1c2UpXFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYy0xODQxLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeWxpbmsuYzoxOTE2OkVYUE9SVF9TWU1CT0xfR1BMKHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlsaW5rLmMtMTkxNy1cXG4tLVxcbmluY2x1ZGUvbGludXgvcGh5bGluay5oPTg0Mz12b2lkIHBoeWxpbmtfcmVwbGF5X2xpbmtfZW5kKHN0cnVjdCBwaHlsaW5rICpwbCk7XFxuaW5jbHVkZS9saW51eC9waHlsaW5rLmgtODQ0LVxcbmluY2x1ZGUvbGludXgvcGh5bGluay5oOjg0NTp2b2lkIHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXMoc3RydWN0IHBoeWxpbmsgKnBsLCB1bnNpZ25lZCBsb25nIG1hY19wYXVzZSk7XFxuaW5jbHVkZS9saW51eC9waHlsaW5rLmgtODQ2LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDoxNC4wOTc5ODkzNDdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NDQ1OTQ5NjkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBOZXR3b3JraW5nIFBIWSBhbmQgUmVhbHRlayBEcml2ZXIgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgbWFraW5nIHNvbWUgcHJldHR5IGZ1bmRhbWVudGFsIGNoYW5nZXMgdG8gdGhlIHdheSB3ZSBoYW5kbGUgUEhZIGxpbmsgbWFuYWdlbWVudCBpbiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYnkgaW50cm9kdWNpbmcgYHBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNgIGFuZCBpbnRlZ3JhdGluZyBgcGh5bGlua2Agd2l0aCB0aGUgYHI4MTY5YCBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgSSBzZWUgdGhpcyBhcyBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gQW55IGNoYW5nZXMgdGhpcyBkZWVwIGludG8gdGhlIG5ldHdvcmsgc3RhY2ssIHRvdWNoaW5nIGJvdGggY29yZSBQSFkgZnVuY3Rpb25hbGl0eSBhbmQgYSB3aWRlbHkgdXNlZCBkcml2ZXIgbGlrZSBgcjgxNjlgLCBkZXNlcnZlIGEgdGhvcm91Z2ggZXhhbWluYXRpb24uXG5cbkxldCdzIG5haWwgZG93biB0aGUgY3JpdGljYWwgZnVuY3Rpb25zIHRoYXQgbmVlZCBpbW1lZGlhdGUgYXR0ZW50aW9uIGR1cmluZyBmdXp6aW5nLiBJJ20gZm9jdXNpbmcgb24gdGhlIGludGVncmF0aW9uIHBvaW50cyBhbmQgdGhlIGNvcmUgTUFDL1BIWSBpbnRlcmFjdGlvbiBmdW5jdGlvbnM6XG5cbiogICBgcGh5bGlua191cGRhdGVfbWFjX3BhdXNlX2NhcGFiaWxpdGllc2A6IFRoaXMgaXMgb2J2aW91c2x5IHRoZSBjZW50cmFsIG5ldyBmdW5jdGlvbiwgc28gaXQncyBhIHByaW9yaXR5LlxuKiAgIGBydGw4MTY5X2NoYW5nZV9tdHVgOiBNVFUgY2hhbmdlcyBjYW4gcmV2ZWFsIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgaW4gbmV0d29ya2luZy5cbiogICBgcnRsX2luaXRfcGh5bGlua2A6IFNpbmNlIGl0J3MgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgcGh5bGluayBmcmFtZXdvcmssIGRlZmluaXRlbHkgbmVlZHMgYSBsb29rLlxuKiAgIGBydGw4MTY5X3Bjc19jb25maWdgIGFuZCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYDogUEhZIENvbnRyb2wgU2lnbmFscy5cbiogICBgcnRsX21hY19saW5rX3VwYCBhbmQgYHJ0bF9tYWNfbGlua19kb3duYDogTGluayBzdGF0ZSB0cmFuc2l0aW9ucyBhcmUgYWx3YXlzIGludGVyZXN0aW5nLlxuKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgOiBBbm90aGVyIFBDUyBmdW5jdGlvbiwgbWFraW5nIGRlY2lzaW9ucy5cbiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAgYW5kIGBydGxfbWFjX2VuYWJsZV90eF9scGlgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCBhbmQgc2hvdWxkIGJlIHJldmlld2VkLlxuKiAgIGBydGw4MTY5X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc193cml0ZWAsIGFuZCBgcjgxMjdfc2RzX21vZGlmeWA6IFRoZXNlIHJlbGF0ZWQgdG8gU2hhZG93IERhdGEgU3RydWN0dXJlIGFuZCBzaG91bGQgYmUgZnV6ei10ZXN0ZWQuXG4qICAgYHI4MTI3X3NmcF9pbml0XzFnYCBhbmQgYHI4MTI3X3NmcF9pbml0XzEwZ2A6IFRoZXNlIGFyZSB3b3J0aCBjaGVja2luZyBpbiB0aGUgY29udGV4dCBvZiBTRlAsIHdoaWNoIGNvdWxkIGhhdmUgc29tZSBlZGdlIGNhc2VzLlxuKiAgIGBydGxfZ2V0X3NmcF9tb2RlYDogQWxzbyByZWxhdGVkIHRvIFNGUCBjb25maWd1cmF0aW9ucy5cbiogICBgcnRsX2lzXzgxMTZhZmA6IEZlYXR1cmUgaWRlbnRpZmljYXRpb24uXG5cbldlIGFsc28gaGF2ZSBhIGNvdXBsZSBvZiBjb25maWd1cmF0aW9uczogYFI4MTY5YCBJIG5lZWQgdG8gcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgUEhZTElOS2AgaXMgaW5kZWVkIGEgY29uZmlnIG9wdGlvbiwganVzdCB0byBiZSBzdXJlLiBBZnRlciB0aGF0LCBJJ2xsIHNldCB1cCBteSBmdXp6aW5nIGhhcm5lc3NlcywgYW5kIHN0YXJ0IGxvb2tpbmcgZm9yIHRoZSB3ZWFrIHBvaW50cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI5NTEsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMTBUMDU6MzQ6MjAuNTQzOTQ2MzU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MTkzMzc5NzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBIWUxJTktcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWctNS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo2OmNvbmZpZyBQSFlMSU5LXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNy1cXHR0cmlzdGF0ZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDoyMy4wNjMyOTI2MjRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjY1NTM2NzUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipSZWZpbmluZyB0aGUgUGh5bGluayBGb2N1cyBmb3IgdGhlIFI4MTY5IERyaXZlcioqXG5cbk9rYXksIHNvIGBQSFlMSU5LYCBpcyBhIHRyaXN0YXRlIGNvbmZpZywgYnV0IHRoZSBgUjgxNjlgIGRyaXZlciBhY3R1YWxseSBzZWxlY3RzIGl0LiBUaGVyZWZvcmUsIHdlIG9ubHkgbmVlZCB0byBlbmFibGUgYFI4MTY5YC4gVGhhdCBzaW1wbGlmaWVzIHRoZSBjb25maWd1cmF0aW9uLCB3aGljaCBpcyBnb29kLlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29yZSBmdW5jdGlvbnMgd2UgbmVlZCB0byBmb2N1cyBvbi4gQmFzZWQgb24gdGhlIGNoYW5nZXMsIEkndmUgaWRlbnRpZmllZCB0aGUgZm9sbG93aW5nIGFzIHByaW1lIGNhbmRpZGF0ZXM6IGBwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzYCwgYHJ0bDgxNjlfY2hhbmdlX210dWAsIGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgLCBgcnRsX21hY19saW5rX3VwYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfc2VsZWN0X3Bjc2AsIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYCwgYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAsIGBydGw4MTY5X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc19yZWFkYCwgYHI4MTI3X3Nkc193cml0ZWAsIGByODEyN19zZHNfbW9kaWZ5YCwgYHI4MTI3X3NmcF9pbml0XzFnYCwgYHI4MTI3X3NmcF9pbml0XzEwZ2AsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYW5kIGBydGxfaXNfODExNmFmYC4gVGhvc2Ugc2hvdWxkIGNhcHR1cmUgdGhlIGVzc2VuY2Ugb2YgdGhlIHBoeWxpbmsgaW50ZWdyYXRpb24gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIHRoZSBNQUMuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gTGV0IG1lIGRvdWJsZS1jaGVjayBhIGNvdXBsZSBvZiB0aGluZ3MuIEFoLCB0aGUgYHJ0bF9tYWNfY29uZmlnYCBmdW5jdGlvbiBpcyBlbXB0eS4gQW5kIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBhcmUgYWxzbyBlbXB0eS4gIEl0J3MgYWx3YXlzIHdvcnRoIHZlcmlmeWluZyB0aGF0IHRoZXNlIGFyZSBhY3R1YWxseSBkb2luZyBzb21ldGhpbmcgb2YgaW50ZXJlc3QsIGFuZCBiZWNhdXNlIHRoZXkncmUgZW1wdHksIHRoZXkncmUgbm90LiAgV2UgY2FuIHNhZmVseSBleGNsdWRlIHRoZW0gZnJvbSB0aGUgbGlzdC5cblxuTGV0J3MgZG8gYSBxdWljayBzY2FuIG9mIHRoZSBjb2RlIGZvciBhbnkgb3RoZXIgcG90ZW50aWFsIHJlbGV2YW50IGZ1bmN0aW9ucy4gT2theSwgaGVyZSBhcmUgYSBmZXcgbW9yZTogYHJ0bF9sb3dwb3dlcl9oaWRkZW5fZnVuY3Rpb25zYCwgYHJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYCwgYHJ0bDgxNjlfbndheV9yZXNldGAsIGFuZCBgcnRsODE2OV9pb2N0bGAuIFRob3NlIHNlZW0gcmVsZXZhbnQsIGVzcGVjaWFsbHkgYGtzZXR0aW5nc2AsIHNvIEknbGwgYWRkIHRoZW0gdG8gdGhlIGxpc3QuIFRoZXkgZGVmaW5pdGVseSBzaG91bGQgYmUgaW5jbHVkZWQsIGZvciB0aGV5IHdvdWxkIHByb2JhYmx5IGJlIGludGVyYWN0aW5nIHdpdGggdGhlIGxpbmsgc3RhdGUgb2YgdGhlIGRldmljZS5cblxuU28sIHRoZSB1cGRhdGVkIGxpc3Qgb2YgZm9jdXMgc3ltYm9scyBpcyB3aGF0IEkgaGF2ZSBub3cuIEknbGwgaW5jbHVkZSBpdCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGlzIHBhdGNoIGludm9sdmVzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZSwgc3BlY2lmaWNhbGx5IHRoZSByODE2OSBkcml2ZXIncyBwaHlsaW5rIEFQSSB1c2FnZSwgYW5kIHRoZSBuZXcgcGF1c2UgY2FwYWJpbGl0eSBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5NDAsIk91dHB1dFRva2VucyI6MzcwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAwMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xMFQwNTozNDozNS43MTg2NjM2NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODU2NDM3OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlsaW5rX3VwZGF0ZV9tYWNfcGF1c2VfY2FwYWJpbGl0aWVzXCIsXG4gICAgXCJydGw4MTY5X2NoYW5nZV9tdHVcIixcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bDgxNjlfcGNzX2NvbmZpZ1wiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcInJ0bF9tYWNfZGlzYWJsZV90eF9scGlcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3JlYWRcIixcbiAgICBcInI4MTI3X3Nkc193cml0ZVwiLFxuICAgIFwicjgxMjdfc2RzX21vZGlmeVwiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMWdcIixcbiAgICBcInI4MTI3X3NmcF9pbml0XzEwZ1wiLFxuICAgIFwicnRsX2dldF9zZnBfbW9kZVwiLFxuICAgIFwicnRsX2lzXzgxMTZhZlwiLFxuICAgIFwicnRsX2xvd3Bvd2VyX2hpZGRlbl9mdW5jdGlvbnNcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc1wiLFxuICAgIFwicnRsODE2OV9ud2F5X3Jlc2V0XCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29udmVydHMgdGhlIFJlYWx0ZWsgcjgxNjkgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgYW5kIGludHJvZHVjZXMgYSBuZXcgcGh5bGluayBmdW5jdGlvbiB0byBkeW5hbWljYWxseSB1cGRhdGUgTUFDIHBhdXNlIGNhcGFiaWxpdGllcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBkcml2ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeWxpbmtfdXBkYXRlX21hY19wYXVzZV9jYXBhYmlsaXRpZXNcIixcbiAgICBcInJ0bDgxNjlfY2hhbmdlX210dVwiLFxuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJyODEyN19zZHNfcmVhZFwiLFxuICAgIFwicjgxMjdfc2RzX3dyaXRlXCIsXG4gICAgXCJyODEyN19zZHNfbW9kaWZ5XCIsXG4gICAgXCJyODEyN19zZnBfaW5pdF8xZ1wiLFxuICAgIFwicjgxMjdfc2ZwX2luaXRfMTBnXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGxfaXNfODExNmFmXCIsXG4gICAgXCJydGxfbG93cG93ZXJfaGlkZGVuX2Z1bmN0aW9uc1wiLFxuICAgIFwicnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NcIixcbiAgICBcInJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzXCIsXG4gICAgXCJydGw4MTY5X253YXlfcmVzZXRcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb252ZXJ0cyB0aGUgUmVhbHRlayByODE2OSBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBhbmQgaW50cm9kdWNlcyBhIG5ldyBwaHlsaW5rIGZ1bmN0aW9uIHRvIGR5bmFtaWNhbGx5IHVwZGF0ZSBNQUMgcGF1c2UgY2FwYWJpbGl0aWVzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIGRyaXZlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[1] Phase: Succeeded StartedAt: 2026-07-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 05:34:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2] Phase: Succeeded StartedAt: 2026-07-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 05:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:47 +0000 UTC FinishedAt: 2026-07-10 05:34:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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-workflowzf89p/series-workflowzf89p-convert-artifact-3544797874/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:57 +0000 UTC FinishedAt: 2026-07-10 06:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:57 +0000 UTC FinishedAt: 2026-07-10 06:21:53 +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:*b1bda773-b0e3-48a3-8b76-89efd190eced,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-workflowzf89p/series-workflowzf89p-convert-artifact-3544797874/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": "19ffb99d-d6de-432f-a6a5-761d3c0d593e", "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-workflowzf89p/series-workflowzf89p-build-action-1724228656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 05:34:57 +0000 UTC FinishedAt: 2026-07-10 06:21:43 +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:*b1bda773-b0e3-48a3-8b76-89efd190eced,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-workflowzf89p/series-workflowzf89p-convert-artifact-3544797874/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": "19ffb99d-d6de-432f-a6a5-761d3c0d593e", "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-workflowzf89p/series-workflowzf89p-build-action-1724228656/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:21:53 +0000 UTC FinishedAt: 2026-07-10 06:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:21:53 +0000 UTC FinishedAt: 2026-07-10 06:21:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:21:53 +0000 UTC FinishedAt: 2026-07-10 06:22:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:21:53 +0000 UTC FinishedAt: 2026-07-10 06:22:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-workflowzf89p/series-workflowzf89p-convert-artifact-1622665677/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:22:03 +0000 UTC FinishedAt: 2026-07-10 06:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:22:03 +0000 UTC FinishedAt: 2026-07-10 06:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19ffb99d-d6de-432f-a6a5-761d3c0d593e,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-workflowzf89p/series-workflowzf89p-build-action-1724228656/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-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:24:34 +0000 UTC FinishedAt: 2026-07-10 06:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:24:34 +0000 UTC FinishedAt: 2026-07-10 06:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:24:34 +0000 UTC FinishedAt: 2026-07-10 06:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:24:34 +0000 UTC FinishedAt: 2026-07-10 06:52:13 +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:*b1bda773-b0e3-48a3-8b76-89efd190eced,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-workflowzf89p/series-workflowzf89p-convert-artifact-1622665677/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": "ad335c9c-2764-489e-b629-766b721c382c", "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-workflowzf89p/series-workflowzf89p-build-action-1775179689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:24:34 +0000 UTC FinishedAt: 2026-07-10 06:50:37 +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:*b1bda773-b0e3-48a3-8b76-89efd190eced,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-workflowzf89p/series-workflowzf89p-convert-artifact-1622665677/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": "ad335c9c-2764-489e-b629-766b721c382c", "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-workflowzf89p/series-workflowzf89p-build-action-1775179689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:52:13 +0000 UTC FinishedAt: 2026-07-10 06:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:52:13 +0000 UTC FinishedAt: 2026-07-10 06:52:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:52:13 +0000 UTC FinishedAt: 2026-07-10 06:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:52:13 +0000 UTC FinishedAt: 2026-07-10 06:54:08 +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:*ad335c9c-2764-489e-b629-766b721c382c,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-workflowzf89p/series-workflowzf89p-build-action-1775179689/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-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"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:*19ffb99d-d6de-432f-a6a5-761d3c0d593e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ad335c9c-2764-489e-b629-766b721c382c,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-workflowzf89p/series-workflowzf89p-build-action-1724228656/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-workflowzf89p/series-workflowzf89p-build-action-1775179689/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 06:54:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 06:54:23 +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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"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-workflowzf89p/series-workflowzf89p-convert-artifact-2626510514/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 06:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 06:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:18 +0000 UTC FinishedAt: 2026-07-10 06:54:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:28 +0000 UTC FinishedAt: 2026-07-10 07:46:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzf89p[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"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":["phylink_update_mac_pause_capabilities","rtl8169_change_mtu","rtl_init_phylink","rtl8169_pcs_config","rtl8169_pcs_get_state","rtl_mac_link_up","rtl_mac_link_down","rtl_mac_select_pcs","rtl_mac_disable_tx_lpi","rtl_mac_enable_tx_lpi","rtl8169_sds_read","r8127_sds_read","r8127_sds_write","r8127_sds_modify","r8127_sfp_init_1g","r8127_sfp_init_10g","rtl_get_sfp_mode","rtl_is_8116af","rtl_lowpower_hidden_functions","rtl8169_get_link_ksettings","rtl8169_set_link_ksettings","rtl8169_nway_reset","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"fe3e786ef4eb6e47d2901f568a27bd920477bbe9","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"80fd2087-15cb-4548-b4b1-6dc407cd3fec","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-10 06:54:28 +0000 UTC FinishedAt: 2026-07-10 07:46:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*19ffb99d-d6de-432f-a6a5-761d3c0d593e,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ad335c9c-2764-489e-b629-766b721c382c,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-workflowzf89p/series-workflowzf89p-build-action-1724228656/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-workflowzf89p/series-workflowzf89p-build-action-1775179689/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-workflowzf89p/series-workflowzf89p-convert-artifact-2626510514/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,}