Name: series-workflownq48r Phase: Succeeded StartedAt: 2026-06-29 06:18:21 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[0] Phase: Succeeded StartedAt: 2026-06-29 06:18:21 +0000 UTC FinishedAt: 2026-06-29 06:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 06:18:21 +0000 UTC FinishedAt: 2026-06-29 06:29:16 +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": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "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": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "5c5152fa-125a-45ce-9c45-2ea1bbd1443d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl_init_phylink", "rtl_mac_link_down", "rtl_mac_link_up", "rtl_mac_select_pcs", "rtl8169_sds_read", "rtl8169_pcs_get_state", "rtl8169_pcs_config", "rtl_mac_enable_tx_lpi", "rtl_mac_disable_tx_lpi", "rtl8169_get_lpi_caps", "rtl_phy_irq_map", "rtl_phy_irq_cleanup", "rtl_disable_hidden_function", "rtl_get_sfp_mode", "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfdXAmIzM0OywKICAgICYjMzQ7cnRsX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2RzX3JlYWQmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9scGlfY2FwcyYjMzQ7LAogICAgJiMzNDtydGxfcGh5X2lycV9tYXAmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNWJlYWQ5ZjI5NTZkNzk4MGEyNjVkZTFkZDI4MThiYTc0NDRlZTdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDY6Mjc6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGNvbmZpZyBSODE2OVxuIFx0c2VsZWN0IENSQzMyXG4gXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbiYjNDM7XHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIwLi42ZjQyMjEwNzllOGY5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuQEAgLTIxLDExICYjNDM7MjEsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZG9tYWluLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG5AQCAtOTYsNiAmIzQzOzk5LDE5IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXHQweEVCMTBcbiYjNDM7I2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcdFx0MHhFQjBFXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1x0MHhFQjE0XG4mIzQzOyNkZWZpbmUgU0RTX0NNRF9SRUFEXHRcdDB4MDAwMVxuJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcdDB4NDBcbiYjNDM7I2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXHQweDAwODBcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVFx0XHQweGRjMDBcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXHQweDAwNzhcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcdDB4MDAzMFxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURcdFx0MHhkMDA2XG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXHQweDAwZmZcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlx0MHgwMDAwXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4gXHR1MzIgbWFzaztcbiBcdHUzMiB2YWw7XG5AQCAtMzM0LDExICYjNDM7MzUwLDE2IEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuJiM0MztcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfUE1fQ1NSXHRcdDB4ODBcbiYjNDM7I2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMXHQweDQ0XG4mIzQzOyNkZWZpbmUgUlRMX1BNX0QzSE9UXHRcdFx0R0VOTUFTSygxLCAwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xuIFx0UlRMX0RBU0hfMjVfQlAsXG4gfTtcbiBcbiYjNDM7ZW51bSBydGxfc2ZwX21vZGUge1xuJiM0MztcdFJUTF9TRlBfTk9ORSxcbiYjNDM7XHRSVExfU0ZQXzgxNjhfQUYsXG4mIzQzO1x0UlRMX1NGUF84MTI3X0FURixcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG5AQCAtNzM2LDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4mIzQzO1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICYjNDM7Nzc4LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1MzIgaXJxX21hc2s7XG4gXHRpbnQgaXJxO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICYjNDM7NzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiAmIzQzOzgwMiwxMiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG4gXG4gXHR1MzIgb2NwX2Jhc2U7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfY29uZmlnIHBoeWxpbmtfY29uZmlnO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XG4mIzQzO1x0c3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluO1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gc2F2ZWRfcGF1c2U7XG4mIzQzO1x0Ym9vbCBqdW1ib19wYXVzZV9zYXZlZDtcbiB9O1xuIFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuQEAgLTExMjgsMTAgJiM0MzsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTIxNywxMiAmIzQzOzEyNDcsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiAmIzQzOzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4mIzQzO1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxuJiM0MztcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXG4ge1xuIFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnKTtcbkBAIC0xNTc4LDYgJiM0MzsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4mIzQzO1x0XHRcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbiYjNDM7XHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgJiM0MzsxNzIwLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcbiBcdCAgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyAmIzQzOzE3MzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxuIFx0XHQgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0yMDc0LDExICYjNDM7MjExOSwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgJiM0MzsyMjgxLDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICYjNDM7MjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNzAsNyAmIzQzOzIzMTUsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgJiM0MzsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcbi1cbi1cdHBoeV9nZXRfcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBcdTAwMjZ0eF9wYXVzZSwgXHUwMDI2cnhfcGF1c2UpO1xuIFxuLVx0ZGF0YS1cdTAwM2VhdXRvbmVnID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF1dG9uZWc7XG4tXHRkYXRhLVx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcbi1cdGRhdGEtXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICYjNDM7MjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjM4NiwzNCAmIzQzOzI0MjQsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0aW50IGR1cGxleCA9IGNtZC1cdTAwM2ViYXNlLmR1cGxleDtcbi1cdGludCBzcGVlZCA9IGNtZC1cdTAwM2ViYXNlLnNwZWVkO1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xuLVxuLVx0aWYgKGNtZC1cdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuJiM0Mzt9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdHJ0bF9zZnBfaW5pdCh0cCk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbkBAIC0yNDMxLDEwICYjNDM7MjQ2MiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuQEAgLTI0OTksOSAmIzQzOzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgJiM0MzsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSAmIzQzOzI1ODYsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXG4gXHRcdHBoeV93cml0ZV9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcbiBcbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cnRsX3NmcF9pbml0KHRwKTtcbi1cbiBcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cbiBcdHBoeV9zcGVlZF91cCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTI2MjcsNiAmIzQzOzI2NTgsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0Ym9vbCBqdW1ibyA9IHRwLVx1MDAzZWRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTjtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHBhdXNlO1xuIFx0aW50IHJlYWRycSA9IDQwOTY7XG4gXG4gXHRpZiAoanVtYm8gXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xNyBcdTAwMjZcdTAwMjZcbkBAIC0yNjU4LDEzICYjNDM7MjY5MCw0OCBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0aWYgKHBjaV9pc19wY2llKHRwLVx1MDAzZXBjaV9kZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuIFx0XHRwY2llX3NldF9yZWFkcnEodHAtXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcbiBcbi1cdC8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4gXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRcdFx0Ym9vbCBhZHZfcGF1c2UsIGFkdl9hc3ltO1xuJiM0MztcbiYjNDM7XHRcdFx0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIFx1MDAyNnRwLVx1MDAzZXNhdmVkX3BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0cC1cdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XG4mIzQzO1x0XHRcdFx0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXHUwMDNlcGh5bGluaywgXHUwMDI2Y21kKTtcbiYjNDM7XHRcdFx0XHRhZHZfcGF1c2UgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKFx1MDAyNmNtZCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGFkdmVydGlzaW5nLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdCAgUGF1c2UpO1xuJiM0MztcdFx0XHRcdGFkdl9hc3ltICA9IGV0aHRvb2xfbGlua19rc2V0dGluZ3NfdGVzdF9saW5rX21vZGUoXHUwMDI2Y21kLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYWR2ZXJ0aXNpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0ICBBc3ltX1BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGFkdl9wYXVzZSBcdTAwMjZcdTAwMjYgIWFkdl9hc3ltKSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXHUwMDI2XHUwMDI2IGFkdl9hc3ltKSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFx1MDAyNlx1MDAyNiBhZHZfYXN5bSkge1xuJiM0MztcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAwO1xuJiM0MztcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAxO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGF1c2UuYXV0b25lZyA9IHRwLVx1MDAzZXNhdmVkX3BhdXNlLmF1dG9uZWc7XG4mIzQzO1x0XHRwYXVzZS5yeF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIFx1MDAyNnBhdXNlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuJiM0MztcdFx0dHAtXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQgPSBmYWxzZTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc4MCw3ICYjNDM7Mjg0Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xuIFxuIFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XG4tXHRcdHBoeV9zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWRldiwgZmFsc2UpO1xuJiM0MztcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgJiM0MzsyODk5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XG5AQCAtMzA5OCw4ICYjNDM7MzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgJiM0MzszMjEwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7XG4mIzQzO1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICYjNDM7MzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDk0LCAweGZmMDAsIDApO1xuQEAgLTMxNjQsNiAmIzQzOzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcGRldi1cdTAwM2VidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGRldmZuO1xuJiM0MztcdGludCBmdW5jO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRldmZuID0gUENJX0RFVkZOKHNsb3QsIGZ1bmMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfUE1fQ1NSLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICFQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkge1xuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7XG4mIzQzO1x0XHRcdHZhbCB8PSAoUlRMX1BNX0QzSE9UIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIVBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKSB7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IH4oKFBDSV9FWFBfTE5LU1RBX0xCTVMgfCBQQ0lfRVhQX0xOS1NUQV9MQUJTKSBcdTAwM2NcdTAwM2MgMTYpO1xuJiM0MztcdFx0XHR2YWwgfD0gUENJX0VYUF9MTktDVExfQVNQTUM7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIHZhbCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XG5AQCAtMzY5MywxMiAmIzQzOzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xuIFxuLVx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuLVx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbi1cdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuJiM0MztcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbiYjNDM7XHRcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbiYjNDM7XHRcdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbiBcbi1cdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuLVx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbiYjNDM7XHRcdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuJiM0MztcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcbkBAIC0zNzExLDYgJiM0MzszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGMwOTQsIDB4MDAwMCk7XG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGMwOWUsIDB4MDAwMCk7XG4gXG4mIzQzO1x0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVx1MDAzZXBjaV9kZXYpO1xuIFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXG4gXHRyODE2OV9hcHBseV9maXJtd2FyZSh0cCk7XG4gfVxuQEAgLTQxNDAsMTEgJiM0Mzs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbiBcdHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcih0cCk7XG4gXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiYjNDM7XHRcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4NjksOCAmIzQzOzUwMDEsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKVxuLVx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbilcbiYjNDM7XHRcdFx0Z2VuZXJpY19oYW5kbGVfZG9tYWluX2lycSh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRcdFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVx1MDAzZXBoeWxpbmssXG4mIzQzO1x0XHRcdFx0XHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXHUwMDI2IExpbmtTdGF0dXMpKTtcbiYjNDM7XHR9XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuIFx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbkBAIC00OTMwLDkgJiM0Mzs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiB7XG4tXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdC8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqL1xuQEAgLTQ5NjMsNDAgJiM0Mzs1MDk3LDE1IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbi1cbi1cdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XG4tXHRcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XG4tXHRcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlZW5hYmxlX3R4X2xwaSk7XG4tXHRcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cG1fcnVudGltZV9pZGxlKGQpO1xuLVx0fVxuLVxuLVx0cGh5X3ByaW50X3N0YXR1cyh0cC1cdTAwM2VwaHlkZXYpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuLVx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVxuLVx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLVx1MDAzZWRldiwgcGh5ZGV2LCByODE2OV9waHlsaW5rX2hhbmRsZXIsXG4tXHRcdFx0XHQgcGh5X21vZGUpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmssIHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bmV0ZGV2X2Vycih0cC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBjb25uZWN0IHBoeVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4tXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi1cbi1cdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUwMDcsMTAgJiM0Mzs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cnRsX3NmcF9yZXNldCh0cCk7XG4gXG4gXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XG5AQCAtNTAzMiwxNCAmIzQzOzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuJiM0MztcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01MDU1LDcgJiM0Mzs1MTY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiBcbi1cdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiw5ICYjNDM7NTIyMSwxMSBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4mIzQzO1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4mIzQzO1x0XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHR9XG4gXG4gXHRydGw4MTY5X3VwKHRwKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuQEAgLTUxOTAsOCAmIzQzOzUzMDEsMTEgQEAgc3RhdGljIGludCBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJ0bF9yYXJfc2V0KHRwLCB0cC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0X19ydGw4MTY5X3NldF93b2wodHAsIHRwLVx1MDAzZXNhdmVkX3dvbG9wdHMpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZVR4RGVzY0FycmF5KVxuJiM0MztcdGlmICh0cC1cdTAwM2VUeERlc2NBcnJheSkge1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJ0bDgxNjlfdXAodHApO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl9kZXZpY2VfYXR0YWNoKHRwLVx1MDAzZWRldik7XG4gXG5AQCAtNTI4OCw2ICYjNDM7NTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWxpbmspXG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuQEAgLTUzMTAsNyAmIzQzOzU0MjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuJiM0MztcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcnRsODE2OV9pb2N0bCxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsX3NldF9yeF9tb2RlLFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuIFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gcnRsODE2OV9uZXRwb2xsLFxuQEAgLTU0MjMsMTEgJiM0Mzs1NTM5LDM5IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1KHN0cnVjdCBtaWlfYnVzICptaWlfYnVzLCBpbnQgYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydGxfcGh5X2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsXG4mIzQzO1x0XHRcdCAgIGlycV9od19udW1iZXJfdCBod2lycSlcbiYjNDM7e1xuJiM0MztcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG4mIzQzO1x0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkLVx1MDAzZWhvc3RfZGF0YSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIHJ0bF9waHlfaXJxX2RvbWFpbl9vcHMgPSB7XG4mIzQzO1x0Lm1hcCA9IHJ0bF9waHlfaXJxX21hcCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9waHlfaXJxX2NsZWFudXAodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcbiYjNDM7XHRpbnQgdmlycTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XG4mIzQzO1x0XHR2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4mIzQzO1x0XHRpZiAodmlycSlcbiYjNDM7XHRcdFx0aXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxKTtcbiYjNDM7XG4mIzQzO1x0XHRpcnFfZG9tYWluX3JlbW92ZSh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbik7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHJldCwgdmlycTtcbiBcbiBcdC8qIE9uIHNvbWUgYm9hcmRzIHdpdGggdGhpcyBjaGlwIHZlcnNpb24gdGhlIEJJT1MgaXMgYnVnZ3kgYW5kIG1pc3Nlc1xuIFx0ICogdG8gcmVzZXQgdGhlIFBIWSBwYWdlIHNlbGVjdG9yLiBUaGlzIHJlc3VsdHMgaW4gdGhlIFBIWSBJRCByZWFkXG5AQCAtNTQ0NSw3ICYjNDM7NTU4OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdG5ld19idXMtXHUwMDNlbmFtZSA9IFwmIzM0O3I4MTY5XCYjMzQ7O1xuIFx0bmV3X2J1cy1cdTAwM2Vwcml2ID0gdHA7XG4gXHRuZXdfYnVzLVx1MDAzZXBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuLVx0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSBQSFlfTUFDX0lOVEVSUlVQVDtcbiBcdG5ld19idXMtXHUwMDNlcGh5X21hc2sgPSBHRU5NQVNLKDMxLCAxKTtcbiBcdHNucHJpbnRmKG5ld19idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7cjgxNjktJXgtJXhcJiMzNDssXG4gXHRcdCBwY2lfZG9tYWluX25yKHBkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChwZGV2KSk7XG5AQCAtNTQ1OCw2ICYjNDM7NTYwMSwyMSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdG5ld19idXMtXHUwMDNld3JpdGVfYzQ1ID0gcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1O1xuIFx0fVxuIFxuJiM0MztcdHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0bF9waHlfaXJxX2RvbWFpbl9vcHMsIHRwKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluLCAwKTtcbiYjNDM7XHRpZiAoIXZpcnEpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSB2aXJxO1xuJiM0MztcbiBcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZwZGV2LVx1MDAzZWRldiwgbmV3X2J1cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTU0NzQsMTYgJiM0Mzs1NjMyLDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRyZXR1cm4gLUVVTkFUQ0g7XG4gXHR9XG4gXG4tXHR0cC1cdTAwM2VwaHlkZXYtXHUwMDNlbWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuLVx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRwaHlfc3VwcG9ydF9lZWUodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2KTtcbi1cbi1cdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzICovXG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbi1cdFx0cGh5X2Rpc2FibGVfZWVlX21vZGUodHAtXHUwMDNlcGh5ZGV2LFxuLVx0XHRcdFx0ICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpO1xuLVxuIFx0LyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqL1xuIFx0cGh5X3N1c3BlbmQodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC01NTk5LDYgJiM0Mzs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiYjNDM7XHRwbV9ydW50aW1lX2lkbGUodHBfdG9fZGV2KHRwKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4mIzQzO1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4mIzQzO1xuJiM0MztcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcbiYjNDM7XHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTtcbiYjNDM7XHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2YWw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuJiM0MztcdFx0dTE2IHN0YXQxO1xuJiM0MztcbiYjNDM7XHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbiYjNDM7XHRcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWxpbmsgPSAhIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcbiYjNDM7XHRcdGlmICghc3RhdGUtXHUwMDNlbGluaylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTE2IGJtc3IsIGxwYTtcbiYjNDM7XG4mIzQzO1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfQk1TUik7XG4mIzQzO1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9MUEEpO1xuJiM0MztcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiYjNDM7XHRcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbiYjNDM7XHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4mIzQzO1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbiYjNDM7XHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4mIzQzO1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuJiM0MztcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4mIzQzO1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjYXBzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuJiM0MztcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbiYjNDM7XHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbiYjNDM7XHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbiYjNDM7XHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbiYjNDM7XHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4mIzQzO1x0XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuJiM0MztcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbiYjNDM7XHRcdFx0ICAgIHBoeV9tb2RlLCBcdTAwMjZydGxfcGh5bGlua19tYWNfb3BzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgJiM0Mzs2MDM2LDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdFx0XHQgICAgIGV4dF94aWRfc3RyLCB4aWQpO1xuIFx0dHAtXHUwMDNlbWFjX3ZlcnNpb24gPSBjaGlwLVx1MDAzZW1hY192ZXJzaW9uO1xuIFx0dHAtXHUwMDNlZndfbmFtZSA9IGNoaXAtXHUwMDNlZndfbmFtZTtcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiAmIzQzOzYwNDksNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4mIzQzO1x0dHAtXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuQEAgLTU3ODgsMTMgJiM0Mzs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcbiYjNDM7XHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDcgJiM0Mzs2MTkyLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbi1cdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuJiM0MztcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzZnBfbW9kZSAhPSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfdXAmIzM0OywKICAgICYjMzQ7cnRsX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2RzX3JlYWQmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9scGlfY2FwcyYjMzQ7LAogICAgJiMzNDtydGxfcGh5X2lycV9tYXAmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1YmVhZDlmMjk1NmQ3OTgwYTI2NWRlMWRkMjgxOGJhNzQ0NGVlN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGNvbmZpZyBSODE2OQogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgUkVBTFRFS19QSFkKJiM0MzsJc2VsZWN0IFBIWUxJTksKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0bwogCSAgdGhlIGZvbGxvd2luZyBmYW1pbGllczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjEsMTEgJiM0MzsyMSwxNCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwpAQCAtOTYsNiAmIzQzOzk5LDE5IEBACiAjZGVmaW5lIEpVTUJPXzlLCSg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAjZGVmaW5lIEpVTUJPXzE2SwkoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHCTB4RUIxMAomIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHCQkweEVCMEUKJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUcJMHhFQjE0CiYjNDM7I2RlZmluZSBTRFNfQ01EX1JFQUQJCTB4MDAwMQomIzQzOyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRQkweDQwCiYjNDM7I2RlZmluZSBSVExfU0RTX0M0NV9CQVNFCTB4MDA4MAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1QJCTB4ZGMwMAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTSwkweDAwNzgKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRgkweDAwMzAKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSUQJCTB4ZDAwNgomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLCTB4MDBmZgomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUYJMHgwMDAwCiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gewogCXUzMiBtYXNrOwogCXUzMiB2YWw7CkBAIC0zMzQsMTEgJiM0MzszNTAsMTYgQEAgZW51bSBydGxfcmVnaXN0ZXJzIHsKIAlBTERQU19MVFIJPSAweGUwYTIsCiAJTFRSX09CRkZfTE9DSwk9IDB4ZTAzMiwKIAlMVFJfU05PT1AJPSAweGUwMzQsCiYjNDM7CVNFTkRfTFRSX01TRwk9IDB4ZTAzOCwKIAogI2RlZmluZSBBTERQU19MVFJfRU4JCQlCSVQoMCkKICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTgkJQklUKDApCiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOCQlCSVQoMTQpCiAjZGVmaW5lIExUUl9TTk9PUF9FTgkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgTFRSX01TR19FTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfUE1fQ1NSCQkweDgwCiYjNDM7I2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMCTB4NDQKJiM0MzsjZGVmaW5lIFJUTF9QTV9EM0hPVAkJCUdFTk1BU0soMSwgMCkKIH07CiAKIGVudW0gcnRsODE2OF84MTAxX3JlZ2lzdGVycyB7CkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUgewogCVJUTF9EQVNIXzI1X0JQLAogfTsKIAomIzQzO2VudW0gcnRsX3NmcF9tb2RlIHsKJiM0MzsJUlRMX1NGUF9OT05FLAomIzQzOwlSVExfU0ZQXzgxNjhfQUYsCiYjNDM7CVJUTF9TRlBfODEyN19BVEYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwkvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTczNiw2ICYjNDM7NzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjsKIAllbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlOwomIzQzOwllbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CkBAIC03NTAsNiAmIzQzOzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXUzMiBpcnFfbWFzazsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHNwZWVkOwogCiAJc3RydWN0IHsKIAkJREVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7CkBAIC03NjIsNyAmIzQzOzc5MSw2IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTsKIAl1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTsKIAl1bnNpZ25lZCBkYXNoX2VuYWJsZWQ6MTsKLQlib29sIHNmcF9tb2RlOjE7CiAJZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7CiAJc3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzOwogCXN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0OwpAQCAtNzc0LDYgJiM0Mzs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkczsKIAogCXUzMiBvY3BfYmFzZTsKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiYjNDM7CXN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZzsKJiM0MzsJc3RydWN0IHBoeWxpbmtfcGNzIHBjczsKJiM0MzsJc3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHNhdmVkX3BhdXNlOwomIzQzOwlib29sIGp1bWJvX3BhdXNlX3NhdmVkOwogfTsKIAogdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7CkBAIC0xMTI4LDEwICYjNDM7MTE2Miw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKQogCWlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpCiAJCXJldHVybiAwOwogCi0JLyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSAmYW1wOyZhbXA7IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKQotCQlyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgJmFtcDsgMHhmZmZmOwotCiAJUlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyAmbHQ7Jmx0OyAxNSk7CiAKIAlyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCAmYW1wO3J0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID8KQEAgLTEyMTcsMTIgJiM0MzsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKLXsKLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCi0JCXI4MTI3X3NmcF9pbml0XzEwZyh0cCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQpAQCAtMTI4Myw2ICYjNDM7MTMwNywxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZywgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgJmFtcDsgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT0KJiM0MzsJCVJUTF9QS0dfREVURUNUXzgxMTZBRiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSAmYW1wOyBSVExfSU5UX0hXX0lEX01BU0spID09CiYjNDM7CQlSVExfSU5UX0hXX0lEXzgxMTZBRjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZykKIHsKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC0mZ3Q7b2NwX2Jhc2UgJiM0MzsgcmVnKTsKQEAgLTE1NzgsNiAmIzQzOzE2MTEsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCXUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTsKJiM0MzsKJiM0MzsJCWlmICgoZGF0YSAmYW1wOyAweGZmKSA9PSAweDA3KQomIzQzOwkJCXJldHVybiBSVExfU0ZQXzgxMjdfQVRGOwomIzQzOwl9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7CiYjNDM7CQlyZXR1cm4gUlRMX1NGUF84MTY4X0FGOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBSVExfU0ZQX05PTkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY3MywxNiAmIzQzOzE3MjAsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9wY2lfY29tbWl0KHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8CiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwotCQl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTAwKSB7CiYjNDM7CQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE2OTIsNyAmIzQzOzE3MzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTsKIAl9IGVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8CiAJCSAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwogCQl9IGVsc2UgewpAQCAtMTcwMCw3ICYjNDM7MTc0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpOwogCQl9CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMCkgewomIzQzOwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7CiAJCX0gZWxzZSB7CkBAIC0yMDc0LDExICYjNDM7MjExOSwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJY2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7CiAKIAkvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqLwotCWlmICh0cC0mZ3Q7cGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQomIzQzOwlpZiAodHAtJmd0O3NwZWVkID09IFNQRUVEX1VOS05PV04pCiAJCXJldHVybiBjaTsKIAogCWZvciAoOyBjaS0mZ3Q7c3BlZWQ7IGNpJiM0MzsmIzQzOykgewotCQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQomIzQzOwkJaWYgKHRwLSZndDtzcGVlZCA9PSBjaS0mZ3Q7c3BlZWQpCiAJCQlyZXR1cm4gY2k7CiAJfQogCkBAIC0yMjM2LDcgJiM0MzsyMjgxLDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdW5zaWduZWQgaW50IHNwZWVkID0gdHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQ7CiYjNDM7CXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtzcGVlZDsKIAl1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC0mZ3Q7dHhfbHBpX3RpbWVyOwogCiAJaWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQpAQCAtMjI1NCw3ICYjNDM7MjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiAJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNzAsNyAmIzQzOzIzMTUsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlkZXYsIGRhdGEpOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMDEsMTMgJiM0MzsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlOwotCi0JcGh5X2dldF9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCAmYW1wO3R4X3BhdXNlLCAmYW1wO3J4X3BhdXNlKTsKIAotCWRhdGEtJmd0O2F1dG9uZWcgPSB0cC0mZ3Q7cGh5ZGV2LSZndDthdXRvbmVnOwotCWRhdGEtJmd0O3R4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDsKLQlkYXRhLSZndDtyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7CiYjNDM7CXBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjMxOCw5ICYjNDM7MjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcGh5X3NldF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYsIGRhdGEtJmd0O3J4X3BhdXNlLCBkYXRhLSZndDt0eF9wYXVzZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzODYsMzQgJiM0MzsyNDI0LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWxlMzJfdG9fY3B1KHRwLSZndDtjb3VudGVycy0mZ3Q7cnhfdW5rbm93bl9vcGNvZGUpOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCWludCBkdXBsZXggPSBjbWQtJmd0O2Jhc2UuZHVwbGV4OwotCWludCBzcGVlZCA9IGNtZC0mZ3Q7YmFzZS5zcGVlZDsKLQotCWlmICghdHAtJmd0O3NmcF9tb2RlKQotCQlyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7Ci0KLQlpZiAoY21kLSZndDtiYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi0mZ3Q7c3VwcG9ydGVkKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCXBoeWRldi0mZ3Q7YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQlwaHlkZXYtJmd0O3NwZWVkID0gc3BlZWQ7Ci0JcGh5ZGV2LSZndDtkdXBsZXggPSBkdXBsZXg7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlydGxfc2ZwX2luaXQodHApOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtJmd0O3BoeWxpbmssIGNtZCk7CiYjNDM7fQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC0mZ3Q7cGh5bGluayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKQEAgLTI0MzEsMTAgJiM0MzsyNDYyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NzZXRfY291bnQJCT0gcnRsODE2OV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAotCS5ud2F5X3Jlc2V0CQk9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsCiYjNDM7CS5ud2F5X3Jlc2V0CQk9IHJ0bDgxNjlfbndheV9yZXNldCwKIAkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiAJLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfbGlua19rc2V0dGluZ3MJPSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsCiAJLmdldF9yaW5ncGFyYW0JCT0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKQEAgLTI0OTksOSAmIzQzOzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJdHAtJmd0O29jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTsKIAogCQkvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi8KLQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCi0JCQkJICAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCi0JCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CQlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCQlwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtJmd0O3BoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiAJfQogfQogCkBAIC0yNTM4LDYgJiM0MzsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZykKIAogc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJcGh5X2luaXRfaHcodHAtJmd0O3BoeWRldik7CiYjNDM7CXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtJmd0O3BoeWRldiwgdHAtJmd0O21hY192ZXJzaW9uKTsKIAogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewpAQCAtMjU1Miw5ICYjNDM7MjU4Niw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDtwY2lfZGV2LSZndDtzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMCkKIAkJcGh5X3dyaXRlX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTsKIAotCWlmICh0cC0mZ3Q7c2ZwX21vZGUpCi0JCXJ0bF9zZnBfaW5pdCh0cCk7Ci0KIAkvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovCiAJcGh5X3NwZWVkX3VwKHRwLSZndDtwaHlkZXYpOwogCkBAIC0yNjI3LDYgJiM0MzsyNjU4LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJYm9vbCBqdW1ibyA9IHRwLSZndDtkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKJiM0MzsJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBwYXVzZTsKIAlpbnQgcmVhZHJxID0gNDA5NjsKIAogCWlmIChqdW1ibyAmYW1wOyZhbXA7IHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzE3ICZhbXA7JmFtcDsKQEAgLTI2NTgsMTMgJiM0MzsyNjkwLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJaWYgKHBjaV9pc19wY2llKHRwLSZndDtwY2lfZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzdXBwb3J0c19nbWlpKQogCQlwY2llX3NldF9yZWFkcnEodHAtJmd0O3BjaV9kZXYsIHJlYWRycSk7CiAKLQkvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqLwogCWlmIChqdW1ibykgewotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJcGh5X3N0YXJ0X2FuZWcodHAtJmd0O3BoeWRldik7CiYjNDM7CQlpZiAoIXRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCkgewomIzQzOwkJCXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJCQlib29sIGFkdl9wYXVzZSwgYWR2X2FzeW07CiYjNDM7CiYjNDM7CQkJcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLSZndDtwaHlsaW5rLCAmYW1wO3RwLSZndDtzYXZlZF9wYXVzZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtzYXZlZF9wYXVzZS5hdXRvbmVnKSB7CiYjNDM7CQkJCXBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCAmYW1wO2NtZCk7CiYjNDM7CQkJCWFkdl9wYXVzZSA9IGV0aHRvb2xfbGlua19rc2V0dGluZ3NfdGVzdF9saW5rX21vZGUoJmFtcDtjbWQsCiYjNDM7CQkJCQkJCQkJCSAgYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJCQkJCQkJCSAgUGF1c2UpOwomIzQzOwkJCQlhZHZfYXN5bSAgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKCZhbXA7Y21kLAomIzQzOwkJCQkJCQkJCQkgIGFkdmVydGlzaW5nLAomIzQzOwkJCQkJCQkJCQkgIEFzeW1fUGF1c2UpOwomIzQzOwomIzQzOwkJCQlpZiAoYWR2X3BhdXNlICZhbXA7JmFtcDsgIWFkdl9hc3ltKSB7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAxOwomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTsKJiM0MzsJCQkJfSBlbHNlIGlmIChhZHZfcGF1c2UgJmFtcDsmYW1wOyBhZHZfYXN5bSkgewomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTsKJiM0MzsJCQkJCXRwLSZndDtzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7CiYjNDM7CQkJCX0gZWxzZSBpZiAoIWFkdl9wYXVzZSAmYW1wOyZhbXA7IGFkdl9hc3ltKSB7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAwOwomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXRwLSZndDtzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwYXVzZS5hdXRvbmVnID0gdHAtJmd0O3NhdmVkX3BhdXNlLmF1dG9uZWc7CiYjNDM7CQlwYXVzZS5yeF9wYXVzZSA9IDA7CiYjNDM7CQlwYXVzZS50eF9wYXVzZSA9IDA7CiYjNDM7CiYjNDM7CQlwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssICZhbXA7cGF1c2UpOwomIzQzOwl9IGVsc2UgaWYgKHRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCkgewomIzQzOwkJcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLSZndDtwaHlsaW5rLCAmYW1wO3RwLSZndDtzYXZlZF9wYXVzZSk7CiYjNDM7CQl0cC0mZ3Q7anVtYm9fcGF1c2Vfc2F2ZWQgPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTI3ODAsNyAmIzQzOzI4NDcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkgewotCQlwaHlfc3BlZWRfZG93bih0cC0mZ3Q7cGh5ZGV2LCBmYWxzZSk7CiYjNDM7CQlwaHlsaW5rX3NwZWVkX2Rvd24odHAtJmd0O3BoeWxpbmssIGZhbHNlKTsKIAkJcnRsX3dvbF9lbmFibGVfcngodHApOwogCX0KIH0KQEAgLTI4MzIsNiAmIzQzOzI4OTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCVJUTF9XMzIodHAsIDB4N2MsIHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC0mZ3Q7cGh5bGluaywgaWZyLCBjbWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0OwpAQCAtMzA5OCw4ICYjNDM7MzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpOwogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiAJCWJyZWFrOwotCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiAJCVJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pOwogCQlmYWxsdGhyb3VnaDsKQEAgLTMxMTksNiAmIzQzOzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiAJLyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi8KIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTsKJiM0MzsJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCkBAIC0zMTUyLDYgJiM0MzszMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJCXJ0bF9lbmFibGVfbHRyKHRwKTsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCS8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqLwogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTsKQEAgLTMxNjQsNiAmIzQzOzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIAl9IGVsc2UgewogCQlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiYjNDM7CQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOgogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzY1Nyw2ICYjNDM7Mzc1MSwzNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LSZndDtkZXZmbik7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LSZndDtidXM7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZmbjsKJiM0MzsJaW50IGZ1bmM7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CiYjNDM7CWZvciAoZnVuYyA9IDI7IGZ1bmMgJmx0OyA4OyBmdW5jJiM0MzsmIzQzOykgewomIzQzOwkJZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7CiYjNDM7CiYjNDM7CQlyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgJmFtcDt2YWwpOwomIzQzOwkJaWYgKCFyZXQgJmFtcDsmYW1wOyAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHsKJiM0MzsJCQl2YWwgJmFtcDs9IH5QQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOwomIzQzOwkJCXZhbCAmYW1wOz0gfihQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7CiYjNDM7CQkJdmFsIHw9IChSVExfUE1fRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19QTV9DU1IsIHZhbCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsICZhbXA7dmFsKTsKJiM0MzsJCWlmICghcmV0ICZhbXA7JmFtcDsgIVBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKSB7CiYjNDM7CQkJdmFsICZhbXA7PSB+KChQQ0lfRVhQX0xOS1NUQV9MQk1TIHwgUENJX0VYUF9MTktTVEFfTEFCUykgJmx0OyZsdDsgMTYpOwomIzQzOwkJCXZhbCB8PSBQQ0lfRVhQX0xOS0NUTF9BU1BNQzsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMLCB2YWwpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHsKQEAgLTM2OTMsMTIgJiM0MzszODE2LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJcnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTsKIAotCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKLQlpZiAocmdfc2F3X2NudCAmZ3Q7IDApIHsKLQkJdTE2IHN3X2NudF8xbXNfaW5pOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikgewomIzQzOwkJcmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MGM0MiwgMHgxMykgJmFtcDsgMHgzZmZmOwomIzQzOwkJaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7CiYjNDM7CQkJdTE2IHN3X2NudF8xbXNfaW5pOwogCi0JCXN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgJmFtcDsgMHgwZmZmOwotCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKJiM0MzsJCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCX0KIAl9CiAKIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7CkBAIC0zNzExLDYgJiM0MzszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDk0LCAweDAwMDApOwogCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4YzA5ZSwgMHgwMDAwKTsKIAomIzQzOwlydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24odHAtJmd0O3BjaV9kZXYpOwogCS8qIGZpcm13YXJlIGlzIGZvciBNQUMgb25seSAqLwogCXI4MTY5X2FwcGx5X2Zpcm13YXJlKHRwKTsKIH0KQEAgLTQxNDAsMTEgJiM0Mzs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcGh5bGlua19zdG9wKHRwLSZndDtwaHlsaW5rKTsKJiM0MzsKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CiAJcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTsKIAomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcGh5bGlua19zdGFydCh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NjksOCAmIzQzOzUwMDEsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHN0YXR1cyAmYW1wOyBMaW5rQ2hnKQotCQlwaHlfbWFjX2ludGVycnVwdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyBMaW5rQ2hnKSB7CiYjNDM7CQlpZiAodHAtJmd0O3BoeV9pcnFfZG9tYWluKQomIzQzOwkJCWdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEodHAtJmd0O3BoeV9pcnFfZG9tYWluLCAwKTsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJCQlwaHlsaW5rX21hY19jaGFuZ2UodHAtJmd0O3BoeWxpbmssCiYjNDM7CQkJCQkgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgJmFtcDsgTGlua1N0YXR1cykpOwomIzQzOwl9CiAKIAlydGxfaXJxX2Rpc2FibGUodHApOwogCW5hcGlfc2NoZWR1bGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CkBAIC00OTMwLDkgJiM0Mzs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiB7Ci0JaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKLQkJcmV0dXJuOwotCiAJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCS8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqLwpAQCAtNDk2Myw0MCAmIzQzOzUwOTcsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQogCX0KIH0KIAotc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7Ci0KLQlpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkgewotCQlydGxfbGlua19jaGdfcGF0Y2godHApOwotCQlydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtJmd0O3BoeWRldi0mZ3Q7ZW5hYmxlX3R4X2xwaSk7Ci0JCXBtX3JlcXVlc3RfcmVzdW1lKGQpOwotCX0gZWxzZSB7Ci0JCXBtX3J1bnRpbWVfaWRsZShkKTsKLQl9Ci0KLQlwaHlfcHJpbnRfc3RhdHVzKHRwLSZndDtwaHlkZXYpOwotfQotCiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCXBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTsKIAlpbnQgcmV0OwogCi0JcGh5X21vZGUgPSB0cC0mZ3Q7c3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDoKLQkJICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKLQotCXJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC0mZ3Q7ZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlciwKLQkJCQkgcGh5X21vZGUpOwotCWlmIChyZXQpCiYjNDM7CXJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtJmd0O3BoeWxpbmssIHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQluZXRkZXZfZXJyKHRwLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgcGh5XG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7Ci0KLQlpZiAoIXRwLSZndDtzdXBwb3J0c19nbWlpKQotCQlwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7Ci0KLQlwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMDcsMTAgJiM0Mzs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqLwogCWJpdG1hcF96ZXJvKHRwLSZndDt3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTsKIAotCXBoeV9zdG9wKHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlsaW5rX3N0b3AodHAtJmd0O3BoeWxpbmspOwogCiAJLyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi8KLQlpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpCiAJCXJ0bF9zZnBfcmVzZXQodHApOwogCiAJcnRsODE2OV91cGRhdGVfY291bnRlcnModHApOwpAQCAtNTAzMiwxNCAmIzQzOzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCiAJcGNpX3NldF9tYXN0ZXIodHAtJmd0O3BjaV9kZXYpOwotCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwotCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7Ci0JcnRsODE2OV9pbml0X3BoeSh0cCk7CiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJcnRsODE2OV9pbml0X3BoeSh0cCk7CiYjNDM7CiAJbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiAJZW5hYmxlX3dvcmsoJmFtcDt0cC0mZ3Q7d2sud29yayk7CiAJcnRsX3Jlc2V0X3dvcmsodHApOwogCi0JcGh5X3N0YXJ0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlsaW5rX3N0YXJ0KHRwLSZndDtwaHlsaW5rKTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDU1LDcgJiM0Mzs1MTY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsOSAmIzQzOzUyMjEsMTEgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIGVycl9yZWxlYXNlX2Z3XzI7CiAKLQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJfZnJlZV9pcnE7CiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAKIAlydGw4MTY5X3VwKHRwKTsKIAlydGw4MTY5X2luaXRfY291bnRlcl9vZmZzZXRzKHRwKTsKQEAgLTUxOTAsOCAmIzQzOzUzMDEsMTEgQEAgc3RhdGljIGludCBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlydGxfcmFyX3NldCh0cCwgdHAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCV9fcnRsODE2OV9zZXRfd29sKHRwLCB0cC0mZ3Q7c2F2ZWRfd29sb3B0cyk7CiAKLQlpZiAodHAtJmd0O1R4RGVzY0FycmF5KQomIzQzOwlpZiAodHAtJmd0O1R4RGVzY0FycmF5KSB7CiYjNDM7CQlydG5sX2xvY2soKTsKIAkJcnRsODE2OV91cCh0cCk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwl9CiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKHRwLSZndDtkZXYpOwogCkBAIC01Mjg4LDYgJiM0Mzs1NDAyLDggQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXI4MTY5X3JlbW92ZV9sZWRzKHRwLSZndDtsZWRzKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHRwLSZndDtkZXYpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmspCiYjNDM7CQlwaHlsaW5rX2Rlc3Ryb3kodHAtJmd0O3BoeWxpbmspOwogCiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CkBAIC01MzEwLDcgJiM0Mzs1NDI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHsKIAkubmRvX2ZpeF9mZWF0dXJlcwk9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X2ZlYXR1cmVzCT0gcnRsODE2OV9zZXRfZmVhdHVyZXMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBydGxfc2V0X21hY19hZGRyZXNzLAotCS5uZG9fZXRoX2lvY3RsCQk9IHBoeV9kb19pb2N0bF9ydW5uaW5nLAomIzQzOwkubmRvX2V0aF9pb2N0bAkJPSBydGw4MTY5X2lvY3RsLAogCS5uZG9fc2V0X3J4X21vZGUJPSBydGxfc2V0X3J4X21vZGUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHJ0bDgxNjlfbmV0cG9sbCwKQEAgLTU0MjMsMTEgJiM0Mzs1NTM5LDM5IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1KHN0cnVjdCBtaWlfYnVzICptaWlfYnVzLCBpbnQgYWRkciwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRsX3BoeV9pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAomIzQzOwkJCSAgIGlycV9od19udW1iZXJfdCBod2lycSkKJiM0Mzt7CiYjNDM7CWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZhbXA7ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKJiM0MzsJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkLSZndDtob3N0X2RhdGEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBydGxfcGh5X2lycV9kb21haW5fb3BzID0gewomIzQzOwkubWFwID0gcnRsX3BoeV9pcnFfbWFwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkYXRhOwomIzQzOwlpbnQgdmlycTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtwaHlfaXJxX2RvbWFpbikgewomIzQzOwkJdmlycSA9IGlycV9maW5kX21hcHBpbmcodHAtJmd0O3BoeV9pcnFfZG9tYWluLCAwKTsKJiM0MzsJCWlmICh2aXJxKQomIzQzOwkJCWlycV9kaXNwb3NlX21hcHBpbmcodmlycSk7CiYjNDM7CiYjNDM7CQlpcnFfZG9tYWluX3JlbW92ZSh0cC0mZ3Q7cGh5X2lycV9kb21haW4pOwomIzQzOwkJdHAtJmd0O3BoeV9pcnFfZG9tYWluID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLSZndDtwY2lfZGV2OwogCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIHZpcnE7CiAKIAkvKiBPbiBzb21lIGJvYXJkcyB3aXRoIHRoaXMgY2hpcCB2ZXJzaW9uIHRoZSBCSU9TIGlzIGJ1Z2d5IGFuZCBtaXNzZXMKIAkgKiB0byByZXNldCB0aGUgUEhZIHBhZ2Ugc2VsZWN0b3IuIFRoaXMgcmVzdWx0cyBpbiB0aGUgUEhZIElEIHJlYWQKQEAgLTU0NDUsNyAmIzQzOzU1ODksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJbmV3X2J1cy0mZ3Q7bmFtZSA9ICYjMzQ7cjgxNjkmIzM0OzsKIAluZXdfYnVzLSZndDtwcml2ID0gdHA7CiAJbmV3X2J1cy0mZ3Q7cGFyZW50ID0gJmFtcDtwZGV2LSZndDtkZXY7Ci0JbmV3X2J1cy0mZ3Q7aXJxWzBdID0gUEhZX01BQ19JTlRFUlJVUFQ7CiAJbmV3X2J1cy0mZ3Q7cGh5X21hc2sgPSBHRU5NQVNLKDMxLCAxKTsKIAlzbnByaW50ZihuZXdfYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0O3I4MTY5LSV4LSV4JiMzNDssCiAJCSBwY2lfZG9tYWluX25yKHBkZXYtJmd0O2J1cyksIHBjaV9kZXZfaWQocGRldikpOwpAQCAtNTQ1OCw2ICYjNDM7NTYwMSwyMSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCW5ld19idXMtJmd0O3dyaXRlX2M0NSA9IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NTsKIAl9CiAKJiM0MzsJdHAtJmd0O3BoeV9pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIDEsCiYjNDM7CQkJCQkJICAgJmFtcDtydGxfcGh5X2lycV9kb21haW5fb3BzLCB0cCk7CiYjNDM7CWlmICghdHAtJmd0O3BoeV9pcnFfZG9tYWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO3BkZXYtJmd0O2RldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC0mZ3Q7cGh5X2lycV9kb21haW4sIDApOwomIzQzOwlpZiAoIXZpcnEpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmV3X2J1cy0mZ3Q7aXJxWzBdID0gdmlycTsKJiM0MzsKIAlyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoJmFtcDtwZGV2LSZndDtkZXYsIG5ld19idXMpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01NDc0LDE2ICYjNDM7NTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fAomIzQzOwkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fAomIzQzOwkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUikKJiM0MzsJCXJldHVybiAmYW1wO3RwLSZndDtwY3M7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJX19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTsKJiM0MzsJX19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7CiYjNDM7CXZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0cC0mZ3Q7bWFjX29jcF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiB2YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiYjNDM7CQkJCSAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7CiYjNDM7CiYjNDM7CWlmICh0cC0mZ3Q7c2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikgewomIzQzOwkJdTE2IHN0YXQxOwomIzQzOwomIzQzOwkJc3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpOwomIzQzOwomIzQzOwkJaWYgKCEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKSkKJiM0MzsJCQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlzdGF0ZS0mZ3Q7bGluayA9ICEhKHN0YXQxICZhbXA7IE1ESU9fU1RBVDFfTFNUQVRVUyk7CiYjNDM7CQlpZiAoIXN0YXRlLSZndDtsaW5rKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtkdXBsZXggPSBEVVBMRVhfRlVMTDsKJiM0MzsJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpCiYjNDM7CQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc192YWxpZGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpOwomIzQzOwomIzQzOwlydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cnVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7CiYjNDM7CS5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcywKJiM0MzsJLm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZywKJiM0MzsJLm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sCiYjNDM7CS5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCwKJiM0MzsJLm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksCiYjNDM7CS5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBjYXBzID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSB8fCB0cC0mZ3Q7c2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CS8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzCiYjNDM7CSAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZQomIzQzOwkgKi8KJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzYzKQomIzQzOwkJY2FwcyB8PSBNQUNfMjUwMEZEOwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNzApCiYjNDM7CQljYXBzIHw9IE1BQ181MDAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzEwMDAwRkQ7CiYjNDM7CiYjNDM7CXJldHVybiBjYXBzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0gewomIzQzOwkucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsCiYjNDM7CS5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLAomIzQzOwkucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZywKJiM0MzsJLnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlsaW5rICpwbDsKJiM0MzsJcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGV2ID0gJmFtcDt0cC0mZ3Q7ZGV2LSZndDtkZXY7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApOwomIzQzOwl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O3NmcF9tb2RlKSB7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTY4X0FGOgomIzQzOwkJdHAtJmd0O3Bjcy5vcHMgPSAmYW1wO3I4MTY5X3Bjc19vcHM7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUTF9TRlBfODEyN19BVEY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApCiYjNDM7CQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8CiYjNDM7CQkJCQkJCSAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzYxKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEOwomIzQzOwkJZWxzZQomIzQzOwkJCWlmICh0cC0mZ3Q7c3VwcG9ydHNfZ21paSkKJiM0MzsJCQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0OyBSVExfR0lHQV9NQUNfVkVSXzYxKQomIzQzOwkJCXBoeV9tb2RlID0gdHAtJmd0O3N1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6CiYjNDM7CQkJCSAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwMzYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA0OSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNTMsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNyAmIzQzOzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKQomIzQzOwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzZnBfbW9kZSAhPSBSVExfU0ZQXzgxMjdfQVRGKQogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIGByODE2OWAgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggZm9yIHRoZSBgcjgxNjlgIGRyaXZlciwgd2hpY2ggaXMgYSBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIHN3aXRjaGluZyBpdCB0byB1c2UgdGhlIGBwaHlsaW5rYCBBUEkuIEl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbnMgYW5kIHN1cHBvcnRpbmcgZGlmZmVyZW50IFNGUCBtb2RlcywgYmFzaWNhbGx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBvdmVyaGF1bC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHRlc3QgdGhpcyByZWxpYWJseT8gU3BlY2lmaWNhbGx5LCBjYW4gd2UgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KClNpbmNlIGl0JiMzOTtzIGEgUENJIGRyaXZlciwgdGhhdCBtZWFucyBpdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluIGEgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgZW11bGF0ZSB0aGlzIG9yIGluamVjdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJ1dCBpcyBpdCBkZWVwIGVub3VnaCB0byByZWFsbHkgaGl0IHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvcj8KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCBRRU1VIGhhcyBuZXR3b3JrIGRldmljZXMsIG1heWJlIGl0IGhhcyBgcnRsODE2OWAhJiMzNDsgIEkgaW1tZWRpYXRlbHkgc3RhcnRlZCBjaGVja2luZy4gSSByZW1lbWJlcmVkIGl0IGhhZCB0aGluZ3MgbGlrZSB0aGUgYHJ0bDgxMzlgICgxMC8xMDApIGFuZCBgZTEwMDBgLCBldGMuIFRoZW4sIEkgaGFkIHRvIHN0b3AgYW5kIGNsYXJpZnksIGRvZXMgUUVNVSByZWFsbHkgaGF2ZSBgcnRsODE2OWA/IEkgbG9va2VkIGFuZCBjb3VsZG4mIzM5O3QgZmluZCBhIGRpcmVjdCBgcnRsODE2OWAgaW4gUUVNVSYjMzk7cyBkZXZpY2UgbGlzdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBzdXBwb3J0LiBJdCBzb3VuZHMgbGlrZSBpZiBRRU1VICpkaWQqIGVtdWxhdGUgaXQsIGl0IHdvdWxkIGJlIGVhc3ksIGJ1dCBpZiBub3QsIGlzIHRoaXMgY29kZSBwYXRoIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGtub3cgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LCBvciBpZiBpdCYjMzk7cyBsaWtlIGEgVVNCIGdhZGdldCBvciBhIHNvZnR3YXJlIGRldmljZS4KCkkgc3RhcnRlZCB0aGlua2luZyBhYm91dCBQQ0kgSURzIGFuZCB3aGV0aGVyIHRoZXkgbWF0Y2hlZCBhbnl0aGluZyBpbiBRRU1VJiMzOTtzIGVtdWxhdGlvbi4gRXZlbiBpZiBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgaXQgZGlyZWN0bHksIHN5emthbGxlciYjMzk7cyBgdmZpb2Agb3IgZ2VuZXJpYyBQQ0kgZnV6emluZyAqbWlnaHQqIHJlYWNoIGl0IGlmIHdlIGNhbiBnZXQgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQgc29tZWhvdy4gQnV0IGJhc2VkIG9uIHRoZSBwcm9tcHQmIzM5O3MgcnVsZXMsIGl0IHNvdW5kcyBsaWtlIGlmIGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0LCBpdCBtaWdodCBiZSB1bnJlYWNoYWJsZS4KCkkgd2FzIHRoaW5raW5nIEkgY2FuIHByb2JlIGZvciBpdCBpbiBRRU1VLiBUaGVuLCBJIGhhZCB0aGUgaWRlYSB0byB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgUENJIElEIGZvciBgcjgxNjlgIHRoYXQgbWF0Y2hlcyBhIGtub3duIFFFTVUgZGV2aWNlLCBvciBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byB0cmlnZ2VyIGl0LiBUaGVuIEkgdGhvdWdodCBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBldGMuIHRvIHNlZSBpZiBpdCBtYWtlcyBhIGRpZmZlcmVuY2UsIGJ1dCBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UuCgpMZXQgbWUgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIGByODE2OWAgUENJIElEcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVEw4MTY5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTg0PWNvbmZpZyBSODE2OVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05NC1cdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo5NTpcdCAgUlRMODE2OSBHaWdhYml0IEV0aGVybmV0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTYtXHQgIFJUTDgxNjggR2lnYWJpdCBFdGhlcm5ldFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIyMi1cdC8qIDgxMTAgZmFtaWx5LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjIzOlx0eyAweGZjOCwgMHg5ODAsXHRSVExfR0lHQV9NQUNfVkVSXzA2LCBcJiMzNDtSVEw4MTY5c2MvODExMHNjXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMjQ6XHR7IDB4ZmM4LCAweDE4MCxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFwmIzM0O1JUTDgxNjlzYy84MTEwc2NcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNTpcdHsgMHhmYzgsIDB4MTAwLFx0UlRMX0dJR0FfTUFDX1ZFUl8wNCwgXCYjMzQ7UlRMODE2OXNiLzgxMTBzYlwmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI2LVx0eyAweGZjOCwgMHgwNDAsXHRSVExfR0lHQV9NQUNfVkVSXzAzLCBcJiMzNDtSVEw4MTEwc1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjI3Olx0eyAweGZjOCwgMHgwMDgsXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcJiMzNDtSVEw4MTY5c1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU2OTA9c3RhdGljIGludCBydGxfanVtYm9fbWF4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU2OTYtXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1Njk3Olx0LyogUlRMODE2OSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTY5OC1cdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYzNAoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDc2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgYHJ0bDgxNjlgIERyaXZlciB3aXRoIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGBydGw4MTY5YCBkcml2ZXIgd2l0aCB0aGUgZXhpc3Rpbmcgc3l6a2FsbGVyIHNldHVwLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBwcm9tcHQgaXMgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzPyBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIHNvbWUga2luZCBvZiB2aXJ0dWFsIGhhcmR3YXJlIGZvciBgcnRsODE2OWA/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzLiBCdXQsIGluaXRpYWxseSwgSSB3YXNuJiMzOTt0IHN1cmUgaWYgaXQgZnVsbHkgZW11bGF0ZWQgdGhlIE1NSU8vUElPIHNwYWNlIOKAkyBzZWVtcyBsaWtlIGl0IGNvdWxkIGp1c3QgcmV0dXJuIHJhbmRvbSBkYXRhIGZvciByZWFkcy4KCldhaXQsIHRoYXQmIzM5O3Mgd3JvbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBQQ0kgZHJpdmVycyEgSXQgZW11bGF0ZXMgdGhlIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8vUElPIHJlYWRzIGFuZCBjYW4gdXNlIHNwZWNpZmljIGZ1enppbmcgdGVjaG5pcXVlcyBmb3IgcmVhZHMvd3JpdGVzLiBIbW0sIGJ1dCB3aWxsIHRoaXMgZnV6emluZyBhY3R1YWxseSBkaWcgZGVlcCBlbm91Z2ggaW50byBgcjgxNjlfbWFpbi5jYD8gR29vZCBxdWVzdGlvbi4gSSBrbm93IHRoYXQgYHZmaW9gIG9yIGdlbmVyaWMgYHBjaWAgZnV6emluZyBpbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUgUENJIGRyaXZlcnMuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHNwZWNpZmljIHBhdGNoIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4KClJpZ2h0LCB0aGUgcGF0Y2ggaXMgYSBtYWpvciByZWZhY3RvcmluZyB0byB1c2UgYHBoeWxpbmtgLiBJZiB0aGUgUENJIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBmdXp6aW5nLCB0aGVuIHllcy4gV2UgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1I4MTY5YCBpcyBldmVuIGVuYWJsZWQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBVc3VhbGx5LCBzeXprYWxsZXIgZW5hYmxlcyBhIGxvdCBvZiBuZXR3b3JrIGRyaXZlcnMgZm9yIHRoaXMgZXhhY3QgdHlwZSBvZiBQQ0kgZnV6emluZy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSB3ZWlyZCBjb25maWcgc2V0dGluZ3MuIFllcCwgYENPTkZJR19SODE2OWAgaXMgdGhlIG1haW4gb25lLgoKT2theSwgYmFjayB0byB0aGUgcHJvbXB0LiBJdCBzYXlzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IE5vdywgaXMgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGNvbnNpZGVyZWQgJiMzNDtzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7PyBJIHRoaW5rIGl0IGlzLCBiZWNhdXNlIHN5emthbGxlciBkb2VzIGhhdmUgYHN5el9nZW5fcGNpYCBhbmQgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBlZmZlY3RpdmVseSBlbXVsYXRlIFBDSSBkZXZpY2VzIGFuZCBmdXp6IHRoZWlyIGRyaXZlcnMuCgpJZiB0aGlzIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIGFuZCB0aGVyZSYjMzk7cyBubyBRRU1VIGRldmljZSwgY291bGQgaXQgZXZlbiBiZSByZWFjaGVkPyBTeXprYWxsZXImIzM5O3MgYHN5el9nZW5fcGNpYCBvciBgc3l6X3BjaV9kZXZpY2VgIGNhbiB0cmlnZ2VyIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIG9mIGFueSBQQ0kgZHJpdmVyIHNpbXBseSBieSBwcm92aWRpbmcgdGhlIG1hdGNoaW5nIFBDSSBJRC4gVGhlbiB0aGUgZHJpdmVyIHdpbGwgbWFwIHRoZSBNTUlPIHJlZ2lvbnMsIGFuZCB3aGVuIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIHRoZXNlIHJlZ2lvbnMsIHRoZSBmdXp6ZXIgcHJvdmlkZXMgdGhlIHJhbmRvbSBkYXRhLiBUaGlzLCBpbiBlc3NlbmNlLCBsZXRzIHVzIGZ1enogdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBCdXQgYWdhaW4sIGlzIGl0IHRydWx5ICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7PwoKTGV0JiMzOTtzIHNlZSBpZiBgcjgxNjlgIGlzIGNvbW1vbmx5IGZ1enplZC4gQWN0dWFsbHksIEkgcmVtZW1iZXIgbWFueSBoYXJkd2FyZSBkcml2ZXJzIGFyZSBjb25zaWRlcmVkICYjMzQ7dW5yZWFjaGFibGUmIzM0OyBpZiB0aGV5IHJlcXVpcmUgKmFjdHVhbCogaGFyZHdhcmUgYW5kIHRoZXJlJiMzOTtzIG5vIGVtdWxhdG9yLiBCdXQgdGhpcyBQQ0kgZnV6emVyICppcyogYW4gZW11bGF0b3IsIG9mIHNvcnRzLiBOb3csIGxvb2tpbmcgYXQgdGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCBhZ2Fpbi4uLiBpdCYjMzk7cyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBldmVuICpzb2Z0d2FyZSotZW11bGF0ZWQgaGFyZHdhcmUuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgUENJIGdhZGdldC4gU28sIHllcywgaXQgY291bnRzIQoKT2theSwgSSYjMzk7bGwgYXNzdW1lIHRoYXQgaXQgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBgcGh5bGlua2AgaW50ZWdyYXRpb24uIE15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGluY2x1ZGU6IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX3BoeWxpbmtfbWFjX29wc2AsIGFuZCBgcjgxNjlfcGNzX29wc2AuIEkgc2hvdWxkIHRyeSB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyB0aGF0IHdlcmUgYWRkZWQgb3IgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IHBoeWxpbmtfcGNzIFxcKikgcnRsW2EtekEtWjAtOV9dKl9wY3NfW2EtekEtWjAtOV9dKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU3ODk9c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgwMzpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODA0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU4MzI6c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMy1cdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4NDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODQ1OnN0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4NDYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTg1MTpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBhdGNoIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBwdWxsIHVwIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIG9yIGFkZGVkLiBBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBsaXN0OiBgcnRsX2luaXRfcGh5bGlua2AsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAsIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYCwgYHJ0bF9waHlfaXJxX21hcGAsIGBydGxfcGh5X2lycV9jbGVhbnVwYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X253YXlfcmVzZXRgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYC4gVGhhdCYjMzk7cyBxdWl0ZSBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGNoYW5nZXMuIEltbWVkaWF0ZWx5LCB0aGUgaW5jbHVzaW9uIG9mIGBwaHlsaW5rYCBmdW5jdGlvbnMganVtcHMgb3V0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBpbnRlZ3JhdGVzIGludG8gdGhlIGV4aXN0aW5nIGRyaXZlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19SODE2OWAgaXMgc3RpbGwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIHRoaXMuIEJ1dCB3YWl0Li4uIGRpZG4mIzM5O3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IGBQSFlMSU5LYCBiZWluZyBzZWxlY3RlZCBieSBgUjgxNjlgIG5vdz8gUmlnaHQuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFI4MTY5IGRyaXZlciwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaGVyZS4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgYnJvYWRseSB0aGlzIHBhdGNoIGltcGFjdHMgb3RoZXIgc3lzdGVtcyBvciBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSODE2OSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9NzQ9Y29uZmlnIDgxMzlfT0xEX1JYX1JFU0VUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjg0OmNvbmZpZyBSODE2OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg1LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMzpjb25maWcgUjgxNjlfTEVEU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTEwNC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4ODYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFI4MTY5IERyaXZlciBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIGBSODE2OWAgZHJpdmVyLCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgYml0cy4gRmlyc3QsIGBSODE2OWAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQmIzM5O3Mgb2J2aW91cy4gTm93LCBJIG5lZWQgdG8gY2hhcnQgYSBjb3Vyc2UgZm9yIG91ciBmdXp6aW5nIHRhcmdldHMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQgaXMgY2FsbGVkIGZyb20gYHJ0bF9pbml0X29uZWAsIHdoaWNoIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCwgYXMgbG9uZyBhcyB3ZSBjYW4gcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEFuZCB5ZXMsIGBydGxfaW5pdF9vbmVgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBQQ0kgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGFzc2VtYmxlIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJIHRoaW5rIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCB3aWxsIGJlOgoKKiAgIGBydGxfaW5pdF9waHlsaW5rYAoqICAgYHJ0bF9tYWNfbGlua19kb3duYAoqICAgYHJ0bF9tYWNfbGlua191cGAKKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgCiogICBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYAoqICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAKKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2AKKiAgIGBydGxfcGh5X2lycV9tYXBgCiogICBgcnRsX3BoeV9pcnFfY2xlYW51cGAKKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCiogICBgcnRsX2dldF9zZnBfbW9kZWAKKiAgIGBydGw4MTY5X2lvY3RsYAoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAKKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AKKiAgIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AKCkxldCYjMzk7cyByZWZpbmUgdGhhdCBsaXN0IGJ5IGN1dHRpbmcgb3V0IHVubmVjZXNzYXJ5IGNydWZ0LgoKKiAgIGBydGxfaW5pdF9waHlsaW5rYAoqICAgYHJ0bF9tYWNfbGlua19kb3duYAoqICAgYHJ0bF9tYWNfbGlua191cGAKKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgCiogICBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYAoqICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAKKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2AKKiAgIGBydGxfcGh5X2lycV9tYXBgCiogICBgcnRsX3BoeV9pcnFfY2xlYW51cGAKKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCiogICBgcnRsX2dldF9zZnBfbW9kZWAKKiAgIGBydGw4MTY5X2lvY3RsYAoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgY292ZXJlZC4gYENPTkZJR19SODE2OWAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycyB3ZSBuZWVkPyBgUEhZTElOS2AgaXMgc2VsZWN0ZWQgYnkgYFI4MTY5YCwgc28gdGhhdCYjMzk7cyB0YWtlbiBjYXJlIG9mLiBEb2VzIHRoaXMgdGhpbmcgcmVxdWlyZSBgQ09ORklHX1BDSWA/IEl0IGRvZXMsIGJ1dCBsdWNraWx5LCB0aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGVgIHRvIGNvbmZpcm0uIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cjgxNjkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfODEzOVRPTykgJiM0Mzs9IDgxMzl0b28ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo4OnI4MTY5LXkgJiM0Mzs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo5OnI4MTY5LSQoQ09ORklHX1I4MTY5X0xFRFMpICYjNDM7PSByODE2OV9sZWRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1I4MTY5KSAmIzQzOz0gcjgxNjkub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfUlRBU0UpICYjNDM7PSBydGFzZS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NDgKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogMTQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYFI4MTY5YCBEcml2ZXIqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgUjgxNjlgIGlzIHRoZSBvbmx5IGRyaXZlciBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBMZXQmIzM5O3MgZGlnIGluLiBJJiMzOTt2ZSBnb3QgdG8gcmV2aWV3IHRoaXMgcGF0Y2ggY2FyZWZ1bGx5LiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgbWlncmF0aW9uLCByZXBsYWNpbmcgZGlyZWN0IGBwaHlkZXZgIGNhbGxzIHdpdGggdGhlIGBwaHlsaW5rYCBBUEkgY2FsbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBhZGRzIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBoeWxpbmsgaW50ZWdyYXRpb246IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9waHlsaW5rX21hY19vcHNgLCBgcjgxNjlfcGNzX29wc2AsIGBydGxfcGh5X2lycV9kb21haW5fb3BzYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBhbmQgc2V2ZXJhbCBgcnRsODE2OV9wY3NfKmAgYW5kIGBydGxfbWFjXypgIGZ1bmN0aW9ucywgaW5jbHVkaW5nIExQSSBjb250cm9sLiBJdCBhbHNvIG1vZGlmaWVzIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIHRoZSBga3NldHRpbmdzYCBmdW5jdGlvbnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zIHJlYWNoYWJsZT8gTGV0JiMzOTtzIHRyYWNlIGl0LiBJdCBzZWVtcyB0aGF0IHRocm91Z2ggUENJIGZ1enppbmcsIGBydGxfaW5pdF9vbmVgIGlzIGNhbGxlZCB3aGljaCB0aGVuIGNhbGxzIGBydGxfaW5pdF9waHlsaW5rYC4gQWZ0ZXIgdGhhdCwgYHBoeWxpbmtfY3JlYXRlYCBnZXRzIGNhbGxlZCwgYW5kIGlmIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgYHJ0bF9vcGVuYCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBuZXRsaW5rL2lvY3RsLiBgcnRsX29wZW5gIHRoZW4gY2FsbHMgYHI4MTY5X3BoeV9jb25uZWN0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgcGh5bGlua19jb25uZWN0X3BoeWAgYW5kIGBwaHlsaW5rX3N0YXJ0YC4gVGhpcyB3aWxsIGRyaXZlIHRoZSBwaHlsaW5rIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGF0IHdpbGwgY2FsbCBhIGxvdCBvZiB0aGUgbmV3IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdCwgZnVuY3Rpb25zIGxpa2UgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYW5kIHNvIG9uLiBBbHNvLCB0aGUgYHJ0bDgxNjlfaW9jdGxgIGlzIHJlYWNoYWJsZSB2aWEgYFNJT0NHTUlJUEhZYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBBbmQgdGhlIGBrc2V0dGluZ3NgIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wuCgpHaXZlbiB0aGUgcGF0aGZpbmRpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGJ1aWxkIGEgbGlzdCBvZiBmb2N1c2VkIHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4KCkkmIzM5O3ZlIGluaXRpYWxseSBpZGVudGlmaWVkIGEgZ29vZCBsaXN0OgoKYHJ0bF9pbml0X3BoeWxpbmtgCmBydGxfbWFjX2xpbmtfZG93bmAKYHJ0bF9tYWNfbGlua191cGAKYHJ0bF9tYWNfc2VsZWN0X3Bjc2AKYHJ0bDgxNjlfc2RzX3JlYWRgCmBydGw4MTY5X3Bjc19nZXRfc3RhdGVgCmBydGw4MTY5X3Bjc19jb25maWdgCmBydGxfbWFjX2VuYWJsZV90eF9scGlgCmBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYApgcnRsODE2OV9nZXRfbHBpX2NhcHNgCmBydGxfcGh5X2lycV9tYXBgCmBydGxfcGh5X2lycV9jbGVhbnVwYApgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uYApgcnRsX2dldF9zZnBfbW9kZWAKYHJ0bDgxNjlfaW9jdGxgCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGRlYWQgY29kZS4gYHJ0bF9tYWNfY29uZmlnYCBpcyBlbXB0eSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdGhhdC4gVGhlIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBzZWVtIHRvIGhhdmUgbm8gZnVuY3Rpb25hbGl0eSwgc28gd2UgY2FuIHByb2JhYmx5IG9taXQgdGhlbSB0b28uIExldCYjMzk7cyBrZWVwIGBydGxfaXNfODExNmFmYCBhcyBpdCYjMzk7cyBhIHNtYWxsIGhlbHBlciwgbWF5YmUgaXQmIzM5O2xsIG1ha2Ugc29tZSBmdXp6aW5nLiBUaGUgYG53YXlfcmVzZXRgIGFuZCBga3NldHRpbmdzYCBmdW5jdGlvbnMgYXJlIGp1c3QgdGhpbiB3cmFwcGVycywgc28gdGhvc2UgYXJlbiYjMzk7dCB3b3J0aCB0aGUgZWZmb3J0LgoKU28sIGhlcmUmIzM5O3MgdGhlICpmaW5hbCogbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246CgpgcnRsX2luaXRfcGh5bGlua2AKYHJ0bF9tYWNfbGlua19kb3duYApgcnRsX21hY19saW5rX3VwYApgcnRsX21hY19zZWxlY3RfcGNzYApgcnRsODE2OV9zZHNfcmVhZGAKYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAKYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAKYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgCmBydGw4MTY5X2dldF9scGlfY2Fwc2AKYHJ0bF9waHlfaXJxX21hcGAKYHJ0bF9waHlfaXJxX2NsZWFudXBgCmBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCmBydGxfZ2V0X3NmcF9tb2RlYApgcnRsODE2OV9pb2N0bGAKClRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIGdldCB0bwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bF9pbml0X3BoeWxpbmsmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX2Rvd24mIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2dldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsX21hY19lbmFibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZGlzYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbHBpX2NhcHMmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfbWFwJiMzNDssCiAgICAmIzM0O3J0bF9waHlfaXJxX2NsZWFudXAmIzM0OywKICAgICYjMzQ7cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3J0bF9nZXRfc2ZwX21vZGUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bF9pbml0X3BoeWxpbmsmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX2Rvd24mIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2dldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsX21hY19lbmFibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZGlzYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbHBpX2NhcHMmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfbWFwJiMzNDssCiAgICAmIzM0O3J0bF9waHlfaXJxX2NsZWFudXAmIzM0OywKICAgICYjMzQ7cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3J0bF9nZXRfc2ZwX21vZGUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NDIuNzg0MzU4ODgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNTY3OTc5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGxfaW5pdF9waHlsaW5rXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfZG93blwiLFxuICAgIFwicnRsX21hY19saW5rX3VwXCIsXG4gICAgXCJydGxfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcInJ0bDgxNjlfc2RzX3JlYWRcIixcbiAgICBcInJ0bDgxNjlfcGNzX2dldF9zdGF0ZVwiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGxfbWFjX2VuYWJsZV90eF9scGlcIixcbiAgICBcInJ0bF9tYWNfZGlzYWJsZV90eF9scGlcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xwaV9jYXBzXCIsXG4gICAgXCJydGxfcGh5X2lycV9tYXBcIixcbiAgICBcInJ0bF9waHlfaXJxX2NsZWFudXBcIixcbiAgICBcInJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvblwiLFxuICAgIFwicnRsX2dldF9zZnBfbW9kZVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjQyLjc4NDM3MDYyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMDEyODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjViZWFkOWYyOTU2ZDc5ODBhMjY1ZGUxZGQyODE4YmE3NDQ0ZWU3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuQEAgLTg4LDYgKzg4LDcgQEAgY29uZmlnIFI4MTY5XFxuIFxcdHNlbGVjdCBDUkMzMlxcbiBcXHRzZWxlY3QgUEhZTElCXFxuIFxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbitcXHRzZWxlY3QgUEhZTElOS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cXG4gXFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjEsMTEgKzIxLDE0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbkBAIC05Niw2ICs5OSwxOSBAQFxcbiAjZGVmaW5lIEpVTUJPXzlLXFx0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4gI2RlZmluZSBKVU1CT18xNktcXHQoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiBcXG4rI2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXFx0MHhFQjEwXFxuKyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXFx0XFx0MHhFQjBFXFxuKyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1xcdDB4RUIxNFxcbisjZGVmaW5lIFNEU19DTURfUkVBRFxcdFxcdDB4MDAwMVxcbisjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcXHQweDQwXFxuKyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVxcdDB4MDA4MFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXFx0XFx0MHhkYzAwXFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1xcdDB4MDA3OFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRlxcdDB4MDAzMFxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURcXHRcXHQweGQwMDZcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0tcXHQweDAwZmZcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlxcdDB4MDAwMFxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4gXFx0dTMyIG1hc2s7XFxuIFxcdHUzMiB2YWw7XFxuQEAgLTMzNCwxMSArMzUwLDE2IEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XFxuIFxcdEFMRFBTX0xUUlxcdD0gMHhlMGEyLFxcbiBcXHRMVFJfT0JGRl9MT0NLXFx0PSAweGUwMzIsXFxuIFxcdExUUl9TTk9PUFxcdD0gMHhlMDM0LFxcbitcXHRTRU5EX0xUUl9NU0dcXHQ9IDB4ZTAzOCxcXG4gXFxuICNkZWZpbmUgQUxEUFNfTFRSX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXFx0XFx0QklUKDE0KVxcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlxcdFxcdFxcdEdFTk1BU0soMTUsIDE0KVxcbisjZGVmaW5lIExUUl9NU0dfRU5cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBSVEw4MTE2QUZfRlVOQ19QTV9DU1JcXHRcXHQweDgwXFxuKyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTFxcdDB4NDRcXG4rI2RlZmluZSBSVExfUE1fRDNIT1RcXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuIH07XFxuIFxcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xcbkBAIC03MjgsNiArNzQ5LDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSBydGxfc2ZwX21vZGUge1xcbitcXHRSVExfU0ZQX05PTkUsXFxuK1xcdFJUTF9TRlBfODE2OF9BRixcXG4rXFx0UlRMX1NGUF84MTI3X0FURixcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuQEAgLTczNiw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XFxuIFxcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XFxuK1xcdGVudW0gcnRsX3NmcF9tb2RlIHNmcF9tb2RlO1xcbiBcXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG5AQCAtNzUwLDYgKzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuIFxcdGludCBpcnE7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHNwZWVkO1xcbiBcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuQEAgLTc2Miw3ICs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dW5zaWduZWQgc3VwcG9ydHNfZ21paToxO1xcbiBcXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcXG4gXFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XFxuLVxcdGJvb2wgc2ZwX21vZGU6MTtcXG4gXFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XFxuIFxcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcXG4gXFx0c3RydWN0IHJ0bDgxNjlfdGNfb2Zmc2V0cyB0Y19vZmZzZXQ7XFxuQEAgLTc3NCw2ICs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuIFxcbiBcXHR1MzIgb2NwX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbitcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XFxuK1xcdHN0cnVjdCBpcnFfZG9tYWluICpwaHlfaXJxX2RvbWFpbjtcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBzYXZlZF9wYXVzZTtcXG4rXFx0Ym9vbCBqdW1ib19wYXVzZV9zYXZlZDtcXG4gfTtcXG4gXFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbkBAIC0xMTI4LDEwICsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXFxuIFxcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgXFx1MDAyNlxcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcXG4tXFx0XFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFxcdTAwMjYgMHhmZmZmO1xcbi1cXG4gXFx0UlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIFxcbiBcXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcXHUwMDI2cnRsX29jcF9ncGh5X2NvbmQsIDI1LCAxMCkgP1xcbkBAIC0xMjE3LDEyICsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4te1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuLVxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbkBAIC0xMjgzLDYgKzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxcbiBcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cXHUwMDNlb2NwX2Jhc2UgKyByZWcsIHZhbHVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRyZXR1cm4gdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpIFxcdTAwMjYgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT1cXG4rXFx0XFx0UlRMX1BLR19ERVRFQ1RfODExNkFGIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFxcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxcbitcXHRcXHRSVExfSU5UX0hXX0lEXzgxMTZBRjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXFxuIHtcXG4gXFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXFx1MDAzZW9jcF9iYXNlICsgcmVnKTtcXG5AQCAtMTU3OCw2ICsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XFxuK1xcbitcXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiAweGZmKSA9PSAweDA3KVxcbitcXHRcXHRcXHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcXG4rXFx0fSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkge1xcbitcXHRcXHRyZXR1cm4gUlRMX1NGUF84MTY4X0FGO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gUlRMX1NGUF9OT05FO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuQEAgLTE2NzMsMTYgKzE3MjAsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfcGNpX2NvbW1pdCh0cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVxcdTAwM2VwaHlkZXY7XFxuLVxcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcXG4gXFx0ICAgIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMTY5Miw3ICsxNzM3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcXG4gXFx0XFx0ICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE3MDAsNyArMTc0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTIwNzQsMTEgKzIxMTksMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdGNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2O1xcbiBcXG4gXFx0LyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuK1xcdGlmICh0cC1cXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG4gXFx0XFx0cmV0dXJuIGNpO1xcbiBcXG4gXFx0Zm9yICg7IGNpLVxcdTAwM2VzcGVlZDsgY2krKykge1xcbi1cXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQgPT0gY2ktXFx1MDAzZXNwZWVkKVxcbitcXHRcXHRpZiAodHAtXFx1MDAzZXNwZWVkID09IGNpLVxcdTAwM2VzcGVlZClcXG4gXFx0XFx0XFx0cmV0dXJuIGNpO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjM2LDcgKzIyODEsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQ7XFxuK1xcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVxcdTAwM2VzcGVlZDtcXG4gXFx0dW5zaWduZWQgaW50IHRpbWVyID0gdHAtXFx1MDAzZXR4X2xwaV90aW1lcjtcXG4gXFxuIFxcdGlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG5AQCAtMjI1NCw3ICsyMjk5LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcXG4gXFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhKTtcXG4rXFx0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI3MCw3ICsyMzE1LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcXG4gXFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXFx1MDAzZXBoeWRldiwgZGF0YSk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzAxLDEzICsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XFxuLVxcbi1cXHRwaHlfZ2V0X3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYsIFxcdTAwMjZ0eF9wYXVzZSwgXFx1MDAyNnJ4X3BhdXNlKTtcXG4gXFxuLVxcdGRhdGEtXFx1MDAzZWF1dG9uZWcgPSB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhdXRvbmVnO1xcbi1cXHRkYXRhLVxcdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XFxuLVxcdGRhdGEtXFx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcXG4rXFx0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzMTgsOSArMjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBFVEhfREFUQV9MRU4pXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHBoeV9zZXRfYXN5bV9wYXVzZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhLVxcdTAwM2VyeF9wYXVzZSwgZGF0YS1cXHUwMDNldHhfcGF1c2UpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzODYsMzQgKzI0MjQsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0bGUzMl90b19jcHUodHAtXFx1MDAzZWNvdW50ZXJzLVxcdTAwM2VyeF91bmtub3duX29wY29kZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVxcdTAwM2VwaHlkZXY7XFxuLVxcdGludCBkdXBsZXggPSBjbWQtXFx1MDAzZWJhc2UuZHVwbGV4O1xcbi1cXHRpbnQgc3BlZWQgPSBjbWQtXFx1MDAzZWJhc2Uuc3BlZWQ7XFxuLVxcbi1cXHRpZiAoIXRwLVxcdTAwM2VzZnBfbW9kZSlcXG4tXFx0XFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xcbi1cXG4tXFx0aWYgKGNtZC1cXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbit9XFxuIFxcbi1cXHRwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7XFxuLVxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4tXFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBkdXBsZXg7XFxuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuLVxcdHJ0bF9zZnBfaW5pdCh0cCk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh0cC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG4rfVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXFx1MDAzZXBoeWxpbmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuQEAgLTI0MzEsMTAgKzI0NjIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXFxuIFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbi1cXHQubndheV9yZXNldFxcdFxcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcXG4rXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHJ0bDgxNjlfbndheV9yZXNldCxcXG4gXFx0LmdldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcXG4gXFx0LnNldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfc2V0X2VlZSxcXG4tXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcXG4gXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfcmluZ3BhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxcbkBAIC0yNDk5LDkgKzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0dHAtXFx1MDAzZW9jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTtcXG4gXFxuIFxcdFxcdC8qIFBIWSBzb2Z0IHJlc2V0IG1heSBzdGlsbCBiZSBpbiBwcm9ncmVzcyAqL1xcbi1cXHRcXHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXFx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRcXHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXFx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjUzOCw2ICsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4rXFx0cGh5X2luaXRfaHcodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeV9yZXN1bWUodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVxcdTAwM2VwaHlkZXYsIHRwLVxcdTAwM2VtYWNfdmVyc2lvbik7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpIHtcXG5AQCAtMjU1Miw5ICsyNTg2LDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICAgIHRwLVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcXG4gXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcXG4gXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUpXFxuLVxcdFxcdHJ0bF9zZnBfaW5pdCh0cCk7XFxuLVxcbiBcXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXFxuIFxcdHBoeV9zcGVlZF91cCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFxuQEAgLTI2MjcsNiArMjY1OCw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0Ym9vbCBqdW1ibyA9IHRwLVxcdTAwM2VkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBwYXVzZTtcXG4gXFx0aW50IHJlYWRycSA9IDQwOTY7XFxuIFxcbiBcXHRpZiAoanVtYm8gXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfMTcgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMjY1OCwxMyArMjY5MCw0OCBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRpZiAocGNpX2lzX3BjaWUodHAtXFx1MDAzZXBjaV9kZXYpIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbiBcXHRcXHRwY2llX3NldF9yZWFkcnEodHAtXFx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XFxuIFxcbi1cXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXFxuIFxcdGlmIChqdW1ibykge1xcbi1cXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcXG4tXFx0XFx0XFx0XFx0ICAgdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbi1cXHRcXHRwaHlfc3RhcnRfYW5lZyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0XFx0aWYgKCF0cC1cXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXHRcXHRcXHRib29sIGFkdl9wYXVzZSwgYWR2X2FzeW07XFxuK1xcbitcXHRcXHRcXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZ0cC1cXHUwMDNlc2F2ZWRfcGF1c2UpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XFxuK1xcdFxcdFxcdFxcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0XFx0XFx0YWR2X3BhdXNlID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcXHUwMDI2Y21kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFBhdXNlKTtcXG4rXFx0XFx0XFx0XFx0YWR2X2FzeW0gID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcXHUwMDI2Y21kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEFzeW1fUGF1c2UpO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKGFkdl9wYXVzZSBcXHUwMDI2XFx1MDAyNiAhYWR2X2FzeW0pIHtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXFx1MDAyNlxcdTAwMjYgYWR2X2FzeW0pIHtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMDtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFxcdTAwMjZcXHUwMDI2IGFkdl9hc3ltKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDE7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGF1c2UuYXV0b25lZyA9IHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnO1xcbitcXHRcXHRwYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdHBhdXNlLnR4X3BhdXNlID0gMDtcXG4rXFxuK1xcdFxcdHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgXFx1MDAyNnBhdXNlKTtcXG4rXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQpIHtcXG4rXFx0XFx0cGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBcXHUwMDI2dHAtXFx1MDAzZXNhdmVkX3BhdXNlKTtcXG4rXFx0XFx0dHAtXFx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkID0gZmFsc2U7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjc4MCw3ICsyODQ3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XFxuIFxcbiBcXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcXG4tXFx0XFx0cGh5X3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWRldiwgZmFsc2UpO1xcbitcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWxpbmssIGZhbHNlKTtcXG4gXFx0XFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjgzMiw2ICsyODk5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cXHUwMDNlcGh5bGluaywgaWZyLCBjbWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcXG5AQCAtMzA5OCw4ICszMTc1LDIyIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4gXFx0XFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0zMTE5LDYgKzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiBcXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcXG4rXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuQEAgLTMxNTIsNiArMzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHRcXHRydGxfZW5hYmxlX2x0cih0cCk7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XFxuQEAgLTMxNjQsNiArMzI1Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuK1xcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zNjU3LDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXFx1MDAzZWRldmZuKTtcXG4rXFx0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXFx1MDAzZWJ1cztcXG4rXFx0dW5zaWduZWQgaW50IGRldmZuO1xcbitcXHRpbnQgZnVuYztcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXFx1MDAzYyA4OyBmdW5jKyspIHtcXG4rXFx0XFx0ZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XFxuK1xcbitcXHRcXHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICFQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkge1xcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7XFxuK1xcdFxcdFxcdHZhbCBcXHUwMDI2PSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0sgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcXG4rXFx0XFx0XFx0dmFsIHw9IChSVExfUE1fRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfUE1fQ1NSLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH4oKFBDSV9FWFBfTE5LU1RBX0xCTVMgfCBQQ0lfRVhQX0xOS1NUQV9MQUJTKSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfRVhQX0xOS0NUTF9BU1BNQztcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTCwgdmFsKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XFxuQEAgLTM2OTMsMTIgKzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBcXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xcbiBcXG4tXFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuLVxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KSB7XFxuK1xcdFxcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFxcdTAwMjYgMHgzZmZmO1xcbitcXHRcXHRpZiAocmdfc2F3X2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0dTE2IHN3X2NudF8xbXNfaW5pO1xcbiBcXG4tXFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4tXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdFxcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXFx1MDAyNiAweDBmZmY7XFxuK1xcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcXG5AQCAtMzcxMSw2ICszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4YzA5NCwgMHgwMDAwKTtcXG4gXFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDllLCAweDAwMDApO1xcbiBcXG4rXFx0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVxcdTAwM2VwY2lfZGV2KTtcXG4gXFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXFxuIFxcdHI4MTY5X2FwcGx5X2Zpcm13YXJlKHRwKTtcXG4gfVxcbkBAIC00MTQwLDExICs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdHBoeWxpbmtfc3RvcCh0cC1cXHUwMDNlcGh5bGluayk7XFxuK1xcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdHBoeWxpbmtfc3RhcnQodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAwMSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKVxcbitcXHRcXHRcXHRnZW5lcmljX2hhbmRsZV9kb21haW5faXJxKHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUwOTcsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxMTYsMTAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xcbiBcXHRiaXRtYXBfemVybyh0cC1cXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuIFxcbi1cXHRwaHlfc3RvcCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5bGlua19zdG9wKHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuIFxcdC8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUpXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcXG4gXFx0XFx0cnRsX3NmcF9yZXNldCh0cCk7XFxuIFxcbiBcXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XFxuQEAgLTUwMzIsMTQgKzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xcbiBcXG4gXFx0cGNpX3NldF9tYXN0ZXIodHAtXFx1MDAzZXBjaV9kZXYpO1xcbi1cXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFxuIFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuIFxcdGVuYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuIFxcdHJ0bF9yZXNldF93b3JrKHRwKTtcXG4gXFxuLVxcdHBoeV9zdGFydCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5bGlua19zdGFydCh0cC1cXHUwMDNlcGh5bGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbkBAIC01MDU1LDcgKzUxNjQsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGZyZWVfaXJxKHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4gXFxuLVxcdHBoeV9kaXNjb25uZWN0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4gXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG5AQCAtNTExMiw5ICs1MjIxLDExIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KSB7XFxuK1xcdFxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4rXFx0XFx0aWYgKHJldHZhbClcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbiBcXHRydGw4MTY5X2luaXRfY291bnRlcl9vZmZzZXRzKHRwKTtcXG5AQCAtNTE5MCw4ICs1MzAxLDExIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJ0bF9yYXJfc2V0KHRwLCB0cC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIFxcdF9fcnRsODE2OV9zZXRfd29sKHRwLCB0cC1cXHUwMDNlc2F2ZWRfd29sb3B0cyk7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZVR4RGVzY0FycmF5KVxcbitcXHRpZiAodHAtXFx1MDAzZVR4RGVzY0FycmF5KSB7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRcXHRydGw4MTY5X3VwKHRwKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaCh0cC1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTUyODgsNiArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cXHUwMDNlbGVkcyk7XFxuIFxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlsaW5rKVxcbitcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0aWYgKHRwLVxcdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XFxuQEAgLTUzMTAsNyArNTQyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzXFx0PSBydGw4MTY5X2ZpeF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gcnRsX3NldF9tYWNfYWRkcmVzcyxcXG4tXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbitcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcnRsODE2OV9pb2N0bCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gcnRsX3NldF9yeF9tb2RlLFxcbiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4gXFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcXHQ9IHJ0bDgxNjlfbmV0cG9sbCxcXG5AQCAtNTQyMywxMSArNTUzOSwzOSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NShzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cywgaW50IGFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bF9waHlfaXJxX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlycSxcXG4rXFx0XFx0XFx0ICAgaXJxX2h3X251bWJlcl90IGh3aXJxKVxcbit7XFxuK1xcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xcbitcXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXFx1MDAzZWhvc3RfZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBydGxfcGh5X2lycV9kb21haW5fb3BzID0ge1xcbitcXHQubWFwID0gcnRsX3BoeV9pcnFfbWFwLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcXG4rXFx0aW50IHZpcnE7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XFxuK1xcdFxcdHZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XFxuK1xcdFxcdGlmICh2aXJxKVxcbitcXHRcXHRcXHRpcnFfZGlzcG9zZV9tYXBwaW5nKHZpcnEpO1xcbitcXG4rXFx0XFx0aXJxX2RvbWFpbl9yZW1vdmUodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKTtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4gXFx0c3RydWN0IG1paV9idXMgKm5ld19idXM7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQsIHZpcnE7XFxuIFxcbiBcXHQvKiBPbiBzb21lIGJvYXJkcyB3aXRoIHRoaXMgY2hpcCB2ZXJzaW9uIHRoZSBCSU9TIGlzIGJ1Z2d5IGFuZCBtaXNzZXNcXG4gXFx0ICogdG8gcmVzZXQgdGhlIFBIWSBwYWdlIHNlbGVjdG9yLiBUaGlzIHJlc3VsdHMgaW4gdGhlIFBIWSBJRCByZWFkXFxuQEAgLTU0NDUsNyArNTU4OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0bmV3X2J1cy1cXHUwMDNlbmFtZSA9IFxcXCJyODE2OVxcXCI7XFxuIFxcdG5ld19idXMtXFx1MDAzZXByaXYgPSB0cDtcXG4gXFx0bmV3X2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4tXFx0bmV3X2J1cy1cXHUwMDNlaXJxWzBdID0gUEhZX01BQ19JTlRFUlJVUFQ7XFxuIFxcdG5ld19idXMtXFx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMSk7XFxuIFxcdHNucHJpbnRmKG5ld19idXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJyODE2OS0leC0leFxcXCIsXFxuIFxcdFxcdCBwY2lfZG9tYWluX25yKHBkZXYtXFx1MDAzZWJ1cyksIHBjaV9kZXZfaWQocGRldikpO1xcbkBAIC01NDU4LDYgKzU2MDEsMjEgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSByODE2OV9tZGlvX3dyaXRlX3JlZ19jNDU7XFxuIFxcdH1cXG4gXFxuK1xcdHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnRsX3BoeV9pcnFfZG9tYWluX29wcywgdHApO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0dmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC1cXHUwMDNlcGh5X2lycV9kb21haW4sIDApO1xcbitcXHRpZiAoIXZpcnEpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bmV3X2J1cy1cXHUwMDNlaXJxWzBdID0gdmlycTtcXG4rXFxuIFxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBuZXdfYnVzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtNTQ3NCwxNiArNTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cmV0dXJuIC1FVU5BVENIO1xcbiBcXHR9XFxuIFxcbi1cXHR0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuLVxcdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4tXFx0XFx0cGh5X3N1cHBvcnRfZWVlKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4tXFx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxcbi1cXHRcXHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cXHUwMDNlcGh5ZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XFxuLVxcbiBcXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXFxuIFxcdHBoeV9zdXNwZW5kKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG5AQCAtNTU5OSw2ICs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuK1xcdFxcdFxcdCAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gc3BlZWQ7XFxuK1xcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xcbitcXG4rXFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUilcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZ0cC1cXHUwMDNlcGNzO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cC1cXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XFxuK1xcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19BRERSX1JFRywgc2RzX3JlZyk7XFxuK1xcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xcbitcXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0cC1cXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcXG4rXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xcbitcXHRcXHR1MTYgc3RhdDE7XFxuK1xcbitcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdGlmICghKHN0YXQxIFxcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcXG4rXFx0XFx0XFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICsgTURJT19TVEFUMSk7XFxuK1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlbGluayA9ICEhKHN0YXQxIFxcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcXG4rXFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlbGluaylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTE2IGJtc3IsIGxwYTtcXG4rXFxuK1xcdFxcdGJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0JNU1IpO1xcbitcXHRcXHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0xQQSk7XFxuK1xcdFxcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHQgICAgICBib29sIHBlcm1pdF9wYXVzZV90b19tYWMpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcXG4rXFx0Lm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLFxcbitcXHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxcbitcXHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcXG4rXFx0Lm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLFxcbitcXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcXG4rXFx0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcXG4rXFxuK1xcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xcbitcXG4rXFx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnNcXG4rXFx0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2Vzbid0IHN1cHBvcnQgMi41RyBlZWVcXG4rXFx0ICovXFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNzApXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzUwMDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ18xMDAwMEZEO1xcbitcXG4rXFx0cmV0dXJuIGNhcHM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XFxuK1xcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcXG4rXFx0LnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsXFxuK1xcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxcbitcXHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwbDtcXG4rXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFxcdTAwMjZ0cC1cXHUwMDNlZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XFxuK1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2VzZnBfbW9kZSkge1xcbitcXHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxcbitcXHRcXHR0cC1cXHUwMDNlcGNzLm9wcyA9IFxcdTAwMjZyODE2OV9wY3Nfb3BzO1xcbitcXHRcXHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcXG4rXFx0XFx0ZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGlmICh0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSlcXG4rXFx0XFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxcbitcXHRcXHRcXHRwaHlfbW9kZSA9IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxcbitcXHRcXHRcXHRcXHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRwbCA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZ0cC1cXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXFx1MDAzZWZ3bm9kZSxcXG4rXFx0XFx0XFx0ICAgIHBoeV9tb2RlLCBcXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XFxuK1xcdGlmIChJU19FUlIocGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwbCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlcGh5bGluayA9IHBsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xcbkBAIC01NjY3LDYgKzYwMzYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0XFx0XFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcXG4gXFx0dHAtXFx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cXHUwMDNlbWFjX3ZlcnNpb247XFxuIFxcdHRwLVxcdTAwM2Vmd19uYW1lID0gY2hpcC1cXHUwMDNlZndfbmFtZTtcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4gXFxuIFxcdC8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nXFxuIFxcdCAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzLlxcbkBAIC01Njc5LDEyICs2MDQ5LDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdH1cXG4gXFx0dHAtXFx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcXG4gXFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4tXFx0XFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XFxuLVxcbi1cXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiAweGZmKSA9PSAweDA3KVxcbi1cXHRcXHRcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSB0cnVlO1xcbi1cXHR9XFxuK1xcdHRwLVxcdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xcbiBcXG4gXFx0dHAtXFx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcXG4gXFx0dHAtXFx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xcbkBAIC01Nzg4LDEzICs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcXG4gXFxuLVxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdHJjID0gcnRsX2luaXRfcGh5bGluayh0cCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcXG4rXFx0XFx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xcbi1cXHRpZiAocmMpXFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xcbiBcXHRcXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbkBAIC01ODE3LDcgKzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4rXFx0aWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZXNmcF9tb2RlICE9IFJUTF9TRlBfODEyN19BVEYpXFxuIFxcdFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NDMuMzI3MTQxMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE0MDAyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bDgxNjlfcGNzX2NvbmZpZ1wiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGxfbWFjX2Rpc2FibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X2dldF9scGlfY2Fwc1wiLFxuICAgIFwicnRsX3BoeV9pcnFfbWFwXCIsXG4gICAgXCJydGxfcGh5X2lycV9jbGVhbnVwXCIsXG4gICAgXCJydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25cIixcbiAgICBcInJ0bF9nZXRfc2ZwX21vZGVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1YmVhZDlmMjk1NmQ3OTgwYTI2NWRlMWRkMjgxOGJhNzQ0NGVlN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjQ5YWM3MjczNDIyNWY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbkBAIC04OCw2ICs4OCw3IEBAIGNvbmZpZyBSODE2OVxuIFx0c2VsZWN0IENSQzMyXG4gXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbitcdHNlbGVjdCBQSFlMSU5LXG4gXHRoZWxwXG4gXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXG4gXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjEsMTEgKzIxLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuQEAgLTk2LDYgKzk5LDE5IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbisjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUdcdDB4RUIxMFxuKyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4RUIwRVxuKyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1x0MHhFQjE0XG4rI2RlZmluZSBTRFNfQ01EX1JFQURcdFx0MHgwMDAxXG4rI2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4rI2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXHQweDAwODBcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXHRcdDB4ZGMwMFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcdDB4MDAzMFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRFx0XHQweGQwMDZcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlx0MHgwMDAwXG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcbiBcdHUzMiBtYXNrO1xuIFx0dTMyIHZhbDtcbkBAIC0zMzQsMTEgKzM1MCwxNiBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xuIFx0QUxEUFNfTFRSXHQ9IDB4ZTBhMixcbiBcdExUUl9PQkZGX0xPQ0tcdD0gMHhlMDMyLFxuIFx0TFRSX1NOT09QXHQ9IDB4ZTAzNCxcbitcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbisjZGVmaW5lIExUUl9NU0dfRU5cdFx0XHRCSVQoMClcbisjZGVmaW5lIFJUTDgxMTZBRl9GVU5DX1BNX0NTUlx0XHQweDgwXG4rI2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMXHQweDQ0XG4rI2RlZmluZSBSVExfUE1fRDNIT1RcdFx0XHRHRU5NQVNLKDEsIDApXG4gfTtcbiBcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xuQEAgLTcyOCw2ICs3NDksMTIgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSBydGxfc2ZwX21vZGUge1xuK1x0UlRMX1NGUF9OT05FLFxuK1x0UlRMX1NGUF84MTY4X0FGLFxuK1x0UlRMX1NGUF84MTI3X0FURixcbit9O1xuK1xuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xuQEAgLTczNiw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4rXHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcbiBcdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG5AQCAtNzUwLDYgKzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dTMyIGlycV9tYXNrO1xuIFx0aW50IGlycTtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcbiBcdHVuc2lnbmVkIGFzcG1fbWFuYWdlYWJsZToxO1xuIFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XG4tXHRib29sIHNmcF9tb2RlOjE7XG4gXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcbiBcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcbiBcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xuQEAgLTc3NCw2ICs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuK1x0c3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluO1xuK1x0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBzYXZlZF9wYXVzZTtcbitcdGJvb2wganVtYm9fcGF1c2Vfc2F2ZWQ7XG4gfTtcbiBcbiB0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcbkBAIC0xMTI4LDEwICsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgKyAyICogTUlJX1BIWVNJRDIpKVxuLVx0XHRyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgXHUwMDI2IDB4ZmZmZjtcbi1cbiBcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXHUwMDNjXHUwMDNjIDE1KTtcbiBcbiBcdHJldHVybiBydGxfbG9vcF93YWl0X2hpZ2godHAsIFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cbkBAIC0xMjE3LDEyICsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbi17XG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbi1cdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcnRsX3NmcF9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbkBAIC0xMjgzLDYgKzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgKyByZWcsIHZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpIFx1MDAyNiBSVExfUEtHX0RFVEVDVF9NQVNLKSA9PVxuK1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4rXHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XG4rXHRcdFJUTF9JTlRfSFdfSURfODExNkFGO1xuK31cbitcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcbiB7XG4gXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZyk7XG5AQCAtMTU3OCw2ICsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbitcdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xuK1xuK1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4rXHRcdFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XG4rXHR9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7XG4rXHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjczLDE2ICsxNzIwLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4tXHRcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMCkge1xuK1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyArMTczNyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xuIFx0fSBlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XG4gXHRcdCAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTcwMCw3ICsxNzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuK1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTIwNzQsMTEgKzIxMTksMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdGNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2O1xuIFxuIFx0LyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi9cbi1cdGlmICh0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcbitcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpKyspIHtcbi1cdFx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBjaS1cdTAwM2VzcGVlZClcbitcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgKzIyODEsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZDtcbitcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXNwZWVkO1xuIFx0dW5zaWduZWQgaW50IHRpbWVyID0gdHAtXHUwMDNldHhfbHBpX3RpbWVyO1xuIFxuIFx0aWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuQEAgLTIyNTQsNyArMjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4rXHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3MCw3ICsyMzE1LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4rXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgKzIzNDYsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xuLVxuLVx0cGh5X2dldF9wYXVzZSh0cC1cdTAwM2VwaHlkZXYsIFx1MDAyNnR4X3BhdXNlLCBcdTAwMjZyeF9wYXVzZSk7XG4gXG4tXHRkYXRhLVx1MDAzZWF1dG9uZWcgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYXV0b25lZztcbi1cdGRhdGEtXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xuLVx0ZGF0YS1cdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XG4rXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMTgsOSArMjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzg2LDM0ICsyNDI0LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGxlMzJfdG9fY3B1KHRwLVx1MDAzZWNvdW50ZXJzLVx1MDAzZXJ4X3Vua25vd25fb3Bjb2RlKTtcbiB9XG4gXG4tc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4rc3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRpbnQgZHVwbGV4ID0gY21kLVx1MDAzZWJhc2UuZHVwbGV4O1xuLVx0aW50IHNwZWVkID0gY21kLVx1MDAzZWJhc2Uuc3BlZWQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XG4tXG4tXHRpZiAoY21kLVx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXHUwMDNlcGh5bGluaywgY21kKTtcbit9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuLVx0cnRsX3NmcF9pbml0KHRwKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rc3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuQEAgLTI0MzEsMTAgKzI0NjIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuIFx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbitcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG5AQCAtMjQ5OSw5ICsyNTMwLDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHRwLVx1MDAzZW9jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTtcbiBcbiBcdFx0LyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovXG4tXHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4tXHRcdFx0XHQgICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4tXHRcdFx0XHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbitcdFx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0XHQgICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgKzI1NzAsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuK1x0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSArMjU4Niw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcbiBcdFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRydGxfc2ZwX2luaXQodHApO1xuLVxuIFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xuIFx0cGh5X3NwZWVkX3VwKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtMjYyNyw2ICsyNjU4LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGJvb2wganVtYm8gPSB0cC1cdTAwM2VkZXYtXHUwMDNlbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4rXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHBhdXNlO1xuIFx0aW50IHJlYWRycSA9IDQwOTY7XG4gXG4gXHRpZiAoanVtYm8gXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xNyBcdTAwMjZcdTAwMjZcbkBAIC0yNjU4LDEzICsyNjkwLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRpZiAocGNpX2lzX3BjaWUodHAtXHUwMDNlcGNpX2RldikgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4gXHRcdHBjaWVfc2V0X3JlYWRycSh0cC1cdTAwM2VwY2lfZGV2LCByZWFkcnEpO1xuIFxuLVx0LyogQ2hpcCBkb2Vzbid0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqL1xuIFx0aWYgKGp1bWJvKSB7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRwaHlfc3RhcnRfYW5lZyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4rXHRcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0XHRcdGJvb2wgYWR2X3BhdXNlLCBhZHZfYXN5bTtcbitcbitcdFx0XHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XG4rXHRcdFx0XHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZjbWQpO1xuK1x0XHRcdFx0YWR2X3BhdXNlID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcdTAwMjZjbWQsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGFkdmVydGlzaW5nLFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0ICBQYXVzZSk7XG4rXHRcdFx0XHRhZHZfYXN5bSAgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKFx1MDAyNmNtZCxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHQgIEFzeW1fUGF1c2UpO1xuK1xuK1x0XHRcdFx0aWYgKGFkdl9wYXVzZSBcdTAwMjZcdTAwMjYgIWFkdl9hc3ltKSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAxO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXHUwMDI2XHUwMDI2IGFkdl9hc3ltKSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFx1MDAyNlx1MDAyNiBhZHZfYXN5bSkge1xuK1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMDtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbitcdFx0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0cGF1c2UuYXV0b25lZyA9IHRwLVx1MDAzZXNhdmVkX3BhdXNlLmF1dG9uZWc7XG4rXHRcdHBhdXNlLnJ4X3BhdXNlID0gMDtcbitcdFx0cGF1c2UudHhfcGF1c2UgPSAwO1xuK1xuK1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2cGF1c2UpO1xuK1x0fSBlbHNlIGlmICh0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCkge1xuK1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuK1x0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IGZhbHNlO1xuIFx0fVxuIH1cbiBcbkBAIC0yNzgwLDcgKzI4NDcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI4OTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgKzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiBcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcbitcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBTRU5EX0xUUl9NU0csIDB4MDAwMCwgTFRSX01TR19FTik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuQEAgLTMxNTIsNiArMzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdC8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqL1xuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XG5AQCAtMzE2NCw2ICszMjU3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9IGVsc2Uge1xuIFx0XHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcbitcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiArMzc1MSwzNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXHUwMDNlZGV2Zm4pO1xuK1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuK1x0dW5zaWduZWQgaW50IGRldmZuO1xuK1x0aW50IGZ1bmM7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHZhbDtcbitcbitcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXHUwMDNjIDg7IGZ1bmMrKykge1xuK1x0XHRkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cmV0ID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19QTV9DU1IsIFx1MDAyNnZhbCk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbitcdFx0XHR2YWwgXHUwMDI2PSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0sgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcbitcdFx0XHR2YWwgfD0gKFJUTF9QTV9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgdmFsKTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSB+KChQQ0lfRVhQX0xOS1NUQV9MQk1TIHwgUENJX0VYUF9MTktTVEFfTEFCUykgXHUwMDNjXHUwMDNjIDE2KTtcbitcdFx0XHR2YWwgfD0gUENJX0VYUF9MTktDVExfQVNQTUM7XG4rXHRcdFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTCwgdmFsKTtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdGF0aWMgY29uc3Qgc3RydWN0IGVwaHlfaW5mbyBlX2luZm9fODExN1tdID0ge1xuQEAgLTM2OTMsMTIgKzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xuIFxuLVx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuLVx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbi1cdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuK1x0XHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4rXHRcdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4rXHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuK1x0XHRcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXHUwMDI2IDB4MGZmZjtcbitcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTM3MTEsNiArMzgzNiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDk0LCAweDAwMDApO1xuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDllLCAweDAwMDApO1xuIFxuK1x0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVx1MDAzZXBjaV9kZXYpO1xuIFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXG4gXHRyODE2OV9hcHBseV9maXJtd2FyZSh0cCk7XG4gfVxuQEAgLTQxNDAsMTEgKzQyNjYsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdFx0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuK1xuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuIFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcbiBcbitcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg2OSw4ICs1MDAxLDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZylcbi1cdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpIHtcbitcdFx0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKVxuK1x0XHRcdGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEodHAtXHUwMDNlcGh5X2lycV9kb21haW4sIDApO1xuK1x0XHRlbHNlIGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbitcdFx0XHRwaHlsaW5rX21hY19jaGFuZ2UodHAtXHUwMDNlcGh5bGluayxcbitcdFx0XHRcdFx0ICAgISEoUlRMX1I4KHRwLCBQSFlzdGF0dXMpIFx1MDAyNiBMaW5rU3RhdHVzKSk7XG4rXHR9XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuIFx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbkBAIC00OTMwLDkgKzUwNjcsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIHtcbi1cdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXG5AQCAtNDk2Myw0MCArNTA5NywxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4tXG4tXHRpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkge1xuLVx0XHRydGxfbGlua19jaGdfcGF0Y2godHApO1xuLVx0XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWVuYWJsZV90eF9scGkpO1xuLVx0XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHBtX3J1bnRpbWVfaWRsZShkKTtcbi1cdH1cbi1cbi1cdHBoeV9wcmludF9zdGF0dXModHAtXHUwMDNlcGh5ZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbi1cdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cbi1cdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cdTAwM2VkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLFxuLVx0XHRcdFx0IHBoeV9tb2RlKTtcbi1cdGlmIChyZXQpXG4rXHRyZXQgPSBwaHlsaW5rX2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmssIHRwLVx1MDAzZXBoeWRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBjb25uZWN0IHBoeVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbi1cdFx0cGh5X3NldF9tYXhfc3BlZWQocGh5ZGV2LCBTUEVFRF8xMDApO1xuLVxuLVx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MDA3LDEwICs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4rXHRwaHlsaW5rX3N0b3AodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4gXHRcdHJ0bF9zZnBfcmVzZXQodHApO1xuIFxuIFx0cnRsODE2OV91cGRhdGVfY291bnRlcnModHApO1xuQEAgLTUwMzIsMTQgKzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbitcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTUwNTUsNyArNTE2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4gXG4tXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiw5ICs1MjIxLDExIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbi1cdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcbi1cdGlmIChyZXR2YWwpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuK1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4rXHRcdGlmIChyZXR2YWwpXG4rXHRcdFx0Z290byBlcnJfZnJlZV9pcnE7XG4rXHR9XG4gXG4gXHRydGw4MTY5X3VwKHRwKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuQEAgLTUxOTAsOCArNTMwMSwxMSBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRsX3Jhcl9zZXQodHAsIHRwLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRfX3J0bDgxNjlfc2V0X3dvbCh0cCwgdHAtXHUwMDNlc2F2ZWRfd29sb3B0cyk7XG4gXG4tXHRpZiAodHAtXHUwMDNlVHhEZXNjQXJyYXkpXG4rXHRpZiAodHAtXHUwMDNlVHhEZXNjQXJyYXkpIHtcbitcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJ0bDgxNjlfdXAodHApO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0fVxuIFxuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaCh0cC1cdTAwM2VkZXYpO1xuIFxuQEAgLTUyODgsNiArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4rXHRpZiAodHAtXHUwMDNlcGh5bGluaylcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgKzU0MjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuK1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQyMywxMSArNTUzOSwzOSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NShzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cywgaW50IGFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydGxfcGh5X2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsXG4rXHRcdFx0ICAgaXJxX2h3X251bWJlcl90IGh3aXJxKVxuK3tcbitcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG4rXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIHJ0bF9waHlfaXJxX2RvbWFpbl9vcHMgPSB7XG4rXHQubWFwID0gcnRsX3BoeV9pcnFfbWFwLFxuK307XG4rXG4rc3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcbitcdGludCB2aXJxO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XG4rXHRcdHZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluLCAwKTtcbitcdFx0aWYgKHZpcnEpXG4rXHRcdFx0aXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxKTtcbitcbitcdFx0aXJxX2RvbWFpbl9yZW1vdmUodHAtXHUwMDNlcGh5X2lycV9kb21haW4pO1xuK1x0XHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCB2aXJxO1xuIFxuIFx0LyogT24gc29tZSBib2FyZHMgd2l0aCB0aGlzIGNoaXAgdmVyc2lvbiB0aGUgQklPUyBpcyBidWdneSBhbmQgbWlzc2VzXG4gXHQgKiB0byByZXNldCB0aGUgUEhZIHBhZ2Ugc2VsZWN0b3IuIFRoaXMgcmVzdWx0cyBpbiB0aGUgUEhZIElEIHJlYWRcbkBAIC01NDQ1LDcgKzU1ODksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXdfYnVzLVx1MDAzZW5hbWUgPSBcInI4MTY5XCI7XG4gXHRuZXdfYnVzLVx1MDAzZXByaXYgPSB0cDtcbiBcdG5ld19idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tXHRuZXdfYnVzLVx1MDAzZWlycVswXSA9IFBIWV9NQUNfSU5URVJSVVBUO1xuIFx0bmV3X2J1cy1cdTAwM2VwaHlfbWFzayA9IEdFTk1BU0soMzEsIDEpO1xuIFx0c25wcmludGYobmV3X2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcInI4MTY5LSV4LSV4XCIsXG4gXHRcdCBwY2lfZG9tYWluX25yKHBkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChwZGV2KSk7XG5AQCAtNTQ1OCw2ICs1NjAxLDIxIEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSByODE2OV9tZGlvX3dyaXRlX3JlZ19jNDU7XG4gXHR9XG4gXG4rXHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLFxuK1x0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0bF9waHlfaXJxX2RvbWFpbl9vcHMsIHRwKTtcbitcdGlmICghdHAtXHUwMDNlcGh5X2lycV9kb21haW4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBydGxfcGh5X2lycV9jbGVhbnVwLCB0cCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0dmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4rXHRpZiAoIXZpcnEpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSB2aXJxO1xuK1xuIFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBuZXdfYnVzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtNTQ3NCwxNiArNTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuK1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4rXG4rXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4rXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4rXHRcdHJldHVybiBcdTAwMjZ0cC1cdTAwM2VwY3M7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbit9XG4rXG4rc3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTE2IHZhbCA9IDA7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4rXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHR1MTYgc3RhdDE7XG4rXG4rXHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xuK1xuK1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbitcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuK1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbitcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbitcdH0gZWxzZSB7XG4rXHRcdHUxNiBibXNyLCBscGE7XG4rXG4rXHRcdGJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0JNU1IpO1xuK1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0xQQSk7XG4rXHRcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbitcbitcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuK1x0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuK3tcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbitcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcbitcdC5tYWNfY29uZmlnID0gcnRsX21hY19jb25maWcsXG4rXHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbitcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcbitcdC5tYWNfZGlzYWJsZV90eF9scGkgPSBydGxfbWFjX2Rpc2FibGVfdHhfbHBpLFxuK1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcbitcbitcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4rXG4rXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuK1x0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2Vzbid0IHN1cHBvcnQgMi41RyBlZWVcbitcdCAqL1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcbitcdFx0Y2FwcyB8PSBNQUNfMjUwMEZEO1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbitcdFx0Y2FwcyB8PSBNQUNfNTAwMEZEO1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4rXG4rXHRyZXR1cm4gY2Fwcztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgcjgxNjlfcGNzX29wcyA9IHtcbitcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbitcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxuK1x0LnBjc19jb25maWcgPSBydGw4MTY5X3Bjc19jb25maWcsXG4rXHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuK307XG4rXG4rc3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHN0cnVjdCBwaHlsaW5rICpwbDtcbitcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbitcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnRwLVx1MDAzZWRldi1cdTAwM2VkZXY7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZXNmcF9tb2RlKSB7XG4rXHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbitcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuK1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbitcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XG4rXHRcdGVsc2VcbitcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbitcdFx0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbitcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuK1x0XHRcdCAgICBwaHlfbW9kZSwgXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XG4rXHRpZiAoSVNfRVJSKHBsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiArNjAzNiw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcbiBcdHRwLVx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cdTAwM2VtYWNfdmVyc2lvbjtcbiBcdHRwLVx1MDAzZWZ3X25hbWUgPSBjaGlwLVx1MDAzZWZ3X25hbWU7XG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiArNjA0OSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbitcdHRwLVx1MDAzZXNmcF9tb2RlID0gcnRsX2dldF9zZnBfbW9kZSh0cCk7XG4gXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbkBAIC01Nzg4LDEzICs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XG4rXHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4rXHRpZiAocmMpIHtcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDcgKzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuLVx0aWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpXG4rXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2ZwX21vZGUgIT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjQzLjMyNzE0NDAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1OTExNzI4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIGByODE2OWAgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBmb3IgdGhlIGByODE2OWAgZHJpdmVyLCB3aGljaCBpcyBhIFJlYWx0ZWsgRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBzd2l0Y2hpbmcgaXQgdG8gdXNlIHRoZSBgcGh5bGlua2AgQVBJLiBJdCdzIGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbnMgYW5kIHN1cHBvcnRpbmcgZGlmZmVyZW50IFNGUCBtb2RlcywgYmFzaWNhbGx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBvdmVyaGF1bC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHRlc3QgdGhpcyByZWxpYWJseT8gU3BlY2lmaWNhbGx5LCBjYW4gd2UgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuU2luY2UgaXQncyBhIFBDSSBkcml2ZXIsIHRoYXQgbWVhbnMgaXQncyBoYXJkd2FyZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluIGEgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgZW11bGF0ZSB0aGlzIG9yIGluamVjdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJ1dCBpcyBpdCBkZWVwIGVub3VnaCB0byByZWFsbHkgaGl0IHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvcj9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIFFFTVUgaGFzIG5ldHdvcmsgZGV2aWNlcywgbWF5YmUgaXQgaGFzIGBydGw4MTY5YCFcIiAgSSBpbW1lZGlhdGVseSBzdGFydGVkIGNoZWNraW5nLiBJIHJlbWVtYmVyZWQgaXQgaGFkIHRoaW5ncyBsaWtlIHRoZSBgcnRsODEzOWAgKDEwLzEwMCkgYW5kIGBlMTAwMGAsIGV0Yy4gVGhlbiwgSSBoYWQgdG8gc3RvcCBhbmQgY2xhcmlmeSwgZG9lcyBRRU1VIHJlYWxseSBoYXZlIGBydGw4MTY5YD8gSSBsb29rZWQgYW5kIGNvdWxkbid0IGZpbmQgYSBkaXJlY3QgYHJ0bDgxNjlgIGluIFFFTVUncyBkZXZpY2UgbGlzdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBzdXBwb3J0LiBJdCBzb3VuZHMgbGlrZSBpZiBRRU1VICpkaWQqIGVtdWxhdGUgaXQsIGl0IHdvdWxkIGJlIGVhc3ksIGJ1dCBpZiBub3QsIGlzIHRoaXMgY29kZSBwYXRoIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGtub3cgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LCBvciBpZiBpdCdzIGxpa2UgYSBVU0IgZ2FkZ2V0IG9yIGEgc29mdHdhcmUgZGV2aWNlLlxuXG5JIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgUENJIElEcyBhbmQgd2hldGhlciB0aGV5IG1hdGNoZWQgYW55dGhpbmcgaW4gUUVNVSdzIGVtdWxhdGlvbi4gRXZlbiBpZiBRRU1VIGRvZXNuJ3QgaGF2ZSBpdCBkaXJlY3RseSwgc3l6a2FsbGVyJ3MgYHZmaW9gIG9yIGdlbmVyaWMgUENJIGZ1enppbmcgKm1pZ2h0KiByZWFjaCBpdCBpZiB3ZSBjYW4gZ2V0IHRoZSBkZXZpY2UgaW5zdGFudGlhdGVkIHNvbWVob3cuIEJ1dCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcnVsZXMsIGl0IHNvdW5kcyBsaWtlIGlmIGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBpdCwgaXQgbWlnaHQgYmUgdW5yZWFjaGFibGUuXG5cbkkgd2FzIHRoaW5raW5nIEkgY2FuIHByb2JlIGZvciBpdCBpbiBRRU1VLiBUaGVuLCBJIGhhZCB0aGUgaWRlYSB0byB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBQQ0kgSUQgZm9yIGByODE2OWAgdGhhdCBtYXRjaGVzIGEga25vd24gUUVNVSBkZXZpY2UsIG9yIGlmIHRoZXJlJ3MgYSB3YXkgdG8gdHJpZ2dlciBpdC4gVGhlbiBJIHRob3VnaHQgYWJvdXQgYHN5el9rdm1fc2V0dXBfY3B1YCwgZXRjLiB0byBzZWUgaWYgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLCBidXQgSSBuZWVkIHRvIGtub3cgaWYgUUVNVSBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlLlxuXG5MZXQgbWUgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIGByODE2OWAgUENJIElEcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NTYuOTE4MzIwMzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVEw4MTY5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz04ND1jb25maWcgUjgxNjlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05NC1cXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjk1OlxcdCAgUlRMODE2OSBHaWdhYml0IEV0aGVybmV0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTk2LVxcdCAgUlRMODE2OCBHaWdhYml0IEV0aGVybmV0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIyMi1cXHQvKiA4MTEwIGZhbWlseS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMjM6XFx0eyAweGZjOCwgMHg5ODAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wNiwgXFxcIlJUTDgxNjlzYy84MTEwc2NcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjI0OlxcdHsgMHhmYzgsIDB4MTgwLFxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFxcXCJSVEw4MTY5c2MvODExMHNjXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNTpcXHR7IDB4ZmM4LCAweDEwMCxcXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcXFwiUlRMODE2OXNiLzgxMTBzYlxcXCIgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMjYtXFx0eyAweGZjOCwgMHgwNDAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wMywgXFxcIlJUTDgxMTBzXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNzpcXHR7IDB4ZmM4LCAweDAwOCxcXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcXFwiUlRMODE2OXNcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NTY5MD1zdGF0aWMgaW50IHJ0bF9qdW1ib19tYXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01Njk2LVxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTY5NzpcXHQvKiBSVEw4MTY5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTY5OC1cXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMDIgLi4uIFJUTF9HSUdBX01BQ19WRVJfMDY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjU3LjAzNTIxNTc4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODUzOTM1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBgcnRsODE2OWAgRHJpdmVyIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBgcnRsODE2OWAgZHJpdmVyIHdpdGggdGhlIGV4aXN0aW5nIHN5emthbGxlciBzZXR1cCwgZ2l2ZW4gdGhhdCBpdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBwcm9tcHQgaXMgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzPyBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIHNvbWUga2luZCBvZiB2aXJ0dWFsIGhhcmR3YXJlIGZvciBgcnRsODE2OWA/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzLiBCdXQsIGluaXRpYWxseSwgSSB3YXNuJ3Qgc3VyZSBpZiBpdCBmdWxseSBlbXVsYXRlZCB0aGUgTU1JTy9QSU8gc3BhY2Ug4oCTIHNlZW1zIGxpa2UgaXQgY291bGQganVzdCByZXR1cm4gcmFuZG9tIGRhdGEgZm9yIHJlYWRzLlxuXG5XYWl0LCB0aGF0J3Mgd3JvbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBQQ0kgZHJpdmVycyEgSXQgZW11bGF0ZXMgdGhlIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8vUElPIHJlYWRzIGFuZCBjYW4gdXNlIHNwZWNpZmljIGZ1enppbmcgdGVjaG5pcXVlcyBmb3IgcmVhZHMvd3JpdGVzLiBIbW0sIGJ1dCB3aWxsIHRoaXMgZnV6emluZyBhY3R1YWxseSBkaWcgZGVlcCBlbm91Z2ggaW50byBgcjgxNjlfbWFpbi5jYD8gR29vZCBxdWVzdGlvbi4gSSBrbm93IHRoYXQgYHZmaW9gIG9yIGdlbmVyaWMgYHBjaWAgZnV6emluZyBpbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUgUENJIGRyaXZlcnMuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHNwZWNpZmljIHBhdGNoIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyBhIG1ham9yIHJlZmFjdG9yaW5nIHRvIHVzZSBgcGh5bGlua2AuIElmIHRoZSBQQ0kgZHJpdmVycyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGZ1enppbmcsIHRoZW4geWVzLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfUjgxNjlgIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIFVzdWFsbHksIHN5emthbGxlciBlbmFibGVzIGEgbG90IG9mIG5ldHdvcmsgZHJpdmVycyBmb3IgdGhpcyBleGFjdCB0eXBlIG9mIFBDSSBmdXp6aW5nLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgc2V0dGluZ3MuIFllcCwgYENPTkZJR19SODE2OWAgaXMgdGhlIG1haW4gb25lLlxuXG5Pa2F5LCBiYWNrIHRvIHRoZSBwcm9tcHQuIEl0IHNheXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgTm93LCBpcyB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY29uc2lkZXJlZCBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCI/IEkgdGhpbmsgaXQgaXMsIGJlY2F1c2Ugc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2dlbl9wY2lgIGFuZCBgc3l6X3BjaV9kZXZpY2VgIHdoaWNoIGVmZmVjdGl2ZWx5IGVtdWxhdGUgUENJIGRldmljZXMgYW5kIGZ1enogdGhlaXIgZHJpdmVycy5cblxuSWYgdGhpcyBpcyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBhbmQgdGhlcmUncyBubyBRRU1VIGRldmljZSwgY291bGQgaXQgZXZlbiBiZSByZWFjaGVkPyBTeXprYWxsZXIncyBgc3l6X2dlbl9wY2lgIG9yIGBzeXpfcGNpX2RldmljZWAgY2FuIHRyaWdnZXIgdGhlIGBwcm9iZWAgZnVuY3Rpb24gb2YgYW55IFBDSSBkcml2ZXIgc2ltcGx5IGJ5IHByb3ZpZGluZyB0aGUgbWF0Y2hpbmcgUENJIElELiBUaGVuIHRoZSBkcml2ZXIgd2lsbCBtYXAgdGhlIE1NSU8gcmVnaW9ucywgYW5kIHdoZW4gdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWFkIGZyb20gdGhlc2UgcmVnaW9ucywgdGhlIGZ1enplciBwcm92aWRlcyB0aGUgcmFuZG9tIGRhdGEuIFRoaXMsIGluIGVzc2VuY2UsIGxldHMgdXMgZnV6eiB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdCBoYW5kbGluZy4gQnV0IGFnYWluLCBpcyBpdCB0cnVseSBcImltcG9zc2libGUgdG8gcmVhY2hcIj9cblxuTGV0J3Mgc2VlIGlmIGByODE2OWAgaXMgY29tbW9ubHkgZnV6emVkLiBBY3R1YWxseSwgSSByZW1lbWJlciBtYW55IGhhcmR3YXJlIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgXCJ1bnJlYWNoYWJsZVwiIGlmIHRoZXkgcmVxdWlyZSAqYWN0dWFsKiBoYXJkd2FyZSBhbmQgdGhlcmUncyBubyBlbXVsYXRvci4gQnV0IHRoaXMgUENJIGZ1enplciAqaXMqIGFuIGVtdWxhdG9yLCBvZiBzb3J0cy4gTm93LCBsb29raW5nIGF0IHRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQgYWdhaW4uLi4gaXQncyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBldmVuICpzb2Z0d2FyZSotZW11bGF0ZWQgaGFyZHdhcmUuIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBQQ0kgZ2FkZ2V0LiBTbywgeWVzLCBpdCBjb3VudHMhXG5cbk9rYXksIEknbGwgYXNzdW1lIHRoYXQgaXQgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBgcGh5bGlua2AgaW50ZWdyYXRpb24uIE15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGluY2x1ZGU6IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX3BoeWxpbmtfbWFjX29wc2AsIGFuZCBgcjgxNjlfcGNzX29wc2AuIEkgc2hvdWxkIHRyeSB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyB0aGF0IHdlcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjM0LCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjEwLjg4OTE1Njg3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU3NjgyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IHBoeWxpbmtfcGNzIFxcXFwqKSBydGxbYS16QS1aMC05X10qX3Bjc19bYS16QS1aMC05X10qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU3ODk9c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4MDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgwMzpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgwNC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4MzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgzMjpzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMy1cXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODQ1OnN0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODQ2LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODUxOnN0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjExLjAyNDkzMzMwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTE3Mjg4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBhdGNoIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gTGV0J3MgcHVsbCB1cCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBhZGRlZC4gQWxyaWdodCwgaGVyZSdzIHRoZSBsaXN0OiBgcnRsX2luaXRfcGh5bGlua2AsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAsIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYCwgYHJ0bF9waHlfaXJxX21hcGAsIGBydGxfcGh5X2lycV9jbGVhbnVwYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X253YXlfcmVzZXRgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYC4gVGhhdCdzIHF1aXRlIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY2hhbmdlcy4gSW1tZWRpYXRlbHksIHRoZSBpbmNsdXNpb24gb2YgYHBoeWxpbmtgIGZ1bmN0aW9ucyBqdW1wcyBvdXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgaW50ZWdyYXRlcyBpbnRvIHRoZSBleGlzdGluZyBkcml2ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUjgxNjlgIGlzIHN0aWxsIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGlzLiBCdXQgd2FpdC4uLiBkaWRuJ3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IGBQSFlMSU5LYCBiZWluZyBzZWxlY3RlZCBieSBgUjgxNjlgIG5vdz8gUmlnaHQuIExldCdzIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUjgxNjkgZHJpdmVyLCB3aGljaCBzaG91bGQgYmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBoZXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgcGF0Y2ggaW1wYWN0cyBvdGhlciBzeXN0ZW1zIG9yIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjE4LjAxNjY2NjIxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ0MTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUjgxNjlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg1LVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMzpjb25maWcgUjgxNjlfTEVEU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODoxOC4xMDIxMjMzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzAwNjY1Nzg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgUjgxNjkgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlJ3JlIGxvb2tpbmcgYXQgZnV6emluZyB0aGUgYFI4MTY5YCBkcml2ZXIsIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGltcG9ydGFudCBiaXRzLiBGaXJzdCwgYFI4MTY5YCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCdzIG9idmlvdXMuIE5vdywgSSBuZWVkIHRvIGNoYXJ0IGEgY291cnNlIGZvciBvdXIgZnV6emluZyB0YXJnZXRzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQgaXMgY2FsbGVkIGZyb20gYHJ0bF9pbml0X29uZWAsIHdoaWNoIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCwgYXMgbG9uZyBhcyB3ZSBjYW4gcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEFuZCB5ZXMsIGBydGxfaW5pdF9vbmVgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBQQ0kgZnV6emluZy5cblxuTm93LCBsZXQncyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gSSB0aGluayB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2lsbCBiZTpcblxuKiAgIGBydGxfaW5pdF9waHlsaW5rYFxuKiAgIGBydGxfbWFjX2xpbmtfZG93bmBcbiogICBgcnRsX21hY19saW5rX3VwYFxuKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgXG4qICAgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWBcbiogICBgcnRsODE2OV9wY3NfY29uZmlnYFxuKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgXG4qICAgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgXG4qICAgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYFxuKiAgIGBydGxfcGh5X2lycV9tYXBgXG4qICAgYHJ0bF9waHlfaXJxX2NsZWFudXBgXG4qICAgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmBcbiogICBgcnRsX2dldF9zZnBfbW9kZWBcbiogICBgcnRsODE2OV9pb2N0bGBcbiogICBgcnRsODE2OV9ud2F5X3Jlc2V0YFxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2BcbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG5cbkxldCdzIHJlZmluZSB0aGF0IGxpc3QgYnkgY3V0dGluZyBvdXQgdW5uZWNlc3NhcnkgY3J1ZnQuXG5cbiogICBgcnRsX2luaXRfcGh5bGlua2BcbiogICBgcnRsX21hY19saW5rX2Rvd25gXG4qICAgYHJ0bF9tYWNfbGlua191cGBcbiogICBgcnRsX21hY19zZWxlY3RfcGNzYFxuKiAgIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgXG4qICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2BcbiogICBgcnRsX21hY19lbmFibGVfdHhfbHBpYFxuKiAgIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYFxuKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2BcbiogICBgcnRsX3BoeV9pcnFfbWFwYFxuKiAgIGBydGxfcGh5X2lycV9jbGVhbnVwYFxuKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gXG4qICAgYHJ0bF9nZXRfc2ZwX21vZGVgXG4qICAgYHJ0bDgxNjlfaW9jdGxgXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3ZlcmVkLiBgQ09ORklHX1I4MTY5YCBpcyB0aGUgYmlnIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXJzIHdlIG5lZWQ/IGBQSFlMSU5LYCBpcyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyB0aGF0J3MgdGFrZW4gY2FyZSBvZi4gRG9lcyB0aGlzIHRoaW5nIHJlcXVpcmUgYENPTkZJR19QQ0lgPyBJdCBkb2VzLCBidXQgbHVja2lseSwgdGhhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSdtIG1pc3Npbmc/IEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZWAgdG8gY29uZmlybS4gVGhhdCBzaG91bGQgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg4NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODozNS4xMDg3ODg5MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTE1Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyODE2OVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfODEzOVRPTykgKz0gODEzOXRvby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo4OnI4MTY5LXkgKz0gcjgxNjlfbWFpbi5vIHI4MTY5X2Zpcm13YXJlLm8gcjgxNjlfcGh5X2NvbmZpZy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo5OnI4MTY5LSQoQ09ORklHX1I4MTY5X0xFRFMpICs9IHI4MTY5X2xlZHMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1I4MTY5KSArPSByODE2OS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfUlRBU0UpICs9IHJ0YXNlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODozNS41Mjk5NTczODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNTgxNzIyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBSODE2OWAgRHJpdmVyKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgUjgxNjlgIGlzIHRoZSBvbmx5IGRyaXZlciBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBMZXQncyBkaWcgaW4uIEkndmUgZ290IHRvIHJldmlldyB0aGlzIHBhdGNoIGNhcmVmdWxseS4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgbWlncmF0aW9uLCByZXBsYWNpbmcgZGlyZWN0IGBwaHlkZXZgIGNhbGxzIHdpdGggdGhlIGBwaHlsaW5rYCBBUEkgY2FsbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBhZGRzIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBoeWxpbmsgaW50ZWdyYXRpb246IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9waHlsaW5rX21hY19vcHNgLCBgcjgxNjlfcGNzX29wc2AsIGBydGxfcGh5X2lycV9kb21haW5fb3BzYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBhbmQgc2V2ZXJhbCBgcnRsODE2OV9wY3NfKmAgYW5kIGBydGxfbWFjXypgIGZ1bmN0aW9ucywgaW5jbHVkaW5nIExQSSBjb250cm9sLiBJdCBhbHNvIG1vZGlmaWVzIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIHRoZSBga3NldHRpbmdzYCBmdW5jdGlvbnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIG5ldyBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMZXQncyB0cmFjZSBpdC4gSXQgc2VlbXMgdGhhdCB0aHJvdWdoIFBDSSBmdXp6aW5nLCBgcnRsX2luaXRfb25lYCBpcyBjYWxsZWQgd2hpY2ggdGhlbiBjYWxscyBgcnRsX2luaXRfcGh5bGlua2AuIEFmdGVyIHRoYXQsIGBwaHlsaW5rX2NyZWF0ZWAgZ2V0cyBjYWxsZWQsIGFuZCBpZiB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIGBydGxfb3BlbmAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbmV0bGluay9pb2N0bC4gYHJ0bF9vcGVuYCB0aGVuIGNhbGxzIGByODE2OV9waHlfY29ubmVjdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBoeWxpbmtfY29ubmVjdF9waHlgIGFuZCBgcGh5bGlua19zdGFydGAuIFRoaXMgd2lsbCBkcml2ZSB0aGUgcGh5bGluayBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCB3aWxsIGNhbGwgYSBsb3Qgb2YgdGhlIG5ldyBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdCwgZnVuY3Rpb25zIGxpa2UgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYW5kIHNvIG9uLiBBbHNvLCB0aGUgYHJ0bDgxNjlfaW9jdGxgIGlzIHJlYWNoYWJsZSB2aWEgYFNJT0NHTUlJUEhZYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBBbmQgdGhlIGBrc2V0dGluZ3NgIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wuXG5cbkdpdmVuIHRoZSBwYXRoZmluZGluZywgdGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgdGltZSB0byBidWlsZCBhIGxpc3Qgb2YgZm9jdXNlZCBzeW1ib2xzLiBMZXQncyBzZWUuLi5cblxuSSd2ZSBpbml0aWFsbHkgaWRlbnRpZmllZCBhIGdvb2QgbGlzdDpcblxuYHJ0bF9pbml0X3BoeWxpbmtgXG5gcnRsX21hY19saW5rX2Rvd25gXG5gcnRsX21hY19saW5rX3VwYFxuYHJ0bF9tYWNfc2VsZWN0X3Bjc2BcbmBydGw4MTY5X3Nkc19yZWFkYFxuYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWBcbmBydGw4MTY5X3Bjc19jb25maWdgXG5gcnRsX21hY19lbmFibGVfdHhfbHBpYFxuYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgXG5gcnRsODE2OV9nZXRfbHBpX2NhcHNgXG5gcnRsX3BoeV9pcnFfbWFwYFxuYHJ0bF9waHlfaXJxX2NsZWFudXBgXG5gcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uYFxuYHJ0bF9nZXRfc2ZwX21vZGVgXG5gcnRsODE2OV9pb2N0bGBcblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgYXJlbid0IHdhc3RpbmcgZnV6emluZyBjeWNsZXMgb24gZGVhZCBjb2RlLiBgcnRsX21hY19jb25maWdgIGlzIGVtcHR5LCBzbyB3ZSBkb24ndCBuZWVkIHRoYXQuIFRoZSBgcnRsODE2OV9wY3NfdmFsaWRhdGVgIGFuZCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAgc2VlbSB0byBoYXZlIG5vIGZ1bmN0aW9uYWxpdHksIHNvIHdlIGNhbiBwcm9iYWJseSBvbWl0IHRoZW0gdG9vLiBMZXQncyBrZWVwIGBydGxfaXNfODExNmFmYCBhcyBpdCdzIGEgc21hbGwgaGVscGVyLCBtYXliZSBpdCdsbCBtYWtlIHNvbWUgZnV6emluZy4gVGhlIGBud2F5X3Jlc2V0YCBhbmQgYGtzZXR0aW5nc2AgZnVuY3Rpb25zIGFyZSBqdXN0IHRoaW4gd3JhcHBlcnMsIHNvIHRob3NlIGFyZW4ndCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5TbywgaGVyZSdzIHRoZSAqZmluYWwqIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOlxuXG5gcnRsX2luaXRfcGh5bGlua2BcbmBydGxfbWFjX2xpbmtfZG93bmBcbmBydGxfbWFjX2xpbmtfdXBgXG5gcnRsX21hY19zZWxlY3RfcGNzYFxuYHJ0bDgxNjlfc2RzX3JlYWRgXG5gcnRsODE2OV9wY3NfZ2V0X3N0YXRlYFxuYHJ0bDgxNjlfcGNzX2NvbmZpZ2BcbmBydGxfbWFjX2VuYWJsZV90eF9scGlgXG5gcnRsX21hY19kaXNhYmxlX3R4X2xwaWBcbmBydGw4MTY5X2dldF9scGlfY2Fwc2BcbmBydGxfcGh5X2lycV9tYXBgXG5gcnRsX3BoeV9pcnFfY2xlYW51cGBcbmBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gXG5gcnRsX2dldF9zZnBfbW9kZWBcbmBydGw4MTY5X2lvY3RsYFxuXG5UaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBnZXQgdG9cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDQ4LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjk6MDMuNzg4MTM1MTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyOTk5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9nZXRfbHBpX2NhcHNcIixcbiAgICBcInJ0bF9waHlfaXJxX21hcFwiLFxuICAgIFwicnRsX3BoeV9pcnFfY2xlYW51cFwiLFxuICAgIFwicnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBkaXJlY3QgcGh5ZGV2IGNhbGxzLiBJdCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZ1bmN0aW9ucyBmb3IgcGh5bGluayBNQUMgYW5kIFBDUyBvcGVyYXRpb25zLCBJUlEgZG9tYWluIGhhbmRsaW5nLCBhbmQgU0ZQIG1vZGUgZGV0ZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBmdXp6aW5nIGFuZCBuZXR3b3JrIGludGVyZmFjZSBvcGVyYXRpb25zIChlLmcuLCBldGh0b29sLCBpb2N0bCwgbGluayBzdGF0ZSBjaGFuZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9nZXRfbHBpX2NhcHNcIixcbiAgICBcInJ0bF9waHlfaXJxX21hcFwiLFxuICAgIFwicnRsX3BoeV9pcnFfY2xlYW51cFwiLFxuICAgIFwicnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBkaXJlY3QgcGh5ZGV2IGNhbGxzLiBJdCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZ1bmN0aW9ucyBmb3IgcGh5bGluayBNQUMgYW5kIFBDUyBvcGVyYXRpb25zLCBJUlEgZG9tYWluIGhhbmRsaW5nLCBhbmQgU0ZQIG1vZGUgZGV0ZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBmdXp6aW5nIGFuZCBuZXR3b3JrIGludGVyZmFjZSBvcGVyYXRpb25zIChlLmcuLCBldGh0b29sLCBpb2N0bCwgbGluayBzdGF0ZSBjaGFuZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 06:18:21 +0000 UTC FinishedAt: 2026-06-29 06:29:06 +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": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "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": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "R8169" ], "series_id": "5c5152fa-125a-45ce-9c45-2ea1bbd1443d" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "rtl_init_phylink", "rtl_mac_link_down", "rtl_mac_link_up", "rtl_mac_select_pcs", "rtl8169_sds_read", "rtl8169_pcs_get_state", "rtl8169_pcs_config", "rtl_mac_enable_tx_lpi", "rtl_mac_disable_tx_lpi", "rtl8169_get_lpi_caps", "rtl_phy_irq_map", "rtl_phy_irq_cleanup", "rtl_disable_hidden_function", "rtl_get_sfp_mode", "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfdXAmIzM0OywKICAgICYjMzQ7cnRsX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2RzX3JlYWQmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9scGlfY2FwcyYjMzQ7LAogICAgJiMzNDtydGxfcGh5X2lycV9tYXAmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNWJlYWQ5ZjI5NTZkNzk4MGEyNjVkZTFkZDI4MThiYTc0NDRlZTdhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMDY6Mjc6NDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGNvbmZpZyBSODE2OVxuIFx0c2VsZWN0IENSQzMyXG4gXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbiYjNDM7XHRzZWxlY3QgUEhZTElOS1xuIFx0aGVscFxuIFx0ICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0b1xuIFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbmluZGV4IGVjNGZjMjFmYTIxZmIwLi42ZjQyMjEwNzllOGY5OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuQEAgLTIxLDExICYjNDM7MjEsMTQgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaXJxZG9tYWluLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC90Y3AuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2ludGVycnVwdC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZG1hLW1hcHBpbmcuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BtX3J1bnRpbWUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdGZpZWxkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGh5bGluay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJlZmV0Y2guaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lwdjYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG5AQCAtOTYsNiAmIzQzOzk5LDE5IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbiYjNDM7I2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXHQweEVCMTBcbiYjNDM7I2RlZmluZSBPQ1BfU0RTX0NNRF9SRUdcdFx0MHhFQjBFXG4mIzQzOyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1x0MHhFQjE0XG4mIzQzOyNkZWZpbmUgU0RTX0NNRF9SRUFEXHRcdDB4MDAwMVxuJiM0MzsjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcdDB4NDBcbiYjNDM7I2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXHQweDAwODBcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVFx0XHQweGRjMDBcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF9NQVNLXHQweDAwNzhcbiYjNDM7I2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcdDB4MDAzMFxuJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSURcdFx0MHhkMDA2XG4mIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLXHQweDAwZmZcbiYjNDM7I2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlx0MHgwMDAwXG4mIzQzO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyB7XG4gXHR1MzIgbWFzaztcbiBcdHUzMiB2YWw7XG5AQCAtMzM0LDExICYjNDM7MzUwLDE2IEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XG4gXHRBTERQU19MVFJcdD0gMHhlMGEyLFxuIFx0TFRSX09CRkZfTE9DS1x0PSAweGUwMzIsXG4gXHRMVFJfU05PT1BcdD0gMHhlMDM0LFxuJiM0MztcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbiYjNDM7I2RlZmluZSBMVFJfTVNHX0VOXHRcdFx0QklUKDApXG4mIzQzOyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfUE1fQ1NSXHRcdDB4ODBcbiYjNDM7I2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMXHQweDQ0XG4mIzQzOyNkZWZpbmUgUlRMX1BNX0QzSE9UXHRcdFx0R0VOTUFTSygxLCAwKVxuIH07XG4gXG4gZW51bSBydGw4MTY4XzgxMDFfcmVnaXN0ZXJzIHtcbkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUge1xuIFx0UlRMX0RBU0hfMjVfQlAsXG4gfTtcbiBcbiYjNDM7ZW51bSBydGxfc2ZwX21vZGUge1xuJiM0MztcdFJUTF9TRlBfTk9ORSxcbiYjNDM7XHRSVExfU0ZQXzgxNjhfQUYsXG4mIzQzO1x0UlRMX1NGUF84MTI3X0FURixcbiYjNDM7fTtcbiYjNDM7XG4gc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcdC8qIG1lbW9yeSBtYXAgcGh5c2ljYWwgYWRkcmVzcyAqL1xuIFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XG5AQCAtNzM2LDYgJiM0Mzs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4mIzQzO1x0ZW51bSBydGxfc2ZwX21vZGUgc2ZwX21vZGU7XG4gXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cbiBcdHUzMiBjdXJfdHg7IC8qIEluZGV4IGludG8gdGhlIFR4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGRpcnR5X3R4O1xuQEAgLTc1MCw2ICYjNDM7Nzc4LDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1MzIgaXJxX21hc2s7XG4gXHRpbnQgaXJxO1xuIFx0c3RydWN0IGNsayAqY2xrO1xuJiM0MztcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICYjNDM7NzkxLDYgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHR1bnNpZ25lZCBzdXBwb3J0c19nbWlpOjE7XG4gXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcbiBcdHVuc2lnbmVkIGRhc2hfZW5hYmxlZDoxO1xuLVx0Ym9vbCBzZnBfbW9kZToxO1xuIFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XG4gXHRzdHJ1Y3QgcnRsODE2OV9jb3VudGVycyAqY291bnRlcnM7XG4gXHRzdHJ1Y3QgcnRsODE2OV90Y19vZmZzZXRzIHRjX29mZnNldDtcbkBAIC03NzQsNiAmIzQzOzgwMiwxMiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XG4gXG4gXHR1MzIgb2NwX2Jhc2U7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmtfY29uZmlnIHBoeWxpbmtfY29uZmlnO1xuJiM0MztcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XG4mIzQzO1x0c3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluO1xuJiM0MztcdHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gc2F2ZWRfcGF1c2U7XG4mIzQzO1x0Ym9vbCBqdW1ib19wYXVzZV9zYXZlZDtcbiB9O1xuIFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xuQEAgLTExMjgsMTAgJiM0MzsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgJiM0MzsgMiAqIE1JSV9QSFlTSUQyKSlcbi1cdFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFx1MDAyNiAweGZmZmY7XG4tXG4gXHRSVExfVzMyKHRwLCBHUEhZX09DUCwgcmVnIFx1MDAzY1x1MDAzYyAxNSk7XG4gXG4gXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcdTAwMjZydGxfb2NwX2dwaHlfY29uZCwgMjUsIDEwKSA/XG5AQCAtMTIxNywxMiAmIzQzOzEyNDcsNiBAQCBzdGF0aWMgdm9pZCByODEyN19zZnBfaW5pdF8xMGcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXHUwMDI2IH4weDAwMGYpIHwgMHgwMDBjKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX3NmcF9pbml0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLXtcbi1cdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuLVx0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuLX1cbi1cbiBzdGF0aWMgdm9pZCBydGxfc2ZwX3Jlc2V0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxuQEAgLTEyODMsNiAmIzQzOzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnLCB2YWx1ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgYm9vbCBydGxfaXNfODExNmFmKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgXHUwMDI2IFJUTF9QS0dfREVURUNUX01BU0spID09XG4mIzQzO1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSBcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxuJiM0MztcdFx0UlRMX0lOVF9IV19JRF84MTE2QUY7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXG4ge1xuIFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgJiM0MzsgcmVnKTtcbkBAIC0xNTc4LDYgJiM0MzsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiYjNDM7e1xuJiM0MztcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbiYjNDM7XHRcdHUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4mIzQzO1x0XHRcdHJldHVybiBSVExfU0ZQXzgxMjdfQVRGO1xuJiM0MztcdH0gZWxzZSBpZiAocnRsX2lzXzgxMTZhZih0cCkpIHtcbiYjNDM7XHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBlbnVtIHJ0bF9kYXNoX3R5cGUgcnRsX2dldF9kYXNoX3R5cGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0c3dpdGNoICh0cC1cdTAwM2VtYWNfdmVyc2lvbikge1xuQEAgLTE2NzMsMTYgJiM0MzsxNzIwLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0MztzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCBzcGVlZClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcbiBcdCAgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbi1cdFx0fSBlbHNlIGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XG4mIzQzO1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyAmIzQzOzE3MzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTtcbiBcdH0gZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNSB8fFxuIFx0XHQgICB0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7XG4tXHRcdGlmIChwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0xNzAwLDcgJiM0MzsxNzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuJiM0MztcdFx0aWYgKHNwZWVkID09IFNQRUVEXzEwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18wMDExLCAweDAwNjBhKTtcbiBcdFx0fSBlbHNlIHtcbkBAIC0yMDc0LDExICYjNDM7MjExOSwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0Y2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7XG4gXG4gXHQvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqL1xuLVx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuJiM0MztcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpJiM0MzsmIzQzOykge1xuLVx0XHRpZiAodHAtXHUwMDNlcGh5ZGV2LVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgJiM0MzsyMjgxLDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgcjgxNjlfZ2V0X3R4X2xwaV90aW1lcl91cyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHR1bnNpZ25lZCBpbnQgc3BlZWQgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQ7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXHUwMDNlc3BlZWQ7XG4gXHR1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC1cdTAwM2V0eF9scGlfdGltZXI7XG4gXG4gXHRpZiAoIXRpbWVyIHx8IHNwZWVkID09IFNQRUVEX1VOS05PV04pXG5AQCAtMjI1NCw3ICYjNDM7MjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4mIzQzO1x0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTIyNzAsNyAmIzQzOzIzMTUsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKVxuIFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5ZGV2LCBkYXRhKTtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgJiM0MzsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdFx0ICAgc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSAqZGF0YSlcbiB7XG4gXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIHR4X3BhdXNlLCByeF9wYXVzZTtcbi1cbi1cdHBoeV9nZXRfcGF1c2UodHAtXHUwMDNlcGh5ZGV2LCBcdTAwMjZ0eF9wYXVzZSwgXHUwMDI2cnhfcGF1c2UpO1xuIFxuLVx0ZGF0YS1cdTAwM2VhdXRvbmVnID0gdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF1dG9uZWc7XG4tXHRkYXRhLVx1MDAzZXR4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDtcbi1cdGRhdGEtXHUwMDNlcnhfcGF1c2UgPSByeF9wYXVzZSA/IDEgOiAwO1xuJiM0MztcdHBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiB9XG4gXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjMxOCw5ICYjNDM7MjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIGRhdGEpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjM4NiwzNCAmIzQzOzI0MjQsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0bGUzMl90b19jcHUodHAtXHUwMDNlY291bnRlcnMtXHUwMDNlcnhfdW5rbm93bl9vcGNvZGUpO1xuIH1cbiBcbi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuLVx0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0aW50IGR1cGxleCA9IGNtZC1cdTAwM2ViYXNlLmR1cGxleDtcbi1cdGludCBzcGVlZCA9IGNtZC1cdTAwM2ViYXNlLnNwZWVkO1xuLVxuLVx0aWYgKCF0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xuLVxuLVx0aWYgKGNtZC1cdTAwM2ViYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbi1cbi1cdGlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi1cdTAwM2VzdXBwb3J0ZWQpKVxuLVx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2cGh5ZGV2LVx1MDAzZWxvY2spO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuJiM0Mzt9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbiYjNDM7XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgZXRodG9vbF9saW5rX2tzZXR0aW5ncyAqY21kKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbiBcbi1cdHJ0bF9zZnBfaW5pdCh0cCk7XG4mIzQzO1x0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3Nfc2V0KHRwLVx1MDAzZXBoeWxpbmssIGNtZCk7XG4mIzQzO31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4mIzQzO3N0YXRpYyBpbnQgcnRsODE2OV9ud2F5X3Jlc2V0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHtcbkBAIC0yNDMxLDEwICYjNDM7MjQ2MiwxMCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XG4gXHQuZ2V0X3NzZXRfY291bnRcdFx0PSBydGw4MTY5X2dldF9zc2V0X2NvdW50LFxuIFx0LmdldF9ldGh0b29sX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X2V0aHRvb2xfc3RhdHMsXG4gXHQuZ2V0X3RzX2luZm9cdFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxuLVx0Lm53YXlfcmVzZXRcdFx0PSBwaHlfZXRodG9vbF9ud2F5X3Jlc2V0LFxuJiM0MztcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuJiM0MztcdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuc2V0X2xpbmtfa3NldHRpbmdzXHQ9IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzLFxuIFx0LmdldF9yaW5ncGFyYW1cdFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXG4gXHQuZ2V0X3BhdXNlX3N0YXRzXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxuQEAgLTI0OTksOSAmIzQzOzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0dHAtXHUwMDNlb2NwX2Jhc2UgPSBPQ1BfU1REX1BIWV9CQVNFO1xuIFxuIFx0XHQvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi9cbi1cdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbi1cdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbi1cdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdFx0cGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLVx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICEodmFsIFx1MDAyNiBCTUNSX1JFU0VUKSxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgJiM0MzsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcbiBcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiYjNDM7XHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSAmIzQzOzI1ODYsNiBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcGh5KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0ICAgIHRwLVx1MDAzZXBjaV9kZXYtXHUwMDNlc3Vic3lzdGVtX2RldmljZSA9PSAweGUwMDApXG4gXHRcdHBoeV93cml0ZV9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcbiBcbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbi1cdFx0cnRsX3NmcF9pbml0KHRwKTtcbi1cbiBcdC8qIFdlIG1heSBoYXZlIGNhbGxlZCBwaHlfc3BlZWRfZG93biBiZWZvcmUgKi9cbiBcdHBoeV9zcGVlZF91cCh0cC1cdTAwM2VwaHlkZXYpO1xuIFxuQEAgLTI2MjcsNiAmIzQzOzI2NTgsNyBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2luaXRfcmluZ19pbmRleGVzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuIFx0Ym9vbCBqdW1ibyA9IHRwLVx1MDAzZWRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTjtcbiYjNDM7XHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHBhdXNlO1xuIFx0aW50IHJlYWRycSA9IDQwOTY7XG4gXG4gXHRpZiAoanVtYm8gXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xNyBcdTAwMjZcdTAwMjZcbkBAIC0yNjU4LDEzICYjNDM7MjY5MCw0OCBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0aWYgKHBjaV9pc19wY2llKHRwLVx1MDAzZXBjaV9kZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzdXBwb3J0c19nbWlpKVxuIFx0XHRwY2llX3NldF9yZWFkcnEodHAtXHUwMDNlcGNpX2RldiwgcmVhZHJxKTtcbiBcbi1cdC8qIENoaXAgZG9lc24mIzM5O3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXG4gXHRpZiAoanVtYm8pIHtcbi1cdFx0bGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcbi1cdFx0XHRcdCAgIHRwLVx1MDAzZXBoeWRldi1cdTAwM2VhZHZlcnRpc2luZyk7XG4tXHRcdHBoeV9zdGFydF9hbmVnKHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0XHRpZiAoIXRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDtcbiYjNDM7XHRcdFx0Ym9vbCBhZHZfcGF1c2UsIGFkdl9hc3ltO1xuJiM0MztcbiYjNDM7XHRcdFx0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIFx1MDAyNnRwLVx1MDAzZXNhdmVkX3BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdGlmICh0cC1cdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XG4mIzQzO1x0XHRcdFx0cGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXHUwMDNlcGh5bGluaywgXHUwMDI2Y21kKTtcbiYjNDM7XHRcdFx0XHRhZHZfcGF1c2UgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKFx1MDAyNmNtZCxcbiYjNDM7XHRcdFx0XHRcdFx0XHRcdFx0XHQgIGFkdmVydGlzaW5nLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdCAgUGF1c2UpO1xuJiM0MztcdFx0XHRcdGFkdl9hc3ltICA9IGV0aHRvb2xfbGlua19rc2V0dGluZ3NfdGVzdF9saW5rX21vZGUoXHUwMDI2Y21kLFxuJiM0MztcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYWR2ZXJ0aXNpbmcsXG4mIzQzO1x0XHRcdFx0XHRcdFx0XHRcdFx0ICBBc3ltX1BhdXNlKTtcbiYjNDM7XG4mIzQzO1x0XHRcdFx0aWYgKGFkdl9wYXVzZSBcdTAwMjZcdTAwMjYgIWFkdl9hc3ltKSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXHUwMDI2XHUwMDI2IGFkdl9hc3ltKSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDE7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFx1MDAyNlx1MDAyNiBhZHZfYXN5bSkge1xuJiM0MztcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAwO1xuJiM0MztcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAxO1xuJiM0MztcdFx0XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1xuJiM0MztcdFx0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0cGF1c2UuYXV0b25lZyA9IHRwLVx1MDAzZXNhdmVkX3BhdXNlLmF1dG9uZWc7XG4mIzQzO1x0XHRwYXVzZS5yeF9wYXVzZSA9IDA7XG4mIzQzO1x0XHRwYXVzZS50eF9wYXVzZSA9IDA7XG4mIzQzO1xuJiM0MztcdFx0cGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVx1MDAzZXBoeWxpbmssIFx1MDAyNnBhdXNlKTtcbiYjNDM7XHR9IGVsc2UgaWYgKHRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuJiM0MztcdFx0dHAtXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQgPSBmYWxzZTtcbiBcdH1cbiB9XG4gXG5AQCAtMjc4MCw3ICYjNDM7Mjg0Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9wcmVwYXJlX3Bvd2VyX2Rvd24oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHJ0bF9lcGh5X3dyaXRlKHRwLCAweDE5LCAweGZmNjQpO1xuIFxuIFx0aWYgKGRldmljZV9tYXlfd2FrZXVwKHRwX3RvX2Rldih0cCkpKSB7XG4tXHRcdHBoeV9zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWRldiwgZmFsc2UpO1xuJiM0MztcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgJiM0MzsyODk5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFJUTF9XMzIodHAsIDB4N2MsIHZhbCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1xuJiM0MztcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgcnRsX3NldF9yeF9tb2RlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0dTMyIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXMgfCBBY2NlcHRNdWx0aWNhc3Q7XG5AQCAtMzA5OCw4ICYjNDM7MzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQwLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9TTk9PUCwgMHgwMDAwLCBMVFJfU05PT1BfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJlLCAweDQ4ODApO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIEFMRFBTX0xUUiwgMHgwMDAwLCBBTERQU19MVFJfRU4pO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRhLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGRjLCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ0LCAweDhjMTIpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuJiM0MztcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE4LCAweDkwMDMpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgJiM0MzszMjEwLDcgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV9sdHIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIExUUl9PQkZGX0xPQ0ssIDB4MDAwMywgTFRSX09CRkZfTE9DS19FTik7XG4mIzQzO1x0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG5AQCAtMzE1Miw2ICYjNDM7MzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHQvKiByZXNldCBlcGh5IHR4L3J4IGRpc2FibGUgdGltZXIgKi9cbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDk0LCAweGZmMDAsIDApO1xuQEAgLTMxNjQsNiAmIzQzOzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH0gZWxzZSB7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuJiM0MztcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiAmIzQzOzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LVx1MDAzZWRldmZuKTtcbiYjNDM7XHRzdHJ1Y3QgcGNpX2J1cyAqYnVzID0gcGRldi1cdTAwM2VidXM7XG4mIzQzO1x0dW5zaWduZWQgaW50IGRldmZuO1xuJiM0MztcdGludCBmdW5jO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1x0dTMyIHZhbDtcbiYjNDM7XG4mIzQzO1x0Zm9yIChmdW5jID0gMjsgZnVuYyBcdTAwM2MgODsgZnVuYyYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdGRldmZuID0gUENJX0RFVkZOKHNsb3QsIGZ1bmMpO1xuJiM0MztcbiYjNDM7XHRcdHJldCA9IHBjaV9idXNfcmVhZF9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfUE1fQ1NSLCBcdTAwMjZ2YWwpO1xuJiM0MztcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2ICFQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkge1xuJiM0MztcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbiYjNDM7XHRcdFx0dmFsIFx1MDAyNj0gfihQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7XG4mIzQzO1x0XHRcdHZhbCB8PSAoUlRMX1BNX0QzSE9UIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgdmFsKTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4mIzQzO1x0XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgIVBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKSB7XG4mIzQzO1x0XHRcdHZhbCBcdTAwMjY9IH4oKFBDSV9FWFBfTE5LU1RBX0xCTVMgfCBQQ0lfRVhQX0xOS1NUQV9MQUJTKSBcdTAwM2NcdTAwM2MgMTYpO1xuJiM0MztcdFx0XHR2YWwgfD0gUENJX0VYUF9MTktDVExfQVNQTUM7XG4mIzQzO1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIHZhbCk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XG5AQCAtMzY5MywxMiAmIzQzOzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xuIFxuLVx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuLVx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbi1cdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuJiM0MztcdGlmICh0cC1cdTAwM2VwaHlkZXYpIHtcbiYjNDM7XHRcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXHUwMDI2IDB4M2ZmZjtcbiYjNDM7XHRcdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRcdHUxNiBzd19jbnRfMW1zX2luaTtcbiBcbi1cdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuLVx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbiYjNDM7XHRcdFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcdTAwMjYgMHgwZmZmO1xuJiM0MztcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbiYjNDM7XHRcdH1cbiBcdH1cbiBcbiBcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcbkBAIC0zNzExLDYgJiM0MzszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGMwOTQsIDB4MDAwMCk7XG4gXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGMwOWUsIDB4MDAwMCk7XG4gXG4mIzQzO1x0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVx1MDAzZXBjaV9kZXYpO1xuIFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXG4gXHRyODE2OV9hcHBseV9maXJtd2FyZSh0cCk7XG4gfVxuQEAgLTQxNDAsMTEgJiM0Mzs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhkZXYpKVxuJiM0MztcdFx0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcbiBcdFdSSVRFX09OQ0UoZGV2LVx1MDAzZW10dSwgbmV3X210dSk7XG4gXHRuZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7XG4gXHRydGxfanVtYm9fY29uZmlnKHRwKTtcbiBcdHJ0bF9zZXRfZWVlX3R4aWRsZV90aW1lcih0cCk7XG4gXG4mIzQzO1x0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbiYjNDM7XHRcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTQ4NjksOCAmIzQzOzUwMDEsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSlcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRpZiAoc3RhdHVzIFx1MDAyNiBMaW5rQ2hnKVxuLVx0XHRwaHlfbWFjX2ludGVycnVwdCh0cC1cdTAwM2VwaHlkZXYpO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpIHtcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbilcbiYjNDM7XHRcdFx0Z2VuZXJpY19oYW5kbGVfZG9tYWluX2lycSh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRcdFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVx1MDAzZXBoeWxpbmssXG4mIzQzO1x0XHRcdFx0XHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXHUwMDI2IExpbmtTdGF0dXMpKTtcbiYjNDM7XHR9XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuIFx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbkBAIC00OTMwLDkgJiM0Mzs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiB7XG4tXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRyZXR1cm47XG4tXG4gXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdC8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqL1xuQEAgLTQ5NjMsNDAgJiM0Mzs1MDk3LDE1IEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfdHhfbHBpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSlcbiBcdH1cbiB9XG4gXG4tc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KVxuLXtcbi1cdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7XG4tXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcbi1cbi1cdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XG4tXHRcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XG4tXHRcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlZW5hYmxlX3R4X2xwaSk7XG4tXHRcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuLVx0fSBlbHNlIHtcbi1cdFx0cG1fcnVudGltZV9pZGxlKGQpO1xuLVx0fVxuLVxuLVx0cGh5X3ByaW50X3N0YXR1cyh0cC1cdTAwM2VwaHlkZXYpO1xuLX1cbi1cbiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRwaHlfaW50ZXJmYWNlX3QgcGh5X21vZGU7XG4gXHRpbnQgcmV0O1xuIFxuLVx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuLVx0XHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xuLVxuLVx0cmV0ID0gcGh5X2Nvbm5lY3RfZGlyZWN0KHRwLVx1MDAzZWRldiwgcGh5ZGV2LCByODE2OV9waHlsaW5rX2hhbmRsZXIsXG4tXHRcdFx0XHQgcGh5X21vZGUpO1xuLVx0aWYgKHJldClcbiYjNDM7XHRyZXQgPSBwaHlsaW5rX2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmssIHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0bmV0ZGV2X2Vycih0cC1cdTAwM2VkZXYsIFwmIzM0O2ZhaWxlZCB0byBjb25uZWN0IHBoeVxcblwmIzM0Oyk7XG4gXHRcdHJldHVybiByZXQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4tXHRcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcbi1cbi1cdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTUwMDcsMTAgJiM0Mzs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0LyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi9cbi1cdGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cnRsX3NmcF9yZXNldCh0cCk7XG4gXG4gXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XG5AQCAtNTAzMiwxNCAmIzQzOzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWRldilcbiYjNDM7XHRcdHJ0bDgxNjlfaW5pdF9waHkodHApO1xuJiM0MztcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbiYjNDM7XHRwaHlsaW5rX3N0YXJ0KHRwLVx1MDAzZXBoeWxpbmspO1xuIH1cbiBcbiBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbkBAIC01MDU1LDcgJiM0Mzs1MTY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gXHRmcmVlX2lycSh0cC1cdTAwM2VpcnEsIHRwKTtcbiBcbi1cdHBoeV9kaXNjb25uZWN0KHRwLVx1MDAzZXBoeWRldik7XG4mIzQzO1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiw5ICYjNDM7NTIyMSwxMSBAQCBzdGF0aWMgaW50IHJ0bF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9yZWxlYXNlX2Z3XzI7XG4gXG4tXHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4tXHRpZiAocmV0dmFsKVxuLVx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHRpZiAodHAtXHUwMDNlcGh5ZGV2KSB7XG4mIzQzO1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4mIzQzO1x0XHRpZiAocmV0dmFsKVxuJiM0MztcdFx0XHRnb3RvIGVycl9mcmVlX2lycTtcbiYjNDM7XHR9XG4gXG4gXHRydGw4MTY5X3VwKHRwKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuQEAgLTUxOTAsOCAmIzQzOzUzMDEsMTEgQEAgc3RhdGljIGludCBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldilcbiBcdHJ0bF9yYXJfc2V0KHRwLCB0cC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIpO1xuIFx0X19ydGw4MTY5X3NldF93b2wodHAsIHRwLVx1MDAzZXNhdmVkX3dvbG9wdHMpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZVR4RGVzY0FycmF5KVxuJiM0MztcdGlmICh0cC1cdTAwM2VUeERlc2NBcnJheSkge1xuJiM0MztcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJ0bDgxNjlfdXAodHApO1xuJiM0MztcdFx0cnRubF91bmxvY2soKTtcbiYjNDM7XHR9XG4gXG4gXHRuZXRpZl9kZXZpY2VfYXR0YWNoKHRwLVx1MDAzZWRldik7XG4gXG5AQCAtNTI4OCw2ICYjNDM7NTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeWxpbmspXG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHRpZiAodHAtXHUwMDNlZGFzaF90eXBlICE9IFJUTF9EQVNIX05PTkUpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0b3AodHApO1xuQEAgLTUzMTAsNyAmIzQzOzU0MjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuJiM0MztcdC5uZG9fZXRoX2lvY3RsXHRcdD0gcnRsODE2OV9pb2N0bCxcbiBcdC5uZG9fc2V0X3J4X21vZGVcdD0gcnRsX3NldF9yeF9tb2RlLFxuICNpZmRlZiBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUlxuIFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcdD0gcnRsODE2OV9uZXRwb2xsLFxuQEAgLTU0MjMsMTEgJiM0Mzs1NTM5LDM5IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1KHN0cnVjdCBtaWlfYnVzICptaWlfYnVzLCBpbnQgYWRkcixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIGludCBydGxfcGh5X2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsXG4mIzQzO1x0XHRcdCAgIGlycV9od19udW1iZXJfdCBod2lycSlcbiYjNDM7e1xuJiM0MztcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG4mIzQzO1x0aXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkLVx1MDAzZWhvc3RfZGF0YSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIHJ0bF9waHlfaXJxX2RvbWFpbl9vcHMgPSB7XG4mIzQzO1x0Lm1hcCA9IHJ0bF9waHlfaXJxX21hcCxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9waHlfaXJxX2NsZWFudXAodm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcbiYjNDM7XHRpbnQgdmlycTtcbiYjNDM7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XG4mIzQzO1x0XHR2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4mIzQzO1x0XHRpZiAodmlycSlcbiYjNDM7XHRcdFx0aXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxKTtcbiYjNDM7XG4mIzQzO1x0XHRpcnFfZG9tYWluX3JlbW92ZSh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbik7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IE5VTEw7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IHJldCwgdmlycTtcbiBcbiBcdC8qIE9uIHNvbWUgYm9hcmRzIHdpdGggdGhpcyBjaGlwIHZlcnNpb24gdGhlIEJJT1MgaXMgYnVnZ3kgYW5kIG1pc3Nlc1xuIFx0ICogdG8gcmVzZXQgdGhlIFBIWSBwYWdlIHNlbGVjdG9yLiBUaGlzIHJlc3VsdHMgaW4gdGhlIFBIWSBJRCByZWFkXG5AQCAtNTQ0NSw3ICYjNDM7NTU4OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdG5ld19idXMtXHUwMDNlbmFtZSA9IFwmIzM0O3I4MTY5XCYjMzQ7O1xuIFx0bmV3X2J1cy1cdTAwM2Vwcml2ID0gdHA7XG4gXHRuZXdfYnVzLVx1MDAzZXBhcmVudCA9IFx1MDAyNnBkZXYtXHUwMDNlZGV2O1xuLVx0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSBQSFlfTUFDX0lOVEVSUlVQVDtcbiBcdG5ld19idXMtXHUwMDNlcGh5X21hc2sgPSBHRU5NQVNLKDMxLCAxKTtcbiBcdHNucHJpbnRmKG5ld19idXMtXHUwMDNlaWQsIE1JSV9CVVNfSURfU0laRSwgXCYjMzQ7cjgxNjktJXgtJXhcJiMzNDssXG4gXHRcdCBwY2lfZG9tYWluX25yKHBkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChwZGV2KSk7XG5AQCAtNTQ1OCw2ICYjNDM7NTYwMSwyMSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdG5ld19idXMtXHUwMDNld3JpdGVfYzQ1ID0gcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1O1xuIFx0fVxuIFxuJiM0MztcdHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIDEsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0bF9waHlfaXJxX2RvbWFpbl9vcHMsIHRwKTtcbiYjNDM7XHRpZiAoIXRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldChcdTAwMjZwZGV2LVx1MDAzZWRldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApO1xuJiM0MztcdGlmIChyZXQpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHR2aXJxID0gaXJxX2NyZWF0ZV9tYXBwaW5nKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluLCAwKTtcbiYjNDM7XHRpZiAoIXZpcnEpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSB2aXJxO1xuJiM0MztcbiBcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcdTAwMjZwZGV2LVx1MDAzZWRldiwgbmV3X2J1cyk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTU0NzQsMTYgJiM0Mzs1NjMyLDYgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRyZXR1cm4gLUVVTkFUQ0g7XG4gXHR9XG4gXG4tXHR0cC1cdTAwM2VwaHlkZXYtXHUwMDNlbWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuLVx0aWYgKHJ0bF9zdXBwb3J0c19lZWUodHApKVxuLVx0XHRwaHlfc3VwcG9ydF9lZWUodHAtXHUwMDNlcGh5ZGV2KTtcbi1cdHBoeV9zdXBwb3J0X2FzeW1fcGF1c2UodHAtXHUwMDNlcGh5ZGV2KTtcbi1cbi1cdC8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzICovXG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbi1cdFx0cGh5X2Rpc2FibGVfZWVlX21vZGUodHAtXHUwMDNlcGh5ZGV2LFxuLVx0XHRcdFx0ICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpO1xuLVxuIFx0LyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqL1xuIFx0cGh5X3N1c3BlbmQodHAtXHUwMDNlcGh5ZGV2KTtcbiBcbkBAIC01NTk5LDYgJiM0Mzs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX2Rvd24oc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbiYjNDM7XHRwbV9ydW50aW1lX2lkbGUodHBfdG9fZGV2KHRwKSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua191cChzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldixcbiYjNDM7XHRcdFx0ICAgIHVuc2lnbmVkIGludCBtb2RlLCBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4mIzQzO1xuJiM0MztcdHRwLVx1MDAzZXNwZWVkID0gc3BlZWQ7XG4mIzQzO1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4mIzQzO1xuJiM0MztcdHBtX3JlcXVlc3RfcmVzdW1lKGQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxuJiM0MztcdCAgICBpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFX1NHTUlJIHx8XG4mIzQzO1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4mIzQzO1x0XHRyZXR1cm4gXHUwMDI2dHAtXHUwMDNlcGNzO1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4mIzQzO1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1MTYgcnRsODE2OV9zZHNfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgdTE2IHNkc19yZWcpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUxNiB2YWwgPSAwO1xuJiM0MztcbiYjNDM7XHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4mIzQzO1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTtcbiYjNDM7XHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQ01EX1JFRywgU0RTX0NNRF9SRUFEKTtcbiYjNDM7XHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4mIzQzO1x0cmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdHJldHVybiB2YWw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbiYjNDM7XHRcdFx0XHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuJiM0MztcdFx0dTE2IHN0YXQxO1xuJiM0MztcbiYjNDM7XHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSAmIzQzOyBNRElPX1NUQVQxKTtcbiYjNDM7XG4mIzQzO1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbiYjNDM7XHRcdFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWxpbmsgPSAhIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcbiYjNDM7XHRcdGlmICghc3RhdGUtXHUwMDNlbGluaylcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRcdHN0YXRlLVx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xuJiM0MztcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0dTE2IGJtc3IsIGxwYTtcbiYjNDM7XG4mIzQzO1x0XHRibXNyID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DMjJfQkFTRSAmIzQzOyBNSUlfQk1TUik7XG4mIzQzO1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9MUEEpO1xuJiM0MztcdFx0cGh5bGlua19taWlfYzIyX3Bjc19kZWNvZGVfc3RhdGUoc3RhdGUsIG5lZ19tb2RlLCBibXNyLCBscGEpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuJiM0MztcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuJiM0MztcdFx0XHQgICAgICBjb25zdCB1bnNpZ25lZCBsb25nICphZHZlcnRpc2luZyxcbiYjNDM7XHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xuJiM0MztcbiYjNDM7XHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbiYjNDM7XHRcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX3ZhbGlkYXRlKHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzLCB1bnNpZ25lZCBsb25nICpzdXBwb3J0ZWQsXG4mIzQzO1x0XHRcdFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgcnRsODE2OV9wY3NfYW5fcmVzdGFydChzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcylcbiYjNDM7e1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2Rpc2FibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4mIzQzO1xuJiM0MztcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcbiYjNDM7XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiYjNDM7XG4mIzQzO1x0cnRsX2VuYWJsZV90eF9scGkodHAsIHRydWUpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbiYjNDM7XHQubWFjX3NlbGVjdF9wY3MgPSBydGxfbWFjX3NlbGVjdF9wY3MsXG4mIzQzO1x0Lm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZyxcbiYjNDM7XHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbiYjNDM7XHQubWFjX2xpbmtfdXAgICAgPSBydGxfbWFjX2xpbmtfdXAsXG4mIzQzO1x0Lm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksXG4mIzQzO1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNhcHMgPSAwO1xuJiM0MztcbiYjNDM7XHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApIHx8IHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuJiM0MztcdCAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjMpXG4mIzQzO1x0XHRjYXBzIHw9IE1BQ18yNTAwRkQ7XG4mIzQzO1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzUwMDBGRDtcbiYjNDM7XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbiYjNDM7XHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBjYXBzO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0ge1xuJiM0MztcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbiYjNDM7XHQucGNzX2dldF9zdGF0ZSA9IHJ0bDgxNjlfcGNzX2dldF9zdGF0ZSxcbiYjNDM7XHQucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZyxcbiYjNDM7XHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IHBoeWxpbmsgKnBsO1xuJiM0MztcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGV2ID0gXHUwMDI2dHAtXHUwMDNlZGV2LVx1MDAzZWRldjtcbiYjNDM7XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX21hbmFnZWRfcG0gPSB0cnVlO1xuJiM0MztcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmxwaV9jYXBhYmlsaXRpZXMgPSBydGw4MTY5X2dldF9scGlfY2Fwcyh0cCk7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4mIzQzO1xuJiM0MztcdHN3aXRjaCAodHAtXHUwMDNlc2ZwX21vZGUpIHtcbiYjNDM7XHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbiYjNDM7XHRcdHRwLVx1MDAzZXBjcy5vcHMgPSBcdTAwMjZyODE2OV9wY3Nfb3BzO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlO1xuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuJiM0MztcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuJiM0MztcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4mIzQzO1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbiYjNDM7XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7XG4mIzQzO1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4mIzQzO1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4mIzQzO1x0XHRlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzcwKVxuJiM0MztcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfFxuJiM0MztcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbiYjNDM7XHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHwgTUFDXzI1MDBGRDtcbiYjNDM7XHRcdGVsc2VcbiYjNDM7XHRcdFx0aWYgKHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4mIzQzO1x0XHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xuJiM0MztcbiYjNDM7XHRcdGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiBcdTAwM2MgUlRMX0dJR0FfTUFDX1ZFUl82MSlcbiYjNDM7XHRcdFx0cGh5X21vZGUgPSB0cC1cdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxuJiM0MztcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4mIzQzO1x0XHRlbHNlXG4mIzQzO1x0XHRcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbiYjNDM7XHRwbCA9IHBoeWxpbmtfY3JlYXRlKFx1MDAyNnRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLCB0cF90b19kZXYodHApLVx1MDAzZWZ3bm9kZSxcbiYjNDM7XHRcdFx0ICAgIHBoeV9tb2RlLCBcdTAwMjZydGxfcGh5bGlua19tYWNfb3BzKTtcbiYjNDM7XHRpZiAoSVNfRVJSKHBsKSlcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKHBsKTtcbiYjNDM7XG4mIzQzO1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDtcbkBAIC01NjY3LDYgJiM0Mzs2MDM2LDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdFx0XHQgICAgIGV4dF94aWRfc3RyLCB4aWQpO1xuIFx0dHAtXHUwMDNlbWFjX3ZlcnNpb24gPSBjaGlwLVx1MDAzZW1hY192ZXJzaW9uO1xuIFx0dHAtXHUwMDNlZndfbmFtZSA9IGNoaXAtXHUwMDNlZndfbmFtZTtcbiYjNDM7XHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiAmIzQzOzYwNDksNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdH1cbiBcdHRwLVx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcbiBcbi1cdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbi1cdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XG4tXG4tXHRcdGlmICgoZGF0YSBcdTAwMjYgMHhmZikgPT0gMHgwNylcbi1cdFx0XHR0cC1cdTAwM2VzZnBfbW9kZSA9IHRydWU7XG4tXHR9XG4mIzQzO1x0dHAtXHUwMDNlc2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTtcbiBcbiBcdHRwLVx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcbiBcdHRwLVx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xuQEAgLTU3ODgsMTMgJiM0Mzs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0cmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTtcbiBcdGlmIChyYylcbiBcdFx0cmV0dXJuIHJjO1xuIFxuJiM0MztcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcbiYjNDM7XHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4mIzQzO1x0XHRpZiAocmMpIHtcbiYjNDM7XHRcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4mIzQzO1x0aWYgKHJjKSB7XG4mIzQzO1x0XHRwaHlsaW5rX2Rlc3Ryb3kodHAtXHUwMDNlcGh5bGluayk7XG4gXHRcdHJldHVybiByYztcbiYjNDM7XHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDcgJiM0Mzs2MTkyLDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXHRcdHJ0bDgxNjhfZHJpdmVyX3N0YXJ0KHRwKTtcbiBcdH1cbiBcbi1cdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKVxuJiM0MztcdGlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpIFx1MDAyNlx1MDAyNiB0cC1cdTAwM2VzZnBfbW9kZSAhPSBSVExfU0ZQXzgxMjdfQVRGKVxuIFx0XHRwbV9ydW50aW1lX3B1dF9zeW5jKFx1MDAyNnBkZXYtXHUwMDNlZGV2KTtcbiBcbiBcdHJldHVybiAwO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1I4MTY5JiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cnRsX2luaXRfcGh5bGluayYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfZG93biYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2xpbmtfdXAmIzM0OywKICAgICYjMzQ7cnRsX21hY19zZWxlY3RfcGNzJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfc2RzX3JlYWQmIzM0OywKICAgICYjMzQ7cnRsODE2OV9wY3NfZ2V0X3N0YXRlJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2NvbmZpZyYjMzQ7LAogICAgJiMzNDtydGxfbWFjX2VuYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsX21hY19kaXNhYmxlX3R4X2xwaSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2dldF9scGlfY2FwcyYjMzQ7LAogICAgJiMzNDtydGxfcGh5X2lycV9tYXAmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfY2xlYW51cCYjMzQ7LAogICAgJiMzNDtydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24mIzM0OywKICAgICYjMzQ7cnRsX2dldF9zZnBfbW9kZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X2lvY3RsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1YmVhZDlmMjk1NmQ3OTgwYTI2NWRlMWRkMjgxOGJhNzQ0NGVlN2EKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwppbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcKQEAgLTg4LDYgJiM0Mzs4OCw3IEBAIGNvbmZpZyBSODE2OQogCXNlbGVjdCBDUkMzMgogCXNlbGVjdCBQSFlMSUIKIAlzZWxlY3QgUkVBTFRFS19QSFkKJiM0MzsJc2VsZWN0IFBIWUxJTksKIAloZWxwCiAJICBTYXkgWSBoZXJlIGlmIHlvdSBoYXZlIGEgUmVhbHRlayBFdGhlcm5ldCBhZGFwdGVyIGJlbG9uZ2luZyB0bwogCSAgdGhlIGZvbGxvd2luZyBmYW1pbGllczoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMKaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYwpAQCAtMjEsMTEgJiM0MzsyMSwxNCBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2luLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9pcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pcnEuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaXJxZG9tYWluLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvdGNwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaW50ZXJydXB0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZG1hLW1hcHBpbmcuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wbV9ydW50aW1lLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYml0ZmllbGQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGh5bGluay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByZWZldGNoLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvaXB2Ni5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3VuYWxpZ25lZC5oJmd0OwpAQCAtOTYsNiAmIzQzOzk5LDE5IEBACiAjZGVmaW5lIEpVTUJPXzlLCSg5ICogU1pfMUsgLSBWTEFOX0VUSF9ITEVOIC0gRVRIX0ZDU19MRU4pCiAjZGVmaW5lIEpVTUJPXzE2SwkoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKQogCiYjNDM7I2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHCTB4RUIxMAomIzQzOyNkZWZpbmUgT0NQX1NEU19DTURfUkVHCQkweEVCMEUKJiM0MzsjZGVmaW5lIE9DUF9TRFNfREFUQV9SRUcJMHhFQjE0CiYjNDM7I2RlZmluZSBTRFNfQ01EX1JFQUQJCTB4MDAwMQomIzQzOyNkZWZpbmUgUlRMX1NEU19DMjJfQkFTRQkweDQwCiYjNDM7I2RlZmluZSBSVExfU0RTX0M0NV9CQVNFCTB4MDA4MAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1QJCTB4ZGMwMAomIzQzOyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTSwkweDAwNzgKJiM0MzsjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRgkweDAwMzAKJiM0MzsjZGVmaW5lIFJUTF9JTlRfSFdfSUQJCTB4ZDAwNgomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF9NQVNLCTB4MDBmZgomIzQzOyNkZWZpbmUgUlRMX0lOVF9IV19JRF84MTE2QUYJMHgwMDAwCiYjNDM7CiBzdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8gewogCXUzMiBtYXNrOwogCXUzMiB2YWw7CkBAIC0zMzQsMTEgJiM0MzszNTAsMTYgQEAgZW51bSBydGxfcmVnaXN0ZXJzIHsKIAlBTERQU19MVFIJPSAweGUwYTIsCiAJTFRSX09CRkZfTE9DSwk9IDB4ZTAzMiwKIAlMVFJfU05PT1AJPSAweGUwMzQsCiYjNDM7CVNFTkRfTFRSX01TRwk9IDB4ZTAzOCwKIAogI2RlZmluZSBBTERQU19MVFJfRU4JCQlCSVQoMCkKICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTgkJQklUKDApCiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOCQlCSVQoMTQpCiAjZGVmaW5lIExUUl9TTk9PUF9FTgkJCUdFTk1BU0soMTUsIDE0KQomIzQzOyNkZWZpbmUgTFRSX01TR19FTgkJCUJJVCgwKQomIzQzOyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfUE1fQ1NSCQkweDgwCiYjNDM7I2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMCTB4NDQKJiM0MzsjZGVmaW5lIFJUTF9QTV9EM0hPVAkJCUdFTk1BU0soMSwgMCkKIH07CiAKIGVudW0gcnRsODE2OF84MTAxX3JlZ2lzdGVycyB7CkBAIC03MjgsNiAmIzQzOzc0OSwxMiBAQCBlbnVtIHJ0bF9kYXNoX3R5cGUgewogCVJUTF9EQVNIXzI1X0JQLAogfTsKIAomIzQzO2VudW0gcnRsX3NmcF9tb2RlIHsKJiM0MzsJUlRMX1NGUF9OT05FLAomIzQzOwlSVExfU0ZQXzgxNjhfQUYsCiYjNDM7CVJUTF9TRlBfODEyN19BVEYsCiYjNDM7fTsKJiM0MzsKIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXZvaWQgX19pb21lbSAqbW1pb19hZGRyOwkvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi8KIAlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldjsKQEAgLTczNiw2ICYjNDM7NzYzLDcgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IG5hcGlfc3RydWN0IG5hcGk7CiAJZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjsKIAllbnVtIHJ0bF9kYXNoX3R5cGUgZGFzaF90eXBlOwomIzQzOwllbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTsKIAl1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgY3VyX3R4OyAvKiBJbmRleCBpbnRvIHRoZSBUeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi8KIAl1MzIgZGlydHlfdHg7CkBAIC03NTAsNiAmIzQzOzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXUzMiBpcnFfbWFzazsKIAlpbnQgaXJxOwogCXN0cnVjdCBjbGsgKmNsazsKJiM0MzsJaW50IHNwZWVkOwogCiAJc3RydWN0IHsKIAkJREVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7CkBAIC03NjIsNyAmIzQzOzc5MSw2IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgewogCXVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTsKIAl1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTsKIAl1bnNpZ25lZCBkYXNoX2VuYWJsZWQ6MTsKLQlib29sIHNmcF9tb2RlOjE7CiAJZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7CiAJc3RydWN0IHJ0bDgxNjlfY291bnRlcnMgKmNvdW50ZXJzOwogCXN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0OwpAQCAtNzc0LDYgJiM0Mzs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7CiAJc3RydWN0IHI4MTY5X2xlZF9jbGFzc2RldiAqbGVkczsKIAogCXUzMiBvY3BfYmFzZTsKJiM0MzsJc3RydWN0IHBoeWxpbmsgKnBoeWxpbms7CiYjNDM7CXN0cnVjdCBwaHlsaW5rX2NvbmZpZyBwaHlsaW5rX2NvbmZpZzsKJiM0MzsJc3RydWN0IHBoeWxpbmtfcGNzIHBjczsKJiM0MzsJc3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluOwomIzQzOwlzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHNhdmVkX3BhdXNlOwomIzQzOwlib29sIGp1bWJvX3BhdXNlX3NhdmVkOwogfTsKIAogdHlwZWRlZiB2b2lkICgqcnRsX2dlbmVyaWNfZmN0KShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCk7CkBAIC0xMTI4LDEwICYjNDM7MTE2Miw2IEBAIHN0YXRpYyBpbnQgcjgxNjhfcGh5X29jcF9yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MzIgcmVnKQogCWlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpCiAJCXJldHVybiAwOwogCi0JLyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovCi0JaWYgKHRwLSZndDtzZnBfbW9kZSAmYW1wOyZhbXA7IHJlZyA9PSAoT0NQX1NURF9QSFlfQkFTRSAmIzQzOyAyICogTUlJX1BIWVNJRDIpKQotCQlyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgJmFtcDsgMHhmZmZmOwotCiAJUlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyAmbHQ7Jmx0OyAxNSk7CiAKIAlyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCAmYW1wO3J0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID8KQEAgLTEyMTcsMTIgJiM0MzsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXI4MTY4X3BoeV9vY3Bfd3JpdGUodHAsIDB4YzgwNCwgKHZhbCAmYW1wOyB+MHgwMDBmKSB8IDB4MDAwYyk7CiB9CiAKLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKLXsKLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCi0JCXI4MTI3X3NmcF9pbml0XzEwZyh0cCk7Ci19Ci0KIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKQpAQCAtMTI4Myw2ICYjNDM7MTMwNywxNSBAQCBzdGF0aWMgdm9pZCBtYWNfbWN1X3dyaXRlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgcmVnLCBpbnQgdmFsdWUpCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtJmd0O29jcF9iYXNlICYjNDM7IHJlZywgdmFsdWUpOwogfQogCiYjNDM7c3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXJldHVybiB0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfUEtHX0RFVEVDVCkgJmFtcDsgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT0KJiM0MzsJCVJUTF9QS0dfREVURUNUXzgxMTZBRiAmYW1wOyZhbXA7CiYjNDM7CQkocjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKSAmYW1wOyBSVExfSU5UX0hXX0lEX01BU0spID09CiYjNDM7CQlSVExfSU5UX0hXX0lEXzgxMTZBRjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZykKIHsKIAlyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC0mZ3Q7b2NwX2Jhc2UgJiM0MzsgcmVnKTsKQEAgLTE1NzgsNiAmIzQzOzE2MTEsMjAgQEAgc3RhdGljIGJvb2wgcnRsX2Rhc2hfaXNfZW5hYmxlZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiB9CiAKJiM0MztzdGF0aWMgZW51bSBydGxfc2ZwX21vZGUgcnRsX2dldF9zZnBfbW9kZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CWlmIChydGxfaXNfODEyNSh0cCkpIHsKJiM0MzsJCXUxNiBkYXRhID0gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBSVExfSU5UX0hXX0lEKTsKJiM0MzsKJiM0MzsJCWlmICgoZGF0YSAmYW1wOyAweGZmKSA9PSAweDA3KQomIzQzOwkJCXJldHVybiBSVExfU0ZQXzgxMjdfQVRGOwomIzQzOwl9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7CiYjNDM7CQlyZXR1cm4gUlRMX1NGUF84MTY4X0FGOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiBSVExfU0ZQX05PTkU7CiYjNDM7fQomIzQzOwogc3RhdGljIGVudW0gcnRsX2Rhc2hfdHlwZSBydGxfZ2V0X2Rhc2hfdHlwZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewpAQCAtMTY3MywxNiAmIzQzOzE3MjAsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJ0bF9wY2lfY29tbWl0KHRwKTsKIH0KIAotc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCiAJaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM0IHx8CiAJICAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwotCQl9IGVsc2UgaWYgKHBoeWRldi0mZ3Q7c3BlZWQgPT0gU1BFRURfMTAwKSB7CiYjNDM7CQl9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkgewogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxZik7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTsKIAkJfSBlbHNlIHsKQEAgLTE2OTIsNyAmIzQzOzE3MzcsNyBAQCBzdGF0aWMgdm9pZCBydGxfbGlua19jaGdfcGF0Y2goc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCXJ0bF9yZXNldF9wYWNrZXRfZmlsdGVyKHRwKTsKIAl9IGVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8CiAJCSAgIHRwLSZndDttYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM2KSB7Ci0JCWlmIChwaHlkZXYtJmd0O3NwZWVkID09IFNQRUVEXzEwMDApIHsKJiM0MzsJCWlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTsKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpOwogCQl9IGVsc2UgewpAQCAtMTcwMCw3ICYjNDM7MTc0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJCXJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpOwogCQl9CiAJfSBlbHNlIGlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykgewotCQlpZiAocGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF8xMCkgewomIzQzOwkJaWYgKHNwZWVkID09IFNQRUVEXzEwKSB7CiAJCQlydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpOwogCQkJcnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7CiAJCX0gZWxzZSB7CkBAIC0yMDc0LDExICYjNDM7MjExOSwxMSBAQCBydGxfY29hbGVzY2VfaW5mbyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJY2kgPSBydGxfY29hbGVzY2VfaW5mb184MTY4XzgxMzY7CiAKIAkvKiBpZiBzcGVlZCBpcyB1bmtub3duIGFzc3VtZSBoaWdoZXN0IG9uZSAqLwotCWlmICh0cC0mZ3Q7cGh5ZGV2LSZndDtzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQomIzQzOwlpZiAodHAtJmd0O3NwZWVkID09IFNQRUVEX1VOS05PV04pCiAJCXJldHVybiBjaTsKIAogCWZvciAoOyBjaS0mZ3Q7c3BlZWQ7IGNpJiM0MzsmIzQzOykgewotCQlpZiAodHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQgPT0gY2ktJmd0O3NwZWVkKQomIzQzOwkJaWYgKHRwLSZndDtzcGVlZCA9PSBjaS0mZ3Q7c3BlZWQpCiAJCQlyZXR1cm4gY2k7CiAJfQogCkBAIC0yMjM2LDcgJiM0MzsyMjgxLDcgQEAgc3RhdGljIHZvaWQgcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7Ci0JdW5zaWduZWQgaW50IHNwZWVkID0gdHAtJmd0O3BoeWRldi0mZ3Q7c3BlZWQ7CiYjNDM7CXVuc2lnbmVkIGludCBzcGVlZCA9IHRwLSZndDtzcGVlZDsKIAl1bnNpZ25lZCBpbnQgdGltZXIgPSB0cC0mZ3Q7dHhfbHBpX3RpbWVyOwogCiAJaWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKQpAQCAtMjI1NCw3ICYjNDM7MjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpCiAJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC0mZ3Q7cGh5ZGV2LCBkYXRhKTsKJiM0MzsJcmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKQEAgLTIyNzAsNyAmIzQzOzIzMTUsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2VlZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgZXRodG9vbF9rZWVlICpkYXRhKQogCWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAotCXJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLSZndDtwaHlkZXYsIGRhdGEpOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtJmd0O3BoeWxpbmssIGRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9yaW5ncGFyYW0oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzMDEsMTMgJiM0MzsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQkJCSAgIHN0cnVjdCBldGh0b29sX3BhdXNlcGFyYW0gKmRhdGEpCiB7CiAJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwotCWJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlOwotCi0JcGh5X2dldF9wYXVzZSh0cC0mZ3Q7cGh5ZGV2LCAmYW1wO3R4X3BhdXNlLCAmYW1wO3J4X3BhdXNlKTsKIAotCWRhdGEtJmd0O2F1dG9uZWcgPSB0cC0mZ3Q7cGh5ZGV2LSZndDthdXRvbmVnOwotCWRhdGEtJmd0O3R4X3BhdXNlID0gdHhfcGF1c2UgPyAxIDogMDsKLQlkYXRhLSZndDtyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7CiYjNDM7CXBoeWxpbmtfZXRodG9vbF9nZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LApAQCAtMjMxOCw5ICYjNDM7MjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWlmIChkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTikKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcGh5X3NldF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYsIGRhdGEtJmd0O3J4X3BhdXNlLCBkYXRhLSZndDt0eF9wYXVzZSk7Ci0KLQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC0mZ3Q7cGh5bGluaywgZGF0YSk7CiB9CiAKIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKQEAgLTIzODYsMzQgJiM0MzsyNDI0LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCWxlMzJfdG9fY3B1KHRwLSZndDtjb3VudGVycy0mZ3Q7cnhfdW5rbm93bl9vcGNvZGUpOwogfQogCi1zdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LAotCQkJCSAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpCiYjNDM7c3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKIHsKIAlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpOwotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCWludCBkdXBsZXggPSBjbWQtJmd0O2Jhc2UuZHVwbGV4OwotCWludCBzcGVlZCA9IGNtZC0mZ3Q7YmFzZS5zcGVlZDsKLQotCWlmICghdHAtJmd0O3NmcF9tb2RlKQotCQlyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7Ci0KLQlpZiAoY21kLSZndDtiYXNlLmF1dG9uZWcgIT0gQVVUT05FR19ESVNBQkxFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCWlmICghcGh5X2NoZWNrX3ZhbGlkKHNwZWVkLCBkdXBsZXgsIHBoeWRldi0mZ3Q7c3VwcG9ydGVkKSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKLQltdXRleF9sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MzsJcmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCBjbWQpOwomIzQzO30KIAotCXBoeWRldi0mZ3Q7YXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTsKLQlwaHlkZXYtJmd0O3NwZWVkID0gc3BlZWQ7Ci0JcGh5ZGV2LSZndDtkdXBsZXggPSBkdXBsZXg7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldiwKJiM0MzsJCQkJICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7CiAKLQlydGxfc2ZwX2luaXQodHApOwomIzQzOwlyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19zZXQodHAtJmd0O3BoeWxpbmssIGNtZCk7CiYjNDM7fQogCi0JbXV0ZXhfdW5sb2NrKCZhbXA7cGh5ZGV2LSZndDtsb2NrKTsKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpOwogCi0JcmV0dXJuIDA7CiYjNDM7CXJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC0mZ3Q7cGh5bGluayk7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKQEAgLTI0MzEsMTAgJiM0MzsyNDYyLDEwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9vcHMgcnRsODE2OV9ldGh0b29sX29wcyA9IHsKIAkuZ2V0X3NzZXRfY291bnQJCT0gcnRsODE2OV9nZXRfc3NldF9jb3VudCwKIAkuZ2V0X2V0aHRvb2xfc3RhdHMJPSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLAogCS5nZXRfdHNfaW5mbwkJPSBldGh0b29sX29wX2dldF90c19pbmZvLAotCS5ud2F5X3Jlc2V0CQk9IHBoeV9ldGh0b29sX253YXlfcmVzZXQsCiYjNDM7CS5ud2F5X3Jlc2V0CQk9IHJ0bDgxNjlfbndheV9yZXNldCwKIAkuZ2V0X2VlZQkJPSBydGw4MTY5X2dldF9lZWUsCiAJLnNldF9lZWUJCT0gcnRsODE2OV9zZXRfZWVlLAotCS5nZXRfbGlua19rc2V0dGluZ3MJPSBwaHlfZXRodG9vbF9nZXRfbGlua19rc2V0dGluZ3MsCiYjNDM7CS5nZXRfbGlua19rc2V0dGluZ3MJPSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncywKIAkuc2V0X2xpbmtfa3NldHRpbmdzCT0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsCiAJLmdldF9yaW5ncGFyYW0JCT0gcnRsODE2OV9nZXRfcmluZ3BhcmFtLAogCS5nZXRfcGF1c2Vfc3RhdHMJPSBydGw4MTY5X2dldF9wYXVzZV9zdGF0cywKQEAgLTI0OTksOSAmIzQzOzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJdHAtJmd0O29jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTsKIAogCQkvKiBQSFkgc29mdCByZXNldCBtYXkgc3RpbGwgYmUgaW4gcHJvZ3Jlc3MgKi8KLQkJcGh5X3JlYWRfcG9sbF90aW1lb3V0KHRwLSZndDtwaHlkZXYsIE1JSV9CTUNSLCB2YWwsCi0JCQkJICAgICAgISh2YWwgJmFtcDsgQk1DUl9SRVNFVCksCi0JCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiYjNDM7CQlpZiAodHAtJmd0O3BoeWRldikKJiM0MzsJCQlwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtJmd0O3BoeWRldiwgTUlJX0JNQ1IsIHZhbCwKJiM0MzsJCQkJCSAgICAgICEodmFsICZhbXA7IEJNQ1JfUkVTRVQpLAomIzQzOwkJCQkJICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7CiAJfQogfQogCkBAIC0yNTM4LDYgJiM0MzsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZykKIAogc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKJiM0MzsJcGh5X2luaXRfaHcodHAtJmd0O3BoeWRldik7CiYjNDM7CXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7CiAJcjgxNjlfaHdfcGh5X2NvbmZpZyh0cCwgdHAtJmd0O3BoeWRldiwgdHAtJmd0O21hY192ZXJzaW9uKTsKIAogCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0Oz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikgewpAQCAtMjU1Miw5ICYjNDM7MjU4Niw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJICAgIHRwLSZndDtwY2lfZGV2LSZndDtzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMCkKIAkJcGh5X3dyaXRlX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTsKIAotCWlmICh0cC0mZ3Q7c2ZwX21vZGUpCi0JCXJ0bF9zZnBfaW5pdCh0cCk7Ci0KIAkvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovCiAJcGh5X3NwZWVkX3VwKHRwLSZndDtwaHlkZXYpOwogCkBAIC0yNjI3LDYgJiM0MzsyNjU4LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJYm9vbCBqdW1ibyA9IHRwLSZndDtkZXYtJmd0O210dSAmZ3Q7IEVUSF9EQVRBX0xFTjsKJiM0MzsJc3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBwYXVzZTsKIAlpbnQgcmVhZHJxID0gNDA5NjsKIAogCWlmIChqdW1ibyAmYW1wOyZhbXA7IHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzE3ICZhbXA7JmFtcDsKQEAgLTI2NTgsMTMgJiM0MzsyNjkwLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJaWYgKHBjaV9pc19wY2llKHRwLSZndDtwY2lfZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzdXBwb3J0c19nbWlpKQogCQlwY2llX3NldF9yZWFkcnEodHAtJmd0O3BjaV9kZXYsIHJlYWRycSk7CiAKLQkvKiBDaGlwIGRvZXNuJiMzOTt0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqLwogCWlmIChqdW1ibykgewotCQlsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJbGlua21vZGVfY2xlYXJfYml0KEVUSFRPT0xfTElOS19NT0RFX0FzeW1fUGF1c2VfQklULAotCQkJCSAgIHRwLSZndDtwaHlkZXYtJmd0O2FkdmVydGlzaW5nKTsKLQkJcGh5X3N0YXJ0X2FuZWcodHAtJmd0O3BoeWRldik7CiYjNDM7CQlpZiAoIXRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCkgewomIzQzOwkJCXN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzIGNtZDsKJiM0MzsJCQlib29sIGFkdl9wYXVzZSwgYWR2X2FzeW07CiYjNDM7CiYjNDM7CQkJcGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLSZndDtwaHlsaW5rLCAmYW1wO3RwLSZndDtzYXZlZF9wYXVzZSk7CiYjNDM7CiYjNDM7CQkJaWYgKHRwLSZndDtzYXZlZF9wYXVzZS5hdXRvbmVnKSB7CiYjNDM7CQkJCXBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLSZndDtwaHlsaW5rLCAmYW1wO2NtZCk7CiYjNDM7CQkJCWFkdl9wYXVzZSA9IGV0aHRvb2xfbGlua19rc2V0dGluZ3NfdGVzdF9saW5rX21vZGUoJmFtcDtjbWQsCiYjNDM7CQkJCQkJCQkJCSAgYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJCQkJCQkJCSAgUGF1c2UpOwomIzQzOwkJCQlhZHZfYXN5bSAgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKCZhbXA7Y21kLAomIzQzOwkJCQkJCQkJCQkgIGFkdmVydGlzaW5nLAomIzQzOwkJCQkJCQkJCQkgIEFzeW1fUGF1c2UpOwomIzQzOwomIzQzOwkJCQlpZiAoYWR2X3BhdXNlICZhbXA7JmFtcDsgIWFkdl9hc3ltKSB7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAxOwomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTsKJiM0MzsJCQkJfSBlbHNlIGlmIChhZHZfcGF1c2UgJmFtcDsmYW1wOyBhZHZfYXN5bSkgewomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTsKJiM0MzsJCQkJCXRwLSZndDtzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7CiYjNDM7CQkJCX0gZWxzZSBpZiAoIWFkdl9wYXVzZSAmYW1wOyZhbXA7IGFkdl9hc3ltKSB7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UucnhfcGF1c2UgPSAwOwomIzQzOwkJCQkJdHAtJmd0O3NhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTsKJiM0MzsJCQkJfSBlbHNlIHsKJiM0MzsJCQkJCXRwLSZndDtzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7CiYjNDM7CQkJCQl0cC0mZ3Q7c2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCXRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlwYXVzZS5hdXRvbmVnID0gdHAtJmd0O3NhdmVkX3BhdXNlLmF1dG9uZWc7CiYjNDM7CQlwYXVzZS5yeF9wYXVzZSA9IDA7CiYjNDM7CQlwYXVzZS50eF9wYXVzZSA9IDA7CiYjNDM7CiYjNDM7CQlwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtJmd0O3BoeWxpbmssICZhbXA7cGF1c2UpOwomIzQzOwl9IGVsc2UgaWYgKHRwLSZndDtqdW1ib19wYXVzZV9zYXZlZCkgewomIzQzOwkJcGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLSZndDtwaHlsaW5rLCAmYW1wO3RwLSZndDtzYXZlZF9wYXVzZSk7CiYjNDM7CQl0cC0mZ3Q7anVtYm9fcGF1c2Vfc2F2ZWQgPSBmYWxzZTsKIAl9CiB9CiAKQEAgLTI3ODAsNyAmIzQzOzI4NDcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCQlydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTsKIAogCWlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkgewotCQlwaHlfc3BlZWRfZG93bih0cC0mZ3Q7cGh5ZGV2LCBmYWxzZSk7CiYjNDM7CQlwaHlsaW5rX3NwZWVkX2Rvd24odHAtJmd0O3BoeWxpbmssIGZhbHNlKTsKIAkJcnRsX3dvbF9lbmFibGVfcngodHApOwogCX0KIH0KQEAgLTI4MzIsNiAmIzQzOzI4OTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCVJUTF9XMzIodHAsIDB4N2MsIHZhbCk7CiB9CiAKJiM0MztzdGF0aWMgaW50IHJ0bDgxNjlfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmcmVxICppZnIsIGludCBjbWQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7CiYjNDM7CiYjNDM7CWlmICghbmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiYjNDM7CXJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC0mZ3Q7cGh5bGluaywgaWZyLCBjbWQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0OwpAQCAtMzA5OCw4ICYjNDM7MzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpOwogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7CiAJCWJyZWFrOwotCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODoKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX1NOT09QLCAweDAwMDAsIExUUl9TTk9PUF9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmMsIDB4MTg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDgsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGMsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDIsIDB4ODgzYyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTYsIDB4OTAwMyk7CiYjNDM7CQlyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7CiYjNDM7CQlicmVhazsKJiM0MzsJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgogCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7CiAJCVJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pOwogCQlmYWxsdGhyb3VnaDsKQEAgLTMxMTksNiAmIzQzOzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAl9CiAJLyogY2hpcCBjYW4gdHJpZ2dlciBMVFIgKi8KIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTsKJiM0MzsJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTsKIH0KIAogc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCkBAIC0zMTUyLDYgJiM0MzszMjQ0LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiAJCXJ0bF9lbmFibGVfbHRyKHRwKTsKIAkJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OgomIzQzOwkJY2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOgogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDoKIAkJCS8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqLwogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5NCwgMHhmZjAwLCAwKTsKQEAgLTMxNjQsNiAmIzQzOzMyNTcsNyBAQCBzdGF0aWMgdm9pZCBydGxfaHdfYXNwbV9jbGtyZXFfZW5hYmxlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBib29sIGVuYWJsZSkKIAl9IGVsc2UgewogCQlzd2l0Y2ggKHRwLSZndDttYWNfdmVyc2lvbikgewogCQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6CiYjNDM7CQljYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCWNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOgogCQkJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA5MiwgMHgwMGZmLCAwKTsKIAkJCWJyZWFrOwpAQCAtMzY1Nyw2ICYjNDM7Mzc1MSwzNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTg2MCwgMHgwMDAwLCAweDAwODApOwogfQogCiYjNDM7c3RhdGljIHZvaWQgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IHNsb3QgPSBQQ0lfU0xPVChwZGV2LSZndDtkZXZmbik7CiYjNDM7CXN0cnVjdCBwY2lfYnVzICpidXMgPSBwZGV2LSZndDtidXM7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZmbjsKJiM0MzsJaW50IGZ1bmM7CiYjNDM7CWludCByZXQ7CiYjNDM7CXUzMiB2YWw7CiYjNDM7CiYjNDM7CWZvciAoZnVuYyA9IDI7IGZ1bmMgJmx0OyA4OyBmdW5jJiM0MzsmIzQzOykgewomIzQzOwkJZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7CiYjNDM7CiYjNDM7CQlyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgJmFtcDt2YWwpOwomIzQzOwkJaWYgKCFyZXQgJmFtcDsmYW1wOyAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHsKJiM0MzsJCQl2YWwgJmFtcDs9IH5QQ0lfUE1fQ1RSTF9QTUVfU1RBVFVTOwomIzQzOwkJCXZhbCAmYW1wOz0gfihQQ0lfUE1fQ1RSTF9TVEFURV9NQVNLIHwgUENJX1BNX0NUUkxfUE1FX0VOQUJMRSk7CiYjNDM7CQkJdmFsIHw9IChSVExfUE1fRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19QTV9DU1IsIHZhbCk7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsICZhbXA7dmFsKTsKJiM0MzsJCWlmICghcmV0ICZhbXA7JmFtcDsgIVBDSV9QT1NTSUJMRV9FUlJPUih2YWwpKSB7CiYjNDM7CQkJdmFsICZhbXA7PSB+KChQQ0lfRVhQX0xOS1NUQV9MQk1TIHwgUENJX0VYUF9MTktTVEFfTEFCUykgJmx0OyZsdDsgMTYpOwomIzQzOwkJCXZhbCB8PSBQQ0lfRVhQX0xOS0NUTF9BU1BNQzsKJiM0MzsJCQlwY2lfYnVzX3dyaXRlX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMLCB2YWwpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiB7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBlcGh5X2luZm8gZV9pbmZvXzgxMTdbXSA9IHsKQEAgLTM2OTMsMTIgJiM0MzszODE2LDE0IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCiAJcnRsX3BjaWVfc3RhdGVfbDJsM19kaXNhYmxlKHRwKTsKIAotCXJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC0mZ3Q7cGh5ZGV2LCAweDBjNDIsIDB4MTMpICZhbXA7IDB4M2ZmZjsKLQlpZiAocmdfc2F3X2NudCAmZ3Q7IDApIHsKLQkJdTE2IHN3X2NudF8xbXNfaW5pOwomIzQzOwlpZiAodHAtJmd0O3BoeWRldikgewomIzQzOwkJcmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLSZndDtwaHlkZXYsIDB4MGM0MiwgMHgxMykgJmFtcDsgMHgzZmZmOwomIzQzOwkJaWYgKHJnX3Nhd19jbnQgJmd0OyAwKSB7CiYjNDM7CQkJdTE2IHN3X2NudF8xbXNfaW5pOwogCi0JCXN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgJmFtcDsgMHgwZmZmOwotCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCQlzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpICZhbXA7IDB4MGZmZjsKJiM0MzsJCQlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTsKJiM0MzsJCX0KIAl9CiAKIAlyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDU2LCAweDAwZjAsIDB4MDAwMCk7CkBAIC0zNzExLDYgJiM0MzszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDk0LCAweDAwMDApOwogCXI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4YzA5ZSwgMHgwMDAwKTsKIAomIzQzOwlydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb24odHAtJmd0O3BjaV9kZXYpOwogCS8qIGZpcm13YXJlIGlzIGZvciBNQUMgb25seSAqLwogCXI4MTY5X2FwcGx5X2Zpcm13YXJlKHRwKTsKIH0KQEAgLTQxNDAsMTEgJiM0Mzs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KQogewogCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTsKIAomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcGh5bGlua19zdG9wKHRwLSZndDtwaHlsaW5rKTsKJiM0MzsKIAlXUklURV9PTkNFKGRldi0mZ3Q7bXR1LCBuZXdfbXR1KTsKIAluZXRkZXZfdXBkYXRlX2ZlYXR1cmVzKGRldik7CiAJcnRsX2p1bWJvX2NvbmZpZyh0cCk7CiAJcnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTsKIAomIzQzOwlpZiAobmV0aWZfcnVubmluZyhkZXYpKQomIzQzOwkJcGh5bGlua19zdGFydCh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NjksOCAmIzQzOzUwMDEsMTMgQEAgc3RhdGljIGlycXJldHVybl90IHJ0bDgxNjlfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pbnN0YW5jZSkKIAkJZ290byBvdXQ7CiAJfQogCi0JaWYgKHN0YXR1cyAmYW1wOyBMaW5rQ2hnKQotCQlwaHlfbWFjX2ludGVycnVwdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyBMaW5rQ2hnKSB7CiYjNDM7CQlpZiAodHAtJmd0O3BoeV9pcnFfZG9tYWluKQomIzQzOwkJCWdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEodHAtJmd0O3BoeV9pcnFfZG9tYWluLCAwKTsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDtzZnBfbW9kZSkKJiM0MzsJCQlwaHlsaW5rX21hY19jaGFuZ2UodHAtJmd0O3BoeWxpbmssCiYjNDM7CQkJCQkgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgJmFtcDsgTGlua1N0YXR1cykpOwomIzQzOwl9CiAKIAlydGxfaXJxX2Rpc2FibGUodHApOwogCW5hcGlfc2NoZWR1bGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CkBAIC00OTMwLDkgJiM0Mzs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KQogCiBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpCiB7Ci0JaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSkKLQkJcmV0dXJuOwotCiAJc3dpdGNoICh0cC0mZ3Q7bWFjX3ZlcnNpb24pIHsKIAljYXNlIFJUTF9HSUdBX01BQ19WRVJfMzQgLi4uIFJUTF9HSUdBX01BQ19WRVJfNTI6CiAJCS8qIEFkanVzdCBFRUUgTEVEIGZyZXF1ZW5jeSAqLwpAQCAtNDk2Myw0MCAmIzQzOzUwOTcsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKQogCX0KIH0KIAotc3RhdGljIHZvaWQgcjgxNjlfcGh5bGlua19oYW5kbGVyKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2KQotewotCXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYobmRldik7Ci0Jc3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7Ci0KLQlpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkgewotCQlydGxfbGlua19jaGdfcGF0Y2godHApOwotCQlydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtJmd0O3BoeWRldi0mZ3Q7ZW5hYmxlX3R4X2xwaSk7Ci0JCXBtX3JlcXVlc3RfcmVzdW1lKGQpOwotCX0gZWxzZSB7Ci0JCXBtX3J1bnRpbWVfaWRsZShkKTsKLQl9Ci0KLQlwaHlfcHJpbnRfc3RhdHVzKHRwLSZndDtwaHlkZXYpOwotfQotCiBzdGF0aWMgaW50IHI4MTY5X3BoeV9jb25uZWN0KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogewotCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC0mZ3Q7cGh5ZGV2OwotCXBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTsKIAlpbnQgcmV0OwogCi0JcGh5X21vZGUgPSB0cC0mZ3Q7c3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDoKLQkJICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTsKLQotCXJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC0mZ3Q7ZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlciwKLQkJCQkgcGh5X21vZGUpOwotCWlmIChyZXQpCiYjNDM7CXJldCA9IHBoeWxpbmtfY29ubmVjdF9waHkodHAtJmd0O3BoeWxpbmssIHRwLSZndDtwaHlkZXYpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQluZXRkZXZfZXJyKHRwLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGNvbm5lY3QgcGh5XG4mIzM0Oyk7CiAJCXJldHVybiByZXQ7Ci0KLQlpZiAoIXRwLSZndDtzdXBwb3J0c19nbWlpKQotCQlwaHlfc2V0X21heF9zcGVlZChwaHlkZXYsIFNQRUVEXzEwMCk7Ci0KLQlwaHlfYXR0YWNoZWRfaW5mbyhwaHlkZXYpOwomIzQzOwl9CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTUwMDcsMTAgJiM0Mzs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqLwogCWJpdG1hcF96ZXJvKHRwLSZndDt3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTsKIAotCXBoeV9zdG9wKHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlsaW5rX3N0b3AodHAtJmd0O3BoeWxpbmspOwogCiAJLyogUmVzZXQgU2VyRGVzIFBIWSB0byBicmluZyBkb3duIGZpYmVyIGxpbmsgKi8KLQlpZiAodHAtJmd0O3NmcF9tb2RlKQomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpCiAJCXJ0bF9zZnBfcmVzZXQodHApOwogCiAJcnRsODE2OV91cGRhdGVfY291bnRlcnModHApOwpAQCAtNTAzMiwxNCAmIzQzOzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCiAJcGNpX3NldF9tYXN0ZXIodHAtJmd0O3BjaV9kZXYpOwotCXBoeV9pbml0X2h3KHRwLSZndDtwaHlkZXYpOwotCXBoeV9yZXN1bWUodHAtJmd0O3BoeWRldik7Ci0JcnRsODE2OV9pbml0X3BoeSh0cCk7CiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KQomIzQzOwkJcnRsODE2OV9pbml0X3BoeSh0cCk7CiYjNDM7CiAJbmFwaV9lbmFibGUoJmFtcDt0cC0mZ3Q7bmFwaSk7CiAJZW5hYmxlX3dvcmsoJmFtcDt0cC0mZ3Q7d2sud29yayk7CiAJcnRsX3Jlc2V0X3dvcmsodHApOwogCi0JcGh5X3N0YXJ0KHRwLSZndDtwaHlkZXYpOwomIzQzOwlwaHlsaW5rX3N0YXJ0KHRwLSZndDtwaHlsaW5rKTsKIH0KIAogc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCkBAIC01MDU1LDcgJiM0Mzs1MTY0LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIAlmcmVlX2lycSh0cC0mZ3Q7aXJxLCB0cCk7CiAKLQlwaHlfZGlzY29ubmVjdCh0cC0mZ3Q7cGh5ZGV2KTsKJiM0MzsJcGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC0mZ3Q7cGh5bGluayk7CiAKIAlkbWFfZnJlZV9jb2hlcmVudCgmYW1wO3BkZXYtJmd0O2RldiwgUjgxNjlfUlhfUklOR19CWVRFUywgdHAtJmd0O1J4RGVzY0FycmF5LAogCQkJICB0cC0mZ3Q7UnhQaHlBZGRyKTsKQEAgLTUxMTIsOSAmIzQzOzUyMjEsMTEgQEAgc3RhdGljIGludCBydGxfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIGVycl9yZWxlYXNlX2Z3XzI7CiAKLQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7Ci0JaWYgKHJldHZhbCkKLQkJZ290byBlcnJfZnJlZV9pcnE7CiYjNDM7CWlmICh0cC0mZ3Q7cGh5ZGV2KSB7CiYjNDM7CQlyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7CiYjNDM7CQlpZiAocmV0dmFsKQomIzQzOwkJCWdvdG8gZXJyX2ZyZWVfaXJxOwomIzQzOwl9CiAKIAlydGw4MTY5X3VwKHRwKTsKIAlydGw4MTY5X2luaXRfY291bnRlcl9vZmZzZXRzKHRwKTsKQEAgLTUxOTAsOCAmIzQzOzUzMDEsMTEgQEAgc3RhdGljIGludCBydGw4MTY5X3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikKIAlydGxfcmFyX3NldCh0cCwgdHAtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIpOwogCV9fcnRsODE2OV9zZXRfd29sKHRwLCB0cC0mZ3Q7c2F2ZWRfd29sb3B0cyk7CiAKLQlpZiAodHAtJmd0O1R4RGVzY0FycmF5KQomIzQzOwlpZiAodHAtJmd0O1R4RGVzY0FycmF5KSB7CiYjNDM7CQlydG5sX2xvY2soKTsKIAkJcnRsODE2OV91cCh0cCk7CiYjNDM7CQlydG5sX3VubG9jaygpOwomIzQzOwl9CiAKIAluZXRpZl9kZXZpY2VfYXR0YWNoKHRwLSZndDtkZXYpOwogCkBAIC01Mjg4LDYgJiM0Mzs1NDAyLDggQEAgc3RhdGljIHZvaWQgcnRsX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXI4MTY5X3JlbW92ZV9sZWRzKHRwLSZndDtsZWRzKTsKIAogCXVucmVnaXN0ZXJfbmV0ZGV2KHRwLSZndDtkZXYpOwomIzQzOwlpZiAodHAtJmd0O3BoeWxpbmspCiYjNDM7CQlwaHlsaW5rX2Rlc3Ryb3kodHAtJmd0O3BoeWxpbmspOwogCiAJaWYgKHRwLSZndDtkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSkKIAkJcnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7CkBAIC01MzEwLDcgJiM0Mzs1NDI2LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBydGxfbmV0ZGV2X29wcyA9IHsKIAkubmRvX2ZpeF9mZWF0dXJlcwk9IHJ0bDgxNjlfZml4X2ZlYXR1cmVzLAogCS5uZG9fc2V0X2ZlYXR1cmVzCT0gcnRsODE2OV9zZXRfZmVhdHVyZXMsCiAJLm5kb19zZXRfbWFjX2FkZHJlc3MJPSBydGxfc2V0X21hY19hZGRyZXNzLAotCS5uZG9fZXRoX2lvY3RsCQk9IHBoeV9kb19pb2N0bF9ydW5uaW5nLAomIzQzOwkubmRvX2V0aF9pb2N0bAkJPSBydGw4MTY5X2lvY3RsLAogCS5uZG9fc2V0X3J4X21vZGUJPSBydGxfc2V0X3J4X21vZGUsCiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVIKIAkubmRvX3BvbGxfY29udHJvbGxlcgk9IHJ0bDgxNjlfbmV0cG9sbCwKQEAgLTU0MjMsMTEgJiM0Mzs1NTM5LDM5IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb193cml0ZV9yZWdfYzQ1KHN0cnVjdCBtaWlfYnVzICptaWlfYnVzLCBpbnQgYWRkciwKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyBpbnQgcnRsX3BoeV9pcnFfbWFwKHN0cnVjdCBpcnFfZG9tYWluICpkLCB1bnNpZ25lZCBpbnQgaXJxLAomIzQzOwkJCSAgIGlycV9od19udW1iZXJfdCBod2lycSkKJiM0Mzt7CiYjNDM7CWlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsICZhbXA7ZHVtbXlfaXJxX2NoaXAsIGhhbmRsZV9zaW1wbGVfaXJxKTsKJiM0MzsJaXJxX3NldF9jaGlwX2RhdGEoaXJxLCBkLSZndDtob3N0X2RhdGEpOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBydGxfcGh5X2lycV9kb21haW5fb3BzID0gewomIzQzOwkubWFwID0gcnRsX3BoeV9pcnFfbWFwLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBkYXRhOwomIzQzOwlpbnQgdmlycTsKJiM0MzsKJiM0MzsJaWYgKHRwLSZndDtwaHlfaXJxX2RvbWFpbikgewomIzQzOwkJdmlycSA9IGlycV9maW5kX21hcHBpbmcodHAtJmd0O3BoeV9pcnFfZG9tYWluLCAwKTsKJiM0MzsJCWlmICh2aXJxKQomIzQzOwkJCWlycV9kaXNwb3NlX21hcHBpbmcodmlycSk7CiYjNDM7CiYjNDM7CQlpcnFfZG9tYWluX3JlbW92ZSh0cC0mZ3Q7cGh5X2lycV9kb21haW4pOwomIzQzOwkJdHAtJmd0O3BoeV9pcnFfZG9tYWluID0gTlVMTDsKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLSZndDtwY2lfZGV2OwogCXN0cnVjdCBtaWlfYnVzICpuZXdfYnVzOwotCWludCByZXQ7CiYjNDM7CWludCByZXQsIHZpcnE7CiAKIAkvKiBPbiBzb21lIGJvYXJkcyB3aXRoIHRoaXMgY2hpcCB2ZXJzaW9uIHRoZSBCSU9TIGlzIGJ1Z2d5IGFuZCBtaXNzZXMKIAkgKiB0byByZXNldCB0aGUgUEhZIHBhZ2Ugc2VsZWN0b3IuIFRoaXMgcmVzdWx0cyBpbiB0aGUgUEhZIElEIHJlYWQKQEAgLTU0NDUsNyAmIzQzOzU1ODksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJbmV3X2J1cy0mZ3Q7bmFtZSA9ICYjMzQ7cjgxNjkmIzM0OzsKIAluZXdfYnVzLSZndDtwcml2ID0gdHA7CiAJbmV3X2J1cy0mZ3Q7cGFyZW50ID0gJmFtcDtwZGV2LSZndDtkZXY7Ci0JbmV3X2J1cy0mZ3Q7aXJxWzBdID0gUEhZX01BQ19JTlRFUlJVUFQ7CiAJbmV3X2J1cy0mZ3Q7cGh5X21hc2sgPSBHRU5NQVNLKDMxLCAxKTsKIAlzbnByaW50ZihuZXdfYnVzLSZndDtpZCwgTUlJX0JVU19JRF9TSVpFLCAmIzM0O3I4MTY5LSV4LSV4JiMzNDssCiAJCSBwY2lfZG9tYWluX25yKHBkZXYtJmd0O2J1cyksIHBjaV9kZXZfaWQocGRldikpOwpAQCAtNTQ1OCw2ICYjNDM7NTYwMSwyMSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApCiAJCW5ld19idXMtJmd0O3dyaXRlX2M0NSA9IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NTsKIAl9CiAKJiM0MzsJdHAtJmd0O3BoeV9pcnFfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFyKE5VTEwsIDEsCiYjNDM7CQkJCQkJICAgJmFtcDtydGxfcGh5X2lycV9kb21haW5fb3BzLCB0cCk7CiYjNDM7CWlmICghdHAtJmd0O3BoeV9pcnFfZG9tYWluKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJldCA9IGRldm1fYWRkX2FjdGlvbl9vcl9yZXNldCgmYW1wO3BkZXYtJmd0O2RldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJdmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC0mZ3Q7cGh5X2lycV9kb21haW4sIDApOwomIzQzOwlpZiAoIXZpcnEpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJbmV3X2J1cy0mZ3Q7aXJxWzBdID0gdmlycTsKJiM0MzsKIAlyZXQgPSBkZXZtX21kaW9idXNfcmVnaXN0ZXIoJmFtcDtwZGV2LSZndDtkZXYsIG5ld19idXMpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC01NDc0LDE2ICYjNDM7NTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKIAkJcmV0dXJuIC1FVU5BVENIOwogCX0KIAotCXRwLSZndDtwaHlkZXYtJmd0O21hY19tYW5hZ2VkX3BtID0gdHJ1ZTsKLQlpZiAocnRsX3N1cHBvcnRzX2VlZSh0cCkpCi0JCXBoeV9zdXBwb3J0X2VlZSh0cC0mZ3Q7cGh5ZGV2KTsKLQlwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLSZndDtwaHlkZXYpOwotCi0JLyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi8KLQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpCi0JCXBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLSZndDtwaHlkZXYsCi0JCQkJICAgICBFVEhUT09MX0xJTktfTU9ERV8yNTAwYmFzZVRfRnVsbF9CSVQpOwotCiAJLyogUEhZIHdpbGwgYmUgd29rZW4gdXAgaW4gcnRsX29wZW4oKSAqLwogCXBoeV9zdXNwZW5kKHRwLSZndDtwaHlkZXYpOwogCkBAIC01NTk5LDYgJiM0Mzs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQogCXJldHVybiBmYWxzZTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSwKJiM0MzsJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CXRwLSZndDtzcGVlZCA9IFNQRUVEX1VOS05PV047CiYjNDM7CXBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LAomIzQzOwkJCSAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSwKJiM0MzsJCQkgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CXN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApOwomIzQzOwomIzQzOwl0cC0mZ3Q7c3BlZWQgPSBzcGVlZDsKJiM0MzsJcnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7CiYjNDM7CiYjNDM7CXBtX3JlcXVlc3RfcmVzdW1lKGQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IHBoeWxpbmtfcGNzICpydGxfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiYjNDM7CQkJCQkgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fAomIzQzOwkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fAomIzQzOwkgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUikKJiM0MzsJCXJldHVybiAmYW1wO3RwLSZndDtwY3M7CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGxfbWFjX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJdTE2IHZhbCA9IDA7CiYjNDM7CiYjNDM7CXJhd19zcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3RwLSZndDttYWNfb2NwX2xvY2ssIGZsYWdzKTsKJiM0MzsJX19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0FERFJfUkVHLCBzZHNfcmVnKTsKJiM0MzsJX19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7CiYjNDM7CXZhbCA9IF9fcjgxNjhfbWFjX29jcF9yZWFkKHRwLCBPQ1BfU0RTX0RBVEFfUkVHKTsKJiM0MzsJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDt0cC0mZ3Q7bWFjX29jcF9sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiB2YWw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywKJiM0MzsJCQkJICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsCiYjNDM7CQkJCSAgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7CiYjNDM7CiYjNDM7CWlmICh0cC0mZ3Q7c2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikgewomIzQzOwkJdTE2IHN0YXQxOwomIzQzOwomIzQzOwkJc3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICYjNDM7IE1ESU9fU1RBVDEpOwomIzQzOwomIzQzOwkJaWYgKCEoc3RhdDEgJmFtcDsgTURJT19TVEFUMV9MU1RBVFVTKSkKJiM0MzsJCQlzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgJiM0MzsgTURJT19TVEFUMSk7CiYjNDM7CiYjNDM7CQlzdGF0ZS0mZ3Q7bGluayA9ICEhKHN0YXQxICZhbXA7IE1ESU9fU1RBVDFfTFNUQVRVUyk7CiYjNDM7CQlpZiAoIXN0YXRlLSZndDtsaW5rKQomIzQzOwkJCXJldHVybjsKJiM0MzsKJiM0MzsJCXN0YXRlLSZndDtkdXBsZXggPSBEVVBMRVhfRlVMTDsKJiM0MzsJCXN0YXRlLSZndDtzcGVlZCA9IFNQRUVEXzEwMDAwOwomIzQzOwl9IGVsc2UgewomIzQzOwkJdTE2IGJtc3IsIGxwYTsKJiM0MzsKJiM0MzsJCWJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICYjNDM7IE1JSV9CTVNSKTsKJiM0MzsJCWxwYSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzIyX0JBU0UgJiM0MzsgTUlJX0xQQSk7CiYjNDM7CQlwaHlsaW5rX21paV9jMjJfcGNzX2RlY29kZV9zdGF0ZShzdGF0ZSwgbmVnX21vZGUsIGJtc3IsIGxwYSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLAomIzQzOwkJCSAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsCiYjNDM7CQkJICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsCiYjNDM7CQkJICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpOwomIzQzOwomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpCiYjNDM7CQlyODEyN19zZnBfaW5pdF8xMGcodHApOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBydGw4MTY5X3Bjc192YWxpZGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgbG9uZyAqc3VwcG9ydGVkLAomIzQzOwkJCQljb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKQomIzQzO3sKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpOwomIzQzOwomIzQzOwlydGxfZW5hYmxlX3R4X2xwaSh0cCwgZmFsc2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdTMyIHRpbWVyLCBib29sIHR4X2Nsa19zdG9wKQomIzQzO3sKJiM0MzsJc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7CiYjNDM7CiYjNDM7CWlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpCiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CiYjNDM7CXJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cnVlKTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19tYWNfb3BzIHJ0bF9waHlsaW5rX21hY19vcHMgPSB7CiYjNDM7CS5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcywKJiM0MzsJLm1hY19jb25maWcgPSBydGxfbWFjX2NvbmZpZywKJiM0MzsJLm1hY19saW5rX2Rvd24gID0gcnRsX21hY19saW5rX2Rvd24sCiYjNDM7CS5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCwKJiM0MzsJLm1hY19kaXNhYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZGlzYWJsZV90eF9scGksCiYjNDM7CS5tYWNfZW5hYmxlX3R4X2xwaSA9IHJ0bF9tYWNfZW5hYmxlX3R4X2xwaSwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nIHJ0bDgxNjlfZ2V0X2xwaV9jYXBzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyBjYXBzID0gMDsKJiM0MzsKJiM0MzsJaWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSB8fCB0cC0mZ3Q7c2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwljYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7CiYjNDM7CiYjNDM7CS8qIG1pbWljIGJlaGF2aW9yIG9mIHI4MTI1L3I4MTI2IHZlbmRvciBkcml2ZXJzCiYjNDM7CSAqIFJUTF9HSUdBX01BQ19WRVJfNjEgZG9lc24mIzM5O3Qgc3VwcG9ydCAyLjVHIGVlZQomIzQzOwkgKi8KJiM0MzsJaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzYzKQomIzQzOwkJY2FwcyB8PSBNQUNfMjUwMEZEOwomIzQzOwlpZiAodHAtJmd0O21hY192ZXJzaW9uICZndDs9IFJUTF9HSUdBX01BQ19WRVJfNzApCiYjNDM7CQljYXBzIHw9IE1BQ181MDAwRkQ7CiYjNDM7CWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MCkKJiM0MzsJCWNhcHMgfD0gTUFDXzEwMDAwRkQ7CiYjNDM7CiYjNDM7CXJldHVybiBjYXBzOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IHBoeWxpbmtfcGNzX29wcyByODE2OV9wY3Nfb3BzID0gewomIzQzOwkucGNzX3ZhbGlkYXRlID0gcnRsODE2OV9wY3NfdmFsaWRhdGUsCiYjNDM7CS5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLAomIzQzOwkucGNzX2NvbmZpZyA9IHJ0bDgxNjlfcGNzX2NvbmZpZywKJiM0MzsJLnBjc19hbl9yZXN0YXJ0ID0gcnRsODE2OV9wY3NfYW5fcmVzdGFydCwKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBpbnQgcnRsX2luaXRfcGh5bGluayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBwaHlsaW5rICpwbDsKJiM0MzsJcGh5X2ludGVyZmFjZV90IHBoeV9tb2RlOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGV2ID0gJmFtcDt0cC0mZ3Q7ZGV2LSZndDtkZXY7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7CiYjNDM7CXRwLSZndDtwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApOwomIzQzOwl0cC0mZ3Q7cGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7CiYjNDM7CiYjNDM7CXN3aXRjaCAodHAtJmd0O3NmcF9tb2RlKSB7CiYjNDM7CWNhc2UgUlRMX1NGUF84MTY4X0FGOgomIzQzOwkJdHAtJmd0O3Bjcy5vcHMgPSAmYW1wO3I4MTY5X3Bjc19vcHM7CiYjNDM7CQl0cC0mZ3Q7cGh5bGlua19jb25maWcuZGVmYXVsdF9hbl9pbmJhbmQgPSB0cnVlOwomIzQzOwkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsJCWJyZWFrOwomIzQzOwljYXNlIFJUTF9TRlBfODEyN19BVEY6CiYjNDM7CQl0cC0mZ3Q7cGNzLm9wcyA9ICZhbXA7cjgxNjlfcGNzX29wczsKJiM0MzsJCXBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwR0JBU0VSOwomIzQzOwkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwMEZEOwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDsKJiM0MzsJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMCB8IE1BQ18xMDA7CiYjNDM7CiYjNDM7CQlpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApCiYjNDM7CQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfAomIzQzOwkJCQkJCQkgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEOwomIzQzOwkJZWxzZSBpZiAodHAtJmd0O21hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApCiYjNDM7CQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8CiYjNDM7CQkJCQkJCSAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDsKJiM0MzsJCWVsc2UgaWYgKHRwLSZndDttYWNfdmVyc2lvbiAmZ3Q7PSBSVExfR0lHQV9NQUNfVkVSXzYxKQomIzQzOwkJCXRwLSZndDtwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEOwomIzQzOwkJZWxzZQomIzQzOwkJCWlmICh0cC0mZ3Q7c3VwcG9ydHNfZ21paSkKJiM0MzsJCQkJdHAtJmd0O3BoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDsKJiM0MzsKJiM0MzsJCWlmICh0cC0mZ3Q7bWFjX3ZlcnNpb24gJmx0OyBSVExfR0lHQV9NQUNfVkVSXzYxKQomIzQzOwkJCXBoeV9tb2RlID0gdHAtJmd0O3N1cHBvcnRzX2dtaWkgPyBQSFlfSU5URVJGQUNFX01PREVfR01JSSA6CiYjNDM7CQkJCSAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7CiYjNDM7CQllbHNlCiYjNDM7CQkJcGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfSU5URVJOQUw7CiYjNDM7CQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlfX3NldF9iaXQocGh5X21vZGUsIHRwLSZndDtwaHlsaW5rX2NvbmZpZy5zdXBwb3J0ZWRfaW50ZXJmYWNlcyk7CiYjNDM7CXBsID0gcGh5bGlua19jcmVhdGUoJmFtcDt0cC0mZ3Q7cGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktJmd0O2Z3bm9kZSwKJiM0MzsJCQkgICAgcGh5X21vZGUsICZhbXA7cnRsX3BoeWxpbmtfbWFjX29wcyk7CiYjNDM7CWlmIChJU19FUlIocGwpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIocGwpOwomIzQzOwomIzQzOwl0cC0mZ3Q7cGh5bGluayA9IHBsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAljb25zdCBzdHJ1Y3QgcnRsX2NoaXBfaW5mbyAqY2hpcDsKQEAgLTU2NjcsNiAmIzQzOzYwMzYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJCQkgICAgIGV4dF94aWRfc3RyLCB4aWQpOwogCXRwLSZndDttYWNfdmVyc2lvbiA9IGNoaXAtJmd0O21hY192ZXJzaW9uOwogCXRwLSZndDtmd19uYW1lID0gY2hpcC0mZ3Q7ZndfbmFtZTsKJiM0MzsJdHAtJmd0O3NwZWVkID0gU1BFRURfVU5LTk9XTjsKIAogCS8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nCiAJICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuCkBAIC01Njc5LDEyICYjNDM7NjA0OSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogCX0KIAl0cC0mZ3Q7YXNwbV9tYW5hZ2VhYmxlID0gIXJjOwogCi0JaWYgKHJ0bF9pc184MTI1KHRwKSkgewotCQl1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTsKLQotCQlpZiAoKGRhdGEgJmFtcDsgMHhmZikgPT0gMHgwNykKLQkJCXRwLSZndDtzZnBfbW9kZSA9IHRydWU7Ci0JfQomIzQzOwl0cC0mZ3Q7c2ZwX21vZGUgPSBydGxfZ2V0X3NmcF9tb2RlKHRwKTsKIAogCXRwLSZndDtkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7CiAJdHAtJmd0O2Rhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApOwpAQCAtNTc4OCwxMyAmIzQzOzYxNTMsMjMgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgdHApOwogCi0JcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJcmMgPSBydGxfaW5pdF9waHlsaW5rKHRwKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIAomIzQzOwlpZiAodHAtJmd0O3NmcF9tb2RlID09IFJUTF9TRlBfTk9ORSkgewomIzQzOwkJcmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTsKJiM0MzsJCWlmIChyYykgewomIzQzOwkJCXBoeWxpbmtfZGVzdHJveSh0cC0mZ3Q7cGh5bGluayk7CiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiAJcmMgPSByZWdpc3Rlcl9uZXRkZXYoZGV2KTsKLQlpZiAocmMpCiYjNDM7CWlmIChyYykgewomIzQzOwkJcGh5bGlua19kZXN0cm95KHRwLSZndDtwaHlsaW5rKTsKIAkJcmV0dXJuIHJjOwomIzQzOwl9CiAKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHsKIAkJaWYgKHJ0bF9pc184MTI1KHRwKSkKQEAgLTU4MTcsNyAmIzQzOzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIAkJcnRsODE2OF9kcml2ZXJfc3RhcnQodHApOwogCX0KIAotCWlmIChwY2lfZGV2X3J1bl93YWtlKHBkZXYpKQomIzQzOwlpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSAmYW1wOyZhbXA7IHRwLSZndDtzZnBfbW9kZSAhPSBSVExfU0ZQXzgxMjdfQVRGKQogCQlwbV9ydW50aW1lX3B1dF9zeW5jKCZhbXA7cGRldi0mZ3Q7ZGV2KTsKIAogCXJldHVybiAwOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODI2NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDEwMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVhY2hpbmcgdGhlIGByODE2OWAgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgcGF0Y2ggZm9yIHRoZSBgcjgxNjlgIGRyaXZlciwgd2hpY2ggaXMgYSBSZWFsdGVrIEV0aGVybmV0IGRyaXZlci4gSXQmIzM5O3MgYSBzaWduaWZpY2FudCBjaGFuZ2UsIHN3aXRjaGluZyBpdCB0byB1c2UgdGhlIGBwaHlsaW5rYCBBUEkuIEl0JiMzOTtzIGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbnMgYW5kIHN1cHBvcnRpbmcgZGlmZmVyZW50IFNGUCBtb2RlcywgYmFzaWNhbGx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBvdmVyaGF1bC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHRlc3QgdGhpcyByZWxpYWJseT8gU3BlY2lmaWNhbGx5LCBjYW4gd2UgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8KClNpbmNlIGl0JiMzOTtzIGEgUENJIGRyaXZlciwgdGhhdCBtZWFucyBpdCYjMzk7cyBoYXJkd2FyZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluIGEgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgZW11bGF0ZSB0aGlzIG9yIGluamVjdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJ1dCBpcyBpdCBkZWVwIGVub3VnaCB0byByZWFsbHkgaGl0IHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvcj8KCk15IGluaXRpYWwgdGhvdWdodCB3YXMsICYjMzQ7SGV5LCBRRU1VIGhhcyBuZXR3b3JrIGRldmljZXMsIG1heWJlIGl0IGhhcyBgcnRsODE2OWAhJiMzNDsgIEkgaW1tZWRpYXRlbHkgc3RhcnRlZCBjaGVja2luZy4gSSByZW1lbWJlcmVkIGl0IGhhZCB0aGluZ3MgbGlrZSB0aGUgYHJ0bDgxMzlgICgxMC8xMDApIGFuZCBgZTEwMDBgLCBldGMuIFRoZW4sIEkgaGFkIHRvIHN0b3AgYW5kIGNsYXJpZnksIGRvZXMgUUVNVSByZWFsbHkgaGF2ZSBgcnRsODE2OWA/IEkgbG9va2VkIGFuZCBjb3VsZG4mIzM5O3QgZmluZCBhIGRpcmVjdCBgcnRsODE2OWAgaW4gUUVNVSYjMzk7cyBkZXZpY2UgbGlzdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBzdXBwb3J0LiBJdCBzb3VuZHMgbGlrZSBpZiBRRU1VICpkaWQqIGVtdWxhdGUgaXQsIGl0IHdvdWxkIGJlIGVhc3ksIGJ1dCBpZiBub3QsIGlzIHRoaXMgY29kZSBwYXRoIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGtub3cgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LCBvciBpZiBpdCYjMzk7cyBsaWtlIGEgVVNCIGdhZGdldCBvciBhIHNvZnR3YXJlIGRldmljZS4KCkkgc3RhcnRlZCB0aGlua2luZyBhYm91dCBQQ0kgSURzIGFuZCB3aGV0aGVyIHRoZXkgbWF0Y2hlZCBhbnl0aGluZyBpbiBRRU1VJiMzOTtzIGVtdWxhdGlvbi4gRXZlbiBpZiBRRU1VIGRvZXNuJiMzOTt0IGhhdmUgaXQgZGlyZWN0bHksIHN5emthbGxlciYjMzk7cyBgdmZpb2Agb3IgZ2VuZXJpYyBQQ0kgZnV6emluZyAqbWlnaHQqIHJlYWNoIGl0IGlmIHdlIGNhbiBnZXQgdGhlIGRldmljZSBpbnN0YW50aWF0ZWQgc29tZWhvdy4gQnV0IGJhc2VkIG9uIHRoZSBwcm9tcHQmIzM5O3MgcnVsZXMsIGl0IHNvdW5kcyBsaWtlIGlmIGl0JiMzOTtzIGEgaGFyZHdhcmUtc3BlY2lmaWMgUENJIGRyaXZlciBhbmQgdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0b3IgZm9yIGl0LCBpdCBtaWdodCBiZSB1bnJlYWNoYWJsZS4KCkkgd2FzIHRoaW5raW5nIEkgY2FuIHByb2JlIGZvciBpdCBpbiBRRU1VLiBUaGVuLCBJIGhhZCB0aGUgaWRlYSB0byB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSYjMzk7cyBhbnkgUENJIElEIGZvciBgcjgxNjlgIHRoYXQgbWF0Y2hlcyBhIGtub3duIFFFTVUgZGV2aWNlLCBvciBpZiB0aGVyZSYjMzk7cyBhIHdheSB0byB0cmlnZ2VyIGl0LiBUaGVuIEkgdGhvdWdodCBhYm91dCBgc3l6X2t2bV9zZXR1cF9jcHVgLCBldGMuIHRvIHNlZSBpZiBpdCBtYWtlcyBhIGRpZmZlcmVuY2UsIGJ1dCBJIG5lZWQgdG8ga25vdyBpZiBRRU1VIGNhbiBlbXVsYXRlIHRoZSBkZXZpY2UuCgpMZXQgbWUgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIGByODE2OWAgUENJIElEcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtSVEw4MTY5JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnPTg0PWNvbmZpZyBSODE2OVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05NC1cdCAgdGhlIGZvbGxvd2luZyBmYW1pbGllczpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZzo5NTpcdCAgUlRMODE2OSBHaWdhYml0IEV0aGVybmV0XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctOTYtXHQgIFJUTDgxNjggR2lnYWJpdCBFdGhlcm5ldFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTExNT1zdGF0aWMgY29uc3Qgc3RydWN0IHJ0bF9jaGlwX2luZm8ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIyMi1cdC8qIDgxMTAgZmFtaWx5LiAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjIzOlx0eyAweGZjOCwgMHg5ODAsXHRSVExfR0lHQV9NQUNfVkVSXzA2LCBcJiMzNDtSVEw4MTY5c2MvODExMHNjXCYjMzQ7IH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMjQ6XHR7IDB4ZmM4LCAweDE4MCxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFwmIzM0O1JUTDgxNjlzYy84MTEwc2NcJiMzNDsgfSxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNTpcdHsgMHhmYzgsIDB4MTAwLFx0UlRMX0dJR0FfTUFDX1ZFUl8wNCwgXCYjMzQ7UlRMODE2OXNiLzgxMTBzYlwmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI2LVx0eyAweGZjOCwgMHgwNDAsXHRSVExfR0lHQV9NQUNfVkVSXzAzLCBcJiMzNDtSVEw4MTEwc1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjI3Olx0eyAweGZjOCwgMHgwMDgsXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcJiMzNDtSVEw4MTY5c1wmIzM0OyB9LFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI4LVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU2OTA9c3RhdGljIGludCBydGxfanVtYm9fbWF4KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU2OTYtXHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1Njk3Olx0LyogUlRMODE2OSAqL1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTY5OC1cdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8wMiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl8wNjpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAwNjoyNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDYzNAoJCQkJCQkJb3V0cHV0OiA3OQoJCQkJCQkJdGhvdWdodHM6IDc2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipSZWFjaGluZyB0aGUgYHJ0bDgxNjlgIERyaXZlciB3aXRoIFN5emthbGxlcioqCgpPa2F5LCBzbyB0aGUgcXVlc3Rpb24gaXMsIGNhbiB3ZSBhY3R1YWxseSByZWFjaCB0aGlzIGBydGw4MTY5YCBkcml2ZXIgd2l0aCB0aGUgZXhpc3Rpbmcgc3l6a2FsbGVyIHNldHVwLCBnaXZlbiB0aGF0IGl0JiMzOTtzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBwcm9tcHQgaXMgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzPyBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIHNvbWUga2luZCBvZiB2aXJ0dWFsIGhhcmR3YXJlIGZvciBgcnRsODE2OWA/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzLiBCdXQsIGluaXRpYWxseSwgSSB3YXNuJiMzOTt0IHN1cmUgaWYgaXQgZnVsbHkgZW11bGF0ZWQgdGhlIE1NSU8vUElPIHNwYWNlIOKAkyBzZWVtcyBsaWtlIGl0IGNvdWxkIGp1c3QgcmV0dXJuIHJhbmRvbSBkYXRhIGZvciByZWFkcy4KCldhaXQsIHRoYXQmIzM5O3Mgd3JvbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBQQ0kgZHJpdmVycyEgSXQgZW11bGF0ZXMgdGhlIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8vUElPIHJlYWRzIGFuZCBjYW4gdXNlIHNwZWNpZmljIGZ1enppbmcgdGVjaG5pcXVlcyBmb3IgcmVhZHMvd3JpdGVzLiBIbW0sIGJ1dCB3aWxsIHRoaXMgZnV6emluZyBhY3R1YWxseSBkaWcgZGVlcCBlbm91Z2ggaW50byBgcjgxNjlfbWFpbi5jYD8gR29vZCBxdWVzdGlvbi4gSSBrbm93IHRoYXQgYHZmaW9gIG9yIGdlbmVyaWMgYHBjaWAgZnV6emluZyBpbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUgUENJIGRyaXZlcnMuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHNwZWNpZmljIHBhdGNoIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC4KClJpZ2h0LCB0aGUgcGF0Y2ggaXMgYSBtYWpvciByZWZhY3RvcmluZyB0byB1c2UgYHBoeWxpbmtgLiBJZiB0aGUgUENJIGRyaXZlcnMgYXJlIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBmdXp6aW5nLCB0aGVuIHllcy4gV2UgbmVlZCB0byBjaGVjayBpZiBgQ09ORklHX1I4MTY5YCBpcyBldmVuIGVuYWJsZWQgaW4gdGhlIHN5emthbGxlciBjb25maWd1cmF0aW9uLiBVc3VhbGx5LCBzeXprYWxsZXIgZW5hYmxlcyBhIGxvdCBvZiBuZXR3b3JrIGRyaXZlcnMgZm9yIHRoaXMgZXhhY3QgdHlwZSBvZiBQQ0kgZnV6emluZy4gTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGVyZSBhcmVuJiMzOTt0IGFueSB3ZWlyZCBjb25maWcgc2V0dGluZ3MuIFllcCwgYENPTkZJR19SODE2OWAgaXMgdGhlIG1haW4gb25lLgoKT2theSwgYmFjayB0byB0aGUgcHJvbXB0LiBJdCBzYXlzICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLiYjMzQ7IE5vdywgaXMgdGhlIHN5emthbGxlciBQQ0kgZnV6emVyIGNvbnNpZGVyZWQgJiMzNDtzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSYjMzQ7PyBJIHRoaW5rIGl0IGlzLCBiZWNhdXNlIHN5emthbGxlciBkb2VzIGhhdmUgYHN5el9nZW5fcGNpYCBhbmQgYHN5el9wY2lfZGV2aWNlYCB3aGljaCBlZmZlY3RpdmVseSBlbXVsYXRlIFBDSSBkZXZpY2VzIGFuZCBmdXp6IHRoZWlyIGRyaXZlcnMuCgpJZiB0aGlzIGlzIGEgcmVhbCBoYXJkd2FyZSBkcml2ZXIsIGFuZCB0aGVyZSYjMzk7cyBubyBRRU1VIGRldmljZSwgY291bGQgaXQgZXZlbiBiZSByZWFjaGVkPyBTeXprYWxsZXImIzM5O3MgYHN5el9nZW5fcGNpYCBvciBgc3l6X3BjaV9kZXZpY2VgIGNhbiB0cmlnZ2VyIHRoZSBgcHJvYmVgIGZ1bmN0aW9uIG9mIGFueSBQQ0kgZHJpdmVyIHNpbXBseSBieSBwcm92aWRpbmcgdGhlIG1hdGNoaW5nIFBDSSBJRC4gVGhlbiB0aGUgZHJpdmVyIHdpbGwgbWFwIHRoZSBNTUlPIHJlZ2lvbnMsIGFuZCB3aGVuIHRoZSBkcml2ZXIgYXR0ZW1wdHMgdG8gcmVhZCBmcm9tIHRoZXNlIHJlZ2lvbnMsIHRoZSBmdXp6ZXIgcHJvdmlkZXMgdGhlIHJhbmRvbSBkYXRhLiBUaGlzLCBpbiBlc3NlbmNlLCBsZXRzIHVzIGZ1enogdGhlIGRyaXZlciYjMzk7cyBpbml0aWFsaXphdGlvbiBhbmQgaW50ZXJydXB0IGhhbmRsaW5nLiBCdXQgYWdhaW4sIGlzIGl0IHRydWx5ICYjMzQ7aW1wb3NzaWJsZSB0byByZWFjaCYjMzQ7PwoKTGV0JiMzOTtzIHNlZSBpZiBgcjgxNjlgIGlzIGNvbW1vbmx5IGZ1enplZC4gQWN0dWFsbHksIEkgcmVtZW1iZXIgbWFueSBoYXJkd2FyZSBkcml2ZXJzIGFyZSBjb25zaWRlcmVkICYjMzQ7dW5yZWFjaGFibGUmIzM0OyBpZiB0aGV5IHJlcXVpcmUgKmFjdHVhbCogaGFyZHdhcmUgYW5kIHRoZXJlJiMzOTtzIG5vIGVtdWxhdG9yLiBCdXQgdGhpcyBQQ0kgZnV6emVyICppcyogYW4gZW11bGF0b3IsIG9mIHNvcnRzLiBOb3csIGxvb2tpbmcgYXQgdGhlIHdvcmRpbmcgb2YgdGhlIHByb21wdCBhZ2Fpbi4uLiBpdCYjMzk7cyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBldmVuICpzb2Z0d2FyZSotZW11bGF0ZWQgaGFyZHdhcmUuIFN5emthbGxlciYjMzk7cyBQQ0kgZnV6emVyIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgUENJIGdhZGdldC4gU28sIHllcywgaXQgY291bnRzIQoKT2theSwgSSYjMzk7bGwgYXNzdW1lIHRoYXQgaXQgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBgcGh5bGlua2AgaW50ZWdyYXRpb24uIE15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGluY2x1ZGU6IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX3BoeWxpbmtfbWFjX29wc2AsIGFuZCBgcjgxNjlfcGNzX29wc2AuIEkgc2hvdWxkIHRyeSB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyB0aGF0IHdlcmUgYWRkZWQgb3IgbW9kaWZpZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IHBoeWxpbmtfcGNzIFxcKikgcnRsW2EtekEtWjAtOV9dKl9wY3NfW2EtekEtWjAtOV9dKiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU3ODk9c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgwMzpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODA0LVx0XHRcdFx0ICB1bnNpZ25lZCBpbnQgbmVnX21vZGUsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjU4MzI6c3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMy1cdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4NDQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODQ1OnN0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4NDYtXHRcdFx0XHRjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODUwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTg1MTpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1Mi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4NTMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBhdGNoIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhpcyBwYXRjaCBhY3R1YWxseSAqZG9lcyouIExldCYjMzk7cyBwdWxsIHVwIHRoZSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGhhdmUgYmVlbiB0b3VjaGVkIG9yIGFkZGVkLiBBbHJpZ2h0LCBoZXJlJiMzOTtzIHRoZSBsaXN0OiBgcnRsX2luaXRfcGh5bGlua2AsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAsIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYCwgYHJ0bF9waHlfaXJxX21hcGAsIGBydGxfcGh5X2lycV9jbGVhbnVwYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X253YXlfcmVzZXRgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYC4gVGhhdCYjMzk7cyBxdWl0ZSBhIGNvbXByZWhlbnNpdmUgc2V0IG9mIGNoYW5nZXMuIEltbWVkaWF0ZWx5LCB0aGUgaW5jbHVzaW9uIG9mIGBwaHlsaW5rYCBmdW5jdGlvbnMganVtcHMgb3V0LgoKTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGVwZW5kZW5jaWVzIGFuZCBob3cgdGhpcyBpbnRlZ3JhdGVzIGludG8gdGhlIGV4aXN0aW5nIGRyaXZlciBmcmFtZXdvcmsuIEkgbmVlZCB0byBtYWtlIHN1cmUgYENPTkZJR19SODE2OWAgaXMgc3RpbGwgdGhlIG1haW4gY29uZmlndXJhdGlvbiBvcHRpb24gdG8gZW5hYmxlIHRoaXMuIEJ1dCB3YWl0Li4uIGRpZG4mIzM5O3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IGBQSFlMSU5LYCBiZWluZyBzZWxlY3RlZCBieSBgUjgxNjlgIG5vdz8gUmlnaHQuIExldCYjMzk7cyBkb3VibGUgY2hlY2sgdGhlIEtjb25maWcgZmlsZSBmb3IgdGhlIFI4MTY5IGRyaXZlciwgd2hpY2ggc2hvdWxkIGJlIGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdgIHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gbG9naWMgaGVyZS4gVGhpcyB3aWxsIGRldGVybWluZSBob3cgYnJvYWRseSB0aGlzIHBhdGNoIGltcGFjdHMgb3RoZXIgc3lzdGVtcyBvciBtb2R1bGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBSODE2OSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc9NzQ9Y29uZmlnIDgxMzlfT0xEX1JYX1JFU0VUXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTgzLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjg0OmNvbmZpZyBSODE2OVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg1LVx0dHJpc3RhdGUgXCYjMzQ7UmVhbHRlayA4MTY5LzgxNjgvODEwMS84MTI1IGV0aGVybmV0IHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWctMTAyLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMzpjb25maWcgUjgxNjlfTEVEU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTEwNC1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4ODYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRm9jdXNpbmcgb24gdGhlIFI4MTY5IERyaXZlciBmb3IgRnV6emluZyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlJiMzOTtyZSBsb29raW5nIGF0IGZ1enppbmcgdGhlIGBSODE2OWAgZHJpdmVyLCBzbyBJIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBpbXBvcnRhbnQgYml0cy4gRmlyc3QsIGBSODE2OWAgaXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb24sIHRoYXQmIzM5O3Mgb2J2aW91cy4gTm93LCBJIG5lZWQgdG8gY2hhcnQgYSBjb3Vyc2UgZm9yIG91ciBmdXp6aW5nIHRhcmdldHMuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQgaXMgY2FsbGVkIGZyb20gYHJ0bF9pbml0X29uZWAsIHdoaWNoIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCwgYXMgbG9uZyBhcyB3ZSBjYW4gcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEFuZCB5ZXMsIGBydGxfaW5pdF9vbmVgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBQQ0kgZnV6emluZy4KCk5vdywgbGV0JiMzOTtzIGFzc2VtYmxlIGEgbGlzdCBvZiBmb2N1cyBzeW1ib2xzLiBJIHRoaW5rIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHRhcmdldCB3aWxsIGJlOgoKKiAgIGBydGxfaW5pdF9waHlsaW5rYAoqICAgYHJ0bF9tYWNfbGlua19kb3duYAoqICAgYHJ0bF9tYWNfbGlua191cGAKKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgCiogICBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYAoqICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAKKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2AKKiAgIGBydGxfcGh5X2lycV9tYXBgCiogICBgcnRsX3BoeV9pcnFfY2xlYW51cGAKKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCiogICBgcnRsX2dldF9zZnBfbW9kZWAKKiAgIGBydGw4MTY5X2lvY3RsYAoqICAgYHJ0bDgxNjlfbndheV9yZXNldGAKKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2AKKiAgIGBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5nc2AKCkxldCYjMzk7cyByZWZpbmUgdGhhdCBsaXN0IGJ5IGN1dHRpbmcgb3V0IHVubmVjZXNzYXJ5IGNydWZ0LgoKKiAgIGBydGxfaW5pdF9waHlsaW5rYAoqICAgYHJ0bF9tYWNfbGlua19kb3duYAoqICAgYHJ0bF9tYWNfbGlua191cGAKKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgCiogICBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYAoqICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgCiogICBgcnRsX21hY19kaXNhYmxlX3R4X2xwaWAKKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2AKKiAgIGBydGxfcGh5X2lycV9tYXBgCiogICBgcnRsX3BoeV9pcnFfY2xlYW51cGAKKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCiogICBgcnRsX2dldF9zZnBfbW9kZWAKKiAgIGBydGw4MTY5X2lvY3RsYAoKTm93LCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlJiMzOTt2ZSBnb3QgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgY292ZXJlZC4gYENPTkZJR19SODE2OWAgaXMgdGhlIGJpZyBvbmUsIGJ1dCBhcmUgdGhlcmUgYW55IG90aGVycyB3ZSBuZWVkPyBgUEhZTElOS2AgaXMgc2VsZWN0ZWQgYnkgYFI4MTY5YCwgc28gdGhhdCYjMzk7cyB0YWtlbiBjYXJlIG9mLiBEb2VzIHRoaXMgdGhpbmcgcmVxdWlyZSBgQ09ORklHX1BDSWA/IEl0IGRvZXMsIGJ1dCBsdWNraWx5LCB0aGF0JiMzOTtzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSYjMzk7bSBtaXNzaW5nPyBJIHNob3VsZCBjaGVjayB0aGUgYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGVgIHRvIGNvbmZpcm0uIFRoYXQgc2hvdWxkIGJlIHRoZSBkZWZpbml0aXZlIHNvdXJjZSBvZiB0cnV0aC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cjgxNjkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfODEzOVRPTykgJiM0Mzs9IDgxMzl0b28ub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo4OnI4MTY5LXkgJiM0Mzs9IHI4MTY5X21haW4ubyByODE2OV9maXJtd2FyZS5vIHI4MTY5X3BoeV9jb25maWcub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo5OnI4MTY5LSQoQ09ORklHX1I4MTY5X0xFRFMpICYjNDM7PSByODE2OV9sZWRzLm9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1I4MTY5KSAmIzQzOz0gcjgxNjkub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfUlRBU0UpICYjNDM7PSBydGFzZS9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMDY6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU0NDgKCQkJCQkJCW91dHB1dDogMjkwCgkJCQkJCQl0aG91Z2h0czogMTQxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbjogYFI4MTY5YCBEcml2ZXIqKgoKT2theSwgc28gaXQgbG9va3MgbGlrZSBgUjgxNjlgIGlzIHRoZSBvbmx5IGRyaXZlciBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBMZXQmIzM5O3MgZGlnIGluLiBJJiMzOTt2ZSBnb3QgdG8gcmV2aWV3IHRoaXMgcGF0Y2ggY2FyZWZ1bGx5LiBJdCBzZWVtcyBsaWtlIGl0JiMzOTtzIGEgbWlncmF0aW9uLCByZXBsYWNpbmcgZGlyZWN0IGBwaHlkZXZgIGNhbGxzIHdpdGggdGhlIGBwaHlsaW5rYCBBUEkgY2FsbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBhZGRzIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBoeWxpbmsgaW50ZWdyYXRpb246IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9waHlsaW5rX21hY19vcHNgLCBgcjgxNjlfcGNzX29wc2AsIGBydGxfcGh5X2lycV9kb21haW5fb3BzYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBhbmQgc2V2ZXJhbCBgcnRsODE2OV9wY3NfKmAgYW5kIGBydGxfbWFjXypgIGZ1bmN0aW9ucywgaW5jbHVkaW5nIExQSSBjb250cm9sLiBJdCBhbHNvIG1vZGlmaWVzIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIHRoZSBga3NldHRpbmdzYCBmdW5jdGlvbnMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGFyZSB0aGVzZSBuZXcgZnVuY3Rpb25zIHJlYWNoYWJsZT8gTGV0JiMzOTtzIHRyYWNlIGl0LiBJdCBzZWVtcyB0aGF0IHRocm91Z2ggUENJIGZ1enppbmcsIGBydGxfaW5pdF9vbmVgIGlzIGNhbGxlZCB3aGljaCB0aGVuIGNhbGxzIGBydGxfaW5pdF9waHlsaW5rYC4gQWZ0ZXIgdGhhdCwgYHBoeWxpbmtfY3JlYXRlYCBnZXRzIGNhbGxlZCwgYW5kIGlmIHRoZSBuZXRkZXYgaXMgcmVnaXN0ZXJlZCwgYHJ0bF9vcGVuYCBjYW4gYmUgdHJpZ2dlcmVkIHZpYSBuZXRsaW5rL2lvY3RsLiBgcnRsX29wZW5gIHRoZW4gY2FsbHMgYHI4MTY5X3BoeV9jb25uZWN0YCwgd2hpY2ggaW4gdHVybiBjYWxscyBgcGh5bGlua19jb25uZWN0X3BoeWAgYW5kIGBwaHlsaW5rX3N0YXJ0YC4gVGhpcyB3aWxsIGRyaXZlIHRoZSBwaHlsaW5rIHN0YXRlIG1hY2hpbmUsIGFuZCB0aGF0IHdpbGwgY2FsbCBhIGxvdCBvZiB0aGUgbmV3IGZ1bmN0aW9ucyB3ZSYjMzk7cmUgbG9va2luZyBhdCwgZnVuY3Rpb25zIGxpa2UgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYW5kIHNvIG9uLiBBbHNvLCB0aGUgYHJ0bDgxNjlfaW9jdGxgIGlzIHJlYWNoYWJsZSB2aWEgYFNJT0NHTUlJUEhZYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBBbmQgdGhlIGBrc2V0dGluZ3NgIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wuCgpHaXZlbiB0aGUgcGF0aGZpbmRpbmcsIHRoaXMgbG9va3MgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcuCgpBbHJpZ2h0LCB0aW1lIHRvIGJ1aWxkIGEgbGlzdCBvZiBmb2N1c2VkIHN5bWJvbHMuIExldCYjMzk7cyBzZWUuLi4KCkkmIzM5O3ZlIGluaXRpYWxseSBpZGVudGlmaWVkIGEgZ29vZCBsaXN0OgoKYHJ0bF9pbml0X3BoeWxpbmtgCmBydGxfbWFjX2xpbmtfZG93bmAKYHJ0bF9tYWNfbGlua191cGAKYHJ0bF9tYWNfc2VsZWN0X3Bjc2AKYHJ0bDgxNjlfc2RzX3JlYWRgCmBydGw4MTY5X3Bjc19nZXRfc3RhdGVgCmBydGw4MTY5X3Bjc19jb25maWdgCmBydGxfbWFjX2VuYWJsZV90eF9scGlgCmBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYApgcnRsODE2OV9nZXRfbHBpX2NhcHNgCmBydGxfcGh5X2lycV9tYXBgCmBydGxfcGh5X2lycV9jbGVhbnVwYApgcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uYApgcnRsX2dldF9zZnBfbW9kZWAKYHJ0bDgxNjlfaW9jdGxgCgpPa2F5LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgd2UgYXJlbiYjMzk7dCB3YXN0aW5nIGZ1enppbmcgY3ljbGVzIG9uIGRlYWQgY29kZS4gYHJ0bF9tYWNfY29uZmlnYCBpcyBlbXB0eSwgc28gd2UgZG9uJiMzOTt0IG5lZWQgdGhhdC4gVGhlIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAgYW5kIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCBzZWVtIHRvIGhhdmUgbm8gZnVuY3Rpb25hbGl0eSwgc28gd2UgY2FuIHByb2JhYmx5IG9taXQgdGhlbSB0b28uIExldCYjMzk7cyBrZWVwIGBydGxfaXNfODExNmFmYCBhcyBpdCYjMzk7cyBhIHNtYWxsIGhlbHBlciwgbWF5YmUgaXQmIzM5O2xsIG1ha2Ugc29tZSBmdXp6aW5nLiBUaGUgYG53YXlfcmVzZXRgIGFuZCBga3NldHRpbmdzYCBmdW5jdGlvbnMgYXJlIGp1c3QgdGhpbiB3cmFwcGVycywgc28gdGhvc2UgYXJlbiYjMzk7dCB3b3J0aCB0aGUgZWZmb3J0LgoKU28sIGhlcmUmIzM5O3MgdGhlICpmaW5hbCogbGlzdCBvZiBmdW5jdGlvbnMgdG8gZm9jdXMgb246CgpgcnRsX2luaXRfcGh5bGlua2AKYHJ0bF9tYWNfbGlua19kb3duYApgcnRsX21hY19saW5rX3VwYApgcnRsX21hY19zZWxlY3RfcGNzYApgcnRsODE2OV9zZHNfcmVhZGAKYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWAKYHJ0bDgxNjlfcGNzX2NvbmZpZ2AKYHJ0bF9tYWNfZW5hYmxlX3R4X2xwaWAKYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgCmBydGw4MTY5X2dldF9scGlfY2Fwc2AKYHJ0bF9waHlfaXJxX21hcGAKYHJ0bF9waHlfaXJxX2NsZWFudXBgCmBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gCmBydGxfZ2V0X3NmcF9tb2RlYApgcnRsODE2OV9pb2N0bGAKClRpbWUgdG8gc2V0IHRoZXNlIHJlc3VsdHMgYW5kIGdldCB0bwoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDA2OjI5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bF9pbml0X3BoeWxpbmsmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX2Rvd24mIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2dldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsX21hY19lbmFibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZGlzYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbHBpX2NhcHMmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfbWFwJiMzNDssCiAgICAmIzM0O3J0bF9waHlfaXJxX2NsZWFudXAmIzM0OywKICAgICYjMzQ7cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3J0bF9nZXRfc2ZwX21vZGUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtSODE2OSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3J0bF9pbml0X3BoeWxpbmsmIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX2Rvd24mIzM0OywKICAgICYjMzQ7cnRsX21hY19saW5rX3VwJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfc2VsZWN0X3BjcyYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Nkc19yZWFkJiMzNDssCiAgICAmIzM0O3J0bDgxNjlfcGNzX2dldF9zdGF0ZSYjMzQ7LAogICAgJiMzNDtydGw4MTY5X3Bjc19jb25maWcmIzM0OywKICAgICYjMzQ7cnRsX21hY19lbmFibGVfdHhfbHBpJiMzNDssCiAgICAmIzM0O3J0bF9tYWNfZGlzYWJsZV90eF9scGkmIzM0OywKICAgICYjMzQ7cnRsODE2OV9nZXRfbHBpX2NhcHMmIzM0OywKICAgICYjMzQ7cnRsX3BoeV9pcnFfbWFwJiMzNDssCiAgICAmIzM0O3J0bF9waHlfaXJxX2NsZWFudXAmIzM0OywKICAgICYjMzQ7cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uJiMzNDssCiAgICAmIzM0O3J0bF9nZXRfc2ZwX21vZGUmIzM0OywKICAgICYjMzQ7cnRsODE2OV9pb2N0bCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NDIuNzg0MzU4ODgzWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODExNTY3OTc5OTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUjgxNjlcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJydGxfaW5pdF9waHlsaW5rXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfZG93blwiLFxuICAgIFwicnRsX21hY19saW5rX3VwXCIsXG4gICAgXCJydGxfbWFjX3NlbGVjdF9wY3NcIixcbiAgICBcInJ0bDgxNjlfc2RzX3JlYWRcIixcbiAgICBcInJ0bDgxNjlfcGNzX2dldF9zdGF0ZVwiLFxuICAgIFwicnRsODE2OV9wY3NfY29uZmlnXCIsXG4gICAgXCJydGxfbWFjX2VuYWJsZV90eF9scGlcIixcbiAgICBcInJ0bF9tYWNfZGlzYWJsZV90eF9scGlcIixcbiAgICBcInJ0bDgxNjlfZ2V0X2xwaV9jYXBzXCIsXG4gICAgXCJydGxfcGh5X2lycV9tYXBcIixcbiAgICBcInJ0bF9waHlfaXJxX2NsZWFudXBcIixcbiAgICBcInJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvblwiLFxuICAgIFwicnRsX2dldF9zZnBfbW9kZVwiLFxuICAgIFwicnRsODE2OV9pb2N0bFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1pZ3JhdGVzIHRoZSByODE2OSBuZXR3b3JrIGRyaXZlciB0byB1c2UgdGhlIHBoeWxpbmsgQVBJIGluc3RlYWQgb2YgZGlyZWN0IHBoeWRldiBjYWxscy4gSXQgaW50cm9kdWNlcyBzZXZlcmFsIG5ldyBmdW5jdGlvbnMgZm9yIHBoeWxpbmsgTUFDIGFuZCBQQ1Mgb3BlcmF0aW9ucywgSVJRIGRvbWFpbiBoYW5kbGluZywgYW5kIFNGUCBtb2RlIGRldGVjdGlvbi4gVGhlc2UgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbGx5IHNpZ25pZmljYW50IGFuZCByZWFjaGFibGUgdmlhIFBDSSBkZXZpY2UgZnV6emluZyBhbmQgbmV0d29yayBpbnRlcmZhY2Ugb3BlcmF0aW9ucyAoZS5nLiwgZXRodG9vbCwgaW9jdGwsIGxpbmsgc3RhdGUgY2hhbmdlcykuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjQyLjc4NDM3MDYyM1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQyMDEyODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjViZWFkOWYyOTU2ZDc5ODBhMjY1ZGUxZGQyODE4YmE3NDQ0ZWU3YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWcgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcXG5pbmRleCA5YjBmNGY5NjMxZGJhYS4uNDlhYzcyNzM0MjI1ZjcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXFxuQEAgLTg4LDYgKzg4LDcgQEAgY29uZmlnIFI4MTY5XFxuIFxcdHNlbGVjdCBDUkMzMlxcbiBcXHRzZWxlY3QgUEhZTElCXFxuIFxcdHNlbGVjdCBSRUFMVEVLX1BIWVxcbitcXHRzZWxlY3QgUEhZTElOS1xcbiBcXHRoZWxwXFxuIFxcdCAgU2F5IFkgaGVyZSBpZiB5b3UgaGF2ZSBhIFJlYWx0ZWsgRXRoZXJuZXQgYWRhcHRlciBiZWxvbmdpbmcgdG9cXG4gXFx0ICB0aGUgZm9sbG93aW5nIGZhbWlsaWVzOlxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcXG5AQCAtMjEsMTEgKzIxLDE0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pcnEuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lycWRvbWFpbi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvdGNwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbnRlcnJ1cHQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RtYS1tYXBwaW5nLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wbV9ydW50aW1lLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaXRmaWVsZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGh5bGluay5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHJlZmV0Y2guaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lwdjYuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbkBAIC05Niw2ICs5OSwxOSBAQFxcbiAjZGVmaW5lIEpVTUJPXzlLXFx0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcXG4gI2RlZmluZSBKVU1CT18xNktcXHQoU1pfMTZLIC0gVkxBTl9FVEhfSExFTiAtIEVUSF9GQ1NfTEVOKVxcbiBcXG4rI2RlZmluZSBPQ1BfU0RTX0FERFJfUkVHXFx0MHhFQjEwXFxuKyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXFx0XFx0MHhFQjBFXFxuKyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1xcdDB4RUIxNFxcbisjZGVmaW5lIFNEU19DTURfUkVBRFxcdFxcdDB4MDAwMVxcbisjZGVmaW5lIFJUTF9TRFNfQzIyX0JBU0VcXHQweDQwXFxuKyNkZWZpbmUgUlRMX1NEU19DNDVfQkFTRVxcdDB4MDA4MFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXFx0XFx0MHhkYzAwXFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1xcdDB4MDA3OFxcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXzgxMTZBRlxcdDB4MDAzMFxcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURcXHRcXHQweGQwMDZcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEX01BU0tcXHQweDAwZmZcXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlxcdDB4MDAwMFxcbitcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4gXFx0dTMyIG1hc2s7XFxuIFxcdHUzMiB2YWw7XFxuQEAgLTMzNCwxMSArMzUwLDE2IEBAIGVudW0gcnRsX3JlZ2lzdGVycyB7XFxuIFxcdEFMRFBTX0xUUlxcdD0gMHhlMGEyLFxcbiBcXHRMVFJfT0JGRl9MT0NLXFx0PSAweGUwMzIsXFxuIFxcdExUUl9TTk9PUFxcdD0gMHhlMDM0LFxcbitcXHRTRU5EX0xUUl9NU0dcXHQ9IDB4ZTAzOCxcXG4gXFxuICNkZWZpbmUgQUxEUFNfTFRSX0VOXFx0XFx0XFx0QklUKDApXFxuICNkZWZpbmUgTFRSX09CRkZfTE9DS19FTlxcdFxcdEJJVCgwKVxcbiAjZGVmaW5lIExJTktfU1BFRURfQ0hBTkdFX0VOXFx0XFx0QklUKDE0KVxcbiAjZGVmaW5lIExUUl9TTk9PUF9FTlxcdFxcdFxcdEdFTk1BU0soMTUsIDE0KVxcbisjZGVmaW5lIExUUl9NU0dfRU5cXHRcXHRcXHRCSVQoMClcXG4rI2RlZmluZSBSVEw4MTE2QUZfRlVOQ19QTV9DU1JcXHRcXHQweDgwXFxuKyNkZWZpbmUgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTFxcdDB4NDRcXG4rI2RlZmluZSBSVExfUE1fRDNIT1RcXHRcXHRcXHRHRU5NQVNLKDEsIDApXFxuIH07XFxuIFxcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xcbkBAIC03MjgsNiArNzQ5LDEyIEBAIGVudW0gcnRsX2Rhc2hfdHlwZSB7XFxuIFxcdFJUTF9EQVNIXzI1X0JQLFxcbiB9O1xcbiBcXG4rZW51bSBydGxfc2ZwX21vZGUge1xcbitcXHRSVExfU0ZQX05PTkUsXFxuK1xcdFJUTF9TRlBfODE2OF9BRixcXG4rXFx0UlRMX1NGUF84MTI3X0FURixcXG4rfTtcXG4rXFxuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR2b2lkIF9faW9tZW0gKm1taW9fYWRkcjtcXHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7XFxuQEAgLTczNiw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0c3RydWN0IG5hcGlfc3RydWN0IG5hcGk7XFxuIFxcdGVudW0gbWFjX3ZlcnNpb24gbWFjX3ZlcnNpb247XFxuIFxcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XFxuK1xcdGVudW0gcnRsX3NmcF9tb2RlIHNmcF9tb2RlO1xcbiBcXHR1MzIgY3VyX3J4OyAvKiBJbmRleCBpbnRvIHRoZSBSeCBkZXNjcmlwdG9yIGJ1ZmZlciBvZiBuZXh0IFJ4IHBrdC4gKi9cXG4gXFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXFxuIFxcdHUzMiBkaXJ0eV90eDtcXG5AQCAtNzUwLDYgKzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xcbiBcXHR1MzIgaXJxX21hc2s7XFxuIFxcdGludCBpcnE7XFxuIFxcdHN0cnVjdCBjbGsgKmNsaztcXG4rXFx0aW50IHNwZWVkO1xcbiBcXG4gXFx0c3RydWN0IHtcXG4gXFx0XFx0REVDTEFSRV9CSVRNQVAoZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuQEAgLTc2Miw3ICs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcXG4gXFx0dW5zaWduZWQgc3VwcG9ydHNfZ21paToxO1xcbiBcXHR1bnNpZ25lZCBhc3BtX21hbmFnZWFibGU6MTtcXG4gXFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XFxuLVxcdGJvb2wgc2ZwX21vZGU6MTtcXG4gXFx0ZG1hX2FkZHJfdCBjb3VudGVyc19waHlzX2FkZHI7XFxuIFxcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcXG4gXFx0c3RydWN0IHJ0bDgxNjlfdGNfb2Zmc2V0cyB0Y19vZmZzZXQ7XFxuQEAgLTc3NCw2ICs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XFxuIFxcdHN0cnVjdCByODE2OV9sZWRfY2xhc3NkZXYgKmxlZHM7XFxuIFxcbiBcXHR1MzIgb2NwX2Jhc2U7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwaHlsaW5rO1xcbitcXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XFxuK1xcdHN0cnVjdCBwaHlsaW5rX3BjcyBwY3M7XFxuK1xcdHN0cnVjdCBpcnFfZG9tYWluICpwaHlfaXJxX2RvbWFpbjtcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBzYXZlZF9wYXVzZTtcXG4rXFx0Ym9vbCBqdW1ib19wYXVzZV9zYXZlZDtcXG4gfTtcXG4gXFxuIHR5cGVkZWYgdm9pZCAoKnJ0bF9nZW5lcmljX2ZjdCkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApO1xcbkBAIC0xMTI4LDEwICsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXFxuIFxcdGlmIChydGxfb2NwX3JlZ19mYWlsdXJlKHJlZykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4tXFx0LyogUmV0dXJuIGR1bW15IE1JSV9QSFlTSUQyIGluIFNGUCBtb2RlIHRvIG1hdGNoIFNGUCBQSFkgZHJpdmVyICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgXFx1MDAyNlxcdTAwMjYgcmVnID09IChPQ1BfU1REX1BIWV9CQVNFICsgMiAqIE1JSV9QSFlTSUQyKSlcXG4tXFx0XFx0cmV0dXJuIFBIWV9JRF9SVExfRFVNTVlfU0ZQIFxcdTAwMjYgMHhmZmZmO1xcbi1cXG4gXFx0UlRMX1czMih0cCwgR1BIWV9PQ1AsIHJlZyBcXHUwMDNjXFx1MDAzYyAxNSk7XFxuIFxcbiBcXHRyZXR1cm4gcnRsX2xvb3Bfd2FpdF9oaWdoKHRwLCBcXHUwMDI2cnRsX29jcF9ncGh5X2NvbmQsIDI1LCAxMCkgP1xcbkBAIC0xMjE3LDEyICsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9waHlfb2NwX3dyaXRlKHRwLCAweGM4MDQsICh2YWwgXFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4te1xcbi1cXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXFxuLVxcdFxcdHI4MTI3X3NmcF9pbml0XzEwZyh0cCk7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHJ0bF9zZnBfcmVzZXQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbkBAIC0xMjgzLDYgKzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxcbiBcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCB0cC1cXHUwMDNlb2NwX2Jhc2UgKyByZWcsIHZhbHVlKTtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4re1xcbitcXHRyZXR1cm4gdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNTIgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpIFxcdTAwMjYgUlRMX1BLR19ERVRFQ1RfTUFTSykgPT1cXG4rXFx0XFx0UlRMX1BLR19ERVRFQ1RfODExNkFGIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFxcdTAwMjYgUlRMX0lOVF9IV19JRF9NQVNLKSA9PVxcbitcXHRcXHRSVExfSU5UX0hXX0lEXzgxMTZBRjtcXG4rfVxcbitcXG4gc3RhdGljIGludCBtYWNfbWN1X3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGludCByZWcpXFxuIHtcXG4gXFx0cmV0dXJuIHI4MTY4X21hY19vY3BfcmVhZCh0cCwgdHAtXFx1MDAzZW9jcF9iYXNlICsgcmVnKTtcXG5AQCAtMTU3OCw2ICsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdH1cXG4gfVxcbiBcXG4rc3RhdGljIGVudW0gcnRsX3NmcF9tb2RlIHJ0bF9nZXRfc2ZwX21vZGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xcbitcXHRcXHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX0lOVF9IV19JRCk7XFxuK1xcbitcXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiAweGZmKSA9PSAweDA3KVxcbitcXHRcXHRcXHRyZXR1cm4gUlRMX1NGUF84MTI3X0FURjtcXG4rXFx0fSBlbHNlIGlmIChydGxfaXNfODExNmFmKHRwKSkge1xcbitcXHRcXHRyZXR1cm4gUlRMX1NGUF84MTY4X0FGO1xcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gUlRMX1NGUF9OT05FO1xcbit9XFxuK1xcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuQEAgLTE2NzMsMTYgKzE3MjAsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pcnFfbWFza19hbmRfYWNrKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRydGxfcGNpX2NvbW1pdCh0cCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4rc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCBpbnQgc3BlZWQpXFxuIHtcXG4tXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVxcdTAwM2VwaHlkZXY7XFxuLVxcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzQgfHxcXG4gXFx0ICAgIHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM4KSB7XFxuLVxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4rXFx0XFx0aWYgKHNwZWVkID09IFNQRUVEXzEwMDApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xcbi1cXHRcXHR9IGVsc2UgaWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwKSB7XFxuK1xcdFxcdH0gZWxzZSBpZiAoc3BlZWQgPT0gU1BFRURfMTAwKSB7XFxuIFxcdFxcdFxcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFkYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDA1KTtcXG4gXFx0XFx0fSBlbHNlIHtcXG5AQCAtMTY5Miw3ICsxNzM3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRydGxfcmVzZXRfcGFja2V0X2ZpbHRlcih0cCk7XFxuIFxcdH0gZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzUgfHxcXG4gXFx0XFx0ICAgdHAtXFx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcXG4tXFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTAwMCkge1xcbiBcXHRcXHRcXHRydGxfZXJpX3dyaXRlKHRwLCAweDFiYywgRVJJQVJfTUFTS18xMTExLCAweDAwMDAwMDExKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTE3MDAsNyArMTc0NSw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAzZik7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNykge1xcbi1cXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xcbitcXHRcXHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZDAsIEVSSUFSX01BU0tfMDAxMSwgMHg0ZDAyKTtcXG4gXFx0XFx0XFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMDAxMSwgMHgwMDYwYSk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuQEAgLTIwNzQsMTEgKzIxMTksMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdFxcdGNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2O1xcbiBcXG4gXFx0LyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VwaHlkZXYtXFx1MDAzZXNwZWVkID09IFNQRUVEX1VOS05PV04pXFxuK1xcdGlmICh0cC1cXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG4gXFx0XFx0cmV0dXJuIGNpO1xcbiBcXG4gXFx0Zm9yICg7IGNpLVxcdTAwM2VzcGVlZDsgY2krKykge1xcbi1cXHRcXHRpZiAodHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQgPT0gY2ktXFx1MDAzZXNwZWVkKVxcbitcXHRcXHRpZiAodHAtXFx1MDAzZXNwZWVkID09IGNpLVxcdTAwM2VzcGVlZClcXG4gXFx0XFx0XFx0cmV0dXJuIGNpO1xcbiBcXHR9XFxuIFxcbkBAIC0yMjM2LDcgKzIyODEsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBzdGF0aWMgdW5zaWduZWQgaW50IHI4MTY5X2dldF90eF9scGlfdGltZXJfdXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4tXFx0dW5zaWduZWQgaW50IHNwZWVkID0gdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlc3BlZWQ7XFxuK1xcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVxcdTAwM2VzcGVlZDtcXG4gXFx0dW5zaWduZWQgaW50IHRpbWVyID0gdHAtXFx1MDAzZXR4X2xwaV90aW1lcjtcXG4gXFxuIFxcdGlmICghdGltZXIgfHwgc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcXG5AQCAtMjI1NCw3ICsyMjk5LDcgQEAgc3RhdGljIGludCBydGw4MTY5X2dldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcXG4gXFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0ID0gcGh5X2V0aHRvb2xfZ2V0X2VlZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhKTtcXG4rXFx0cmV0ID0gcGh5bGlua19ldGh0b29sX2dldF9lZWUodHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG5AQCAtMjI3MCw3ICsyMzE1LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcXG4gXFx0aWYgKCFydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4tXFx0cmV0dXJuIHBoeV9ldGh0b29sX3NldF9lZWUodHAtXFx1MDAzZXBoeWRldiwgZGF0YSk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X2VlZSh0cC1cXHUwMDNlcGh5bGluaywgZGF0YSk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbkBAIC0yMzAxLDEzICsyMzQ2LDggQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0Ym9vbCB0eF9wYXVzZSwgcnhfcGF1c2U7XFxuLVxcbi1cXHRwaHlfZ2V0X3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYsIFxcdTAwMjZ0eF9wYXVzZSwgXFx1MDAyNnJ4X3BhdXNlKTtcXG4gXFxuLVxcdGRhdGEtXFx1MDAzZWF1dG9uZWcgPSB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhdXRvbmVnO1xcbi1cXHRkYXRhLVxcdTAwM2V0eF9wYXVzZSA9IHR4X3BhdXNlID8gMSA6IDA7XFxuLVxcdGRhdGEtXFx1MDAzZXJ4X3BhdXNlID0gcnhfcGF1c2UgPyAxIDogMDtcXG4rXFx0cGh5bGlua19ldGh0b29sX2dldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBkYXRhKTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBydGw4MTY5X3NldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzMTgsOSArMjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRpZiAoZGV2LVxcdTAwM2VtdHUgXFx1MDAzZSBFVEhfREFUQV9MRU4pXFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFxuLVxcdHBoeV9zZXRfYXN5bV9wYXVzZSh0cC1cXHUwMDNlcGh5ZGV2LCBkYXRhLVxcdTAwM2VyeF9wYXVzZSwgZGF0YS1cXHUwMDNldHhfcGF1c2UpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIGRhdGEpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9ldGhfbWFjX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIzODYsMzQgKzI0MjQsMjcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9nZXRfZXRoX2N0cmxfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0bGUzMl90b19jcHUodHAtXFx1MDAzZWNvdW50ZXJzLVxcdTAwM2VyeF91bmtub3duX29wY29kZSk7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuIHtcXG4gXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4tXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHRwLVxcdTAwM2VwaHlkZXY7XFxuLVxcdGludCBkdXBsZXggPSBjbWQtXFx1MDAzZWJhc2UuZHVwbGV4O1xcbi1cXHRpbnQgc3BlZWQgPSBjbWQtXFx1MDAzZWJhc2Uuc3BlZWQ7XFxuLVxcbi1cXHRpZiAoIXRwLVxcdTAwM2VzZnBfbW9kZSlcXG4tXFx0XFx0cmV0dXJuIHBoeV9ldGh0b29sX2tzZXR0aW5nc19zZXQocGh5ZGV2LCBjbWQpO1xcbi1cXG4tXFx0aWYgKGNtZC1cXHUwMDNlYmFzZS5hdXRvbmVnICE9IEFVVE9ORUdfRElTQUJMRSlcXG4tXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLVxcbi1cXHRpZiAoIXBoeV9jaGVja192YWxpZChzcGVlZCwgZHVwbGV4LCBwaHlkZXYtXFx1MDAzZXN1cHBvcnRlZCkpXFxuLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4tXFx0bXV0ZXhfbG9jayhcXHUwMDI2cGh5ZGV2LVxcdTAwM2Vsb2NrKTtcXG4rXFx0cmV0dXJuIHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBjbWQpO1xcbit9XFxuIFxcbi1cXHRwaHlkZXYtXFx1MDAzZWF1dG9uZWcgPSBBVVRPTkVHX0RJU0FCTEU7XFxuLVxcdHBoeWRldi1cXHUwMDNlc3BlZWQgPSBzcGVlZDtcXG4tXFx0cGh5ZGV2LVxcdTAwM2VkdXBsZXggPSBkdXBsZXg7XFxuK3N0YXRpYyBpbnQgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3Moc3RydWN0IG5ldF9kZXZpY2UgKm5kZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcXG4gXFxuLVxcdHJ0bF9zZnBfaW5pdCh0cCk7XFxuK1xcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh0cC1cXHUwMDNlcGh5bGluaywgY21kKTtcXG4rfVxcbiBcXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwaHlkZXYtXFx1MDAzZWxvY2spO1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfbndheV9yZXNldChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuLVxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX253YXlfcmVzZXQodHAtXFx1MDAzZXBoeWxpbmspO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGV0aHRvb2xfb3BzIHJ0bDgxNjlfZXRodG9vbF9vcHMgPSB7XFxuQEAgLTI0MzEsMTAgKzI0NjIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xcbiBcXHQuZ2V0X3NzZXRfY291bnRcXHRcXHQ9IHJ0bDgxNjlfZ2V0X3NzZXRfY291bnQsXFxuIFxcdC5nZXRfZXRodG9vbF9zdGF0c1xcdD0gcnRsODE2OV9nZXRfZXRodG9vbF9zdGF0cyxcXG4gXFx0LmdldF90c19pbmZvXFx0XFx0PSBldGh0b29sX29wX2dldF90c19pbmZvLFxcbi1cXHQubndheV9yZXNldFxcdFxcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcXG4rXFx0Lm53YXlfcmVzZXRcXHRcXHQ9IHJ0bDgxNjlfbndheV9yZXNldCxcXG4gXFx0LmdldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfZ2V0X2VlZSxcXG4gXFx0LnNldF9lZWVcXHRcXHQ9IHJ0bDgxNjlfc2V0X2VlZSxcXG4tXFx0LmdldF9saW5rX2tzZXR0aW5nc1xcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxcbitcXHQuZ2V0X2xpbmtfa3NldHRpbmdzXFx0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcXG4gXFx0LnNldF9saW5rX2tzZXR0aW5nc1xcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXFxuIFxcdC5nZXRfcmluZ3BhcmFtXFx0XFx0PSBydGw4MTY5X2dldF9yaW5ncGFyYW0sXFxuIFxcdC5nZXRfcGF1c2Vfc3RhdHNcXHQ9IHJ0bDgxNjlfZ2V0X3BhdXNlX3N0YXRzLFxcbkBAIC0yNDk5LDkgKzI1MzAsMTAgQEAgdm9pZCByODE2OV9hcHBseV9maXJtd2FyZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0dHAtXFx1MDAzZW9jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTtcXG4gXFxuIFxcdFxcdC8qIFBIWSBzb2Z0IHJlc2V0IG1heSBzdGlsbCBiZSBpbiBwcm9ncmVzcyAqL1xcbi1cXHRcXHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXFx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4tXFx0XFx0XFx0XFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRcXHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXFx1MDAzZXBoeWRldiwgTUlJX0JNQ1IsIHZhbCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgISh2YWwgXFx1MDAyNiBCTUNSX1JFU0VUKSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgNTAwMDAsIDYwMDAwMCwgdHJ1ZSk7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjUzOCw2ICsyNTcwLDggQEAgc3RhdGljIHZvaWQgcnRsX3NjaGVkdWxlX3Rhc2soc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGVudW0gcnRsX2ZsYWcgZmxhZylcXG4gXFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4rXFx0cGh5X2luaXRfaHcodHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdHBoeV9yZXN1bWUodHAtXFx1MDAzZXBoeWRldik7XFxuIFxcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVxcdTAwM2VwaHlkZXYsIHRwLVxcdTAwM2VtYWNfdmVyc2lvbik7XFxuIFxcbiBcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2M9IFJUTF9HSUdBX01BQ19WRVJfMDYpIHtcXG5AQCAtMjU1Miw5ICsyNTg2LDYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3BoeShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0ICAgIHRwLVxcdTAwM2VwY2lfZGV2LVxcdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcXG4gXFx0XFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MDAwMSwgMHgxMCwgMHhmMDFiKTtcXG4gXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUpXFxuLVxcdFxcdHJ0bF9zZnBfaW5pdCh0cCk7XFxuLVxcbiBcXHQvKiBXZSBtYXkgaGF2ZSBjYWxsZWQgcGh5X3NwZWVkX2Rvd24gYmVmb3JlICovXFxuIFxcdHBoeV9zcGVlZF91cCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4gXFxuQEAgLTI2MjcsNiArMjY1OCw3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9yaW5nX2luZGV4ZXMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0Ym9vbCBqdW1ibyA9IHRwLVxcdTAwM2VkZXYtXFx1MDAzZW10dSBcXHUwMDNlIEVUSF9EQVRBX0xFTjtcXG4rXFx0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBwYXVzZTtcXG4gXFx0aW50IHJlYWRycSA9IDQwOTY7XFxuIFxcbiBcXHRpZiAoanVtYm8gXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfMTcgXFx1MDAyNlxcdTAwMjZcXG5AQCAtMjY1OCwxMyArMjY5MCw0OCBAQCBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRpZiAocGNpX2lzX3BjaWUodHAtXFx1MDAzZXBjaV9kZXYpIFxcdTAwMjZcXHUwMDI2IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpKVxcbiBcXHRcXHRwY2llX3NldF9yZWFkcnEodHAtXFx1MDAzZXBjaV9kZXYsIHJlYWRycSk7XFxuIFxcbi1cXHQvKiBDaGlwIGRvZXNuJ3Qgc3VwcG9ydCBwYXVzZSBpbiBqdW1ibyBtb2RlICovXFxuIFxcdGlmIChqdW1ibykge1xcbi1cXHRcXHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfUGF1c2VfQklULFxcbi1cXHRcXHRcXHRcXHQgICB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhZHZlcnRpc2luZyk7XFxuLVxcdFxcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9Bc3ltX1BhdXNlX0JJVCxcXG4tXFx0XFx0XFx0XFx0ICAgdHAtXFx1MDAzZXBoeWRldi1cXHUwMDNlYWR2ZXJ0aXNpbmcpO1xcbi1cXHRcXHRwaHlfc3RhcnRfYW5lZyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0XFx0aWYgKCF0cC1cXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xcbitcXHRcXHRcXHRib29sIGFkdl9wYXVzZSwgYWR2X2FzeW07XFxuK1xcbitcXHRcXHRcXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXFx1MDAzZXBoeWxpbmssIFxcdTAwMjZ0cC1cXHUwMDNlc2F2ZWRfcGF1c2UpO1xcbitcXG4rXFx0XFx0XFx0aWYgKHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XFxuK1xcdFxcdFxcdFxcdHBoeWxpbmtfZXRodG9vbF9rc2V0dGluZ3NfZ2V0KHRwLVxcdTAwM2VwaHlsaW5rLCBcXHUwMDI2Y21kKTtcXG4rXFx0XFx0XFx0XFx0YWR2X3BhdXNlID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcXHUwMDI2Y21kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFBhdXNlKTtcXG4rXFx0XFx0XFx0XFx0YWR2X2FzeW0gID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcXHUwMDI2Y21kLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIGFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIEFzeW1fUGF1c2UpO1xcbitcXG4rXFx0XFx0XFx0XFx0aWYgKGFkdl9wYXVzZSBcXHUwMDI2XFx1MDAyNiAhYWR2X2FzeW0pIHtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXFx1MDAyNlxcdTAwMjYgYWR2X2FzeW0pIHtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcXG4rXFx0XFx0XFx0XFx0XFx0dHAtXFx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMDtcXG4rXFx0XFx0XFx0XFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFxcdTAwMjZcXHUwMDI2IGFkdl9hc3ltKSB7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDE7XFxuK1xcdFxcdFxcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdFxcdHRwLVxcdTAwM2VzYXZlZF9wYXVzZS50eF9wYXVzZSA9IDA7XFxuK1xcdFxcdFxcdFxcdH1cXG4rXFx0XFx0XFx0fVxcbitcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkID0gdHJ1ZTtcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cGF1c2UuYXV0b25lZyA9IHRwLVxcdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnO1xcbitcXHRcXHRwYXVzZS5yeF9wYXVzZSA9IDA7XFxuK1xcdFxcdHBhdXNlLnR4X3BhdXNlID0gMDtcXG4rXFxuK1xcdFxcdHBoeWxpbmtfZXRodG9vbF9zZXRfcGF1c2VwYXJhbSh0cC1cXHUwMDNlcGh5bGluaywgXFx1MDAyNnBhdXNlKTtcXG4rXFx0fSBlbHNlIGlmICh0cC1cXHUwMDNlanVtYm9fcGF1c2Vfc2F2ZWQpIHtcXG4rXFx0XFx0cGh5bGlua19ldGh0b29sX3NldF9wYXVzZXBhcmFtKHRwLVxcdTAwM2VwaHlsaW5rLCBcXHUwMDI2dHAtXFx1MDAzZXNhdmVkX3BhdXNlKTtcXG4rXFx0XFx0dHAtXFx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkID0gZmFsc2U7XFxuIFxcdH1cXG4gfVxcbiBcXG5AQCAtMjc4MCw3ICsyODQ3LDcgQEAgc3RhdGljIHZvaWQgcnRsX3ByZXBhcmVfcG93ZXJfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsX2VwaHlfd3JpdGUodHAsIDB4MTksIDB4ZmY2NCk7XFxuIFxcbiBcXHRpZiAoZGV2aWNlX21heV93YWtldXAodHBfdG9fZGV2KHRwKSkpIHtcXG4tXFx0XFx0cGh5X3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWRldiwgZmFsc2UpO1xcbitcXHRcXHRwaHlsaW5rX3NwZWVkX2Rvd24odHAtXFx1MDAzZXBoeWxpbmssIGZhbHNlKTtcXG4gXFx0XFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xcbiBcXHR9XFxuIH1cXG5AQCAtMjgzMiw2ICsyODk5LDE2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfc2V0X21hZ2ljX3JlZyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcXG4gfVxcbiBcXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFxuK1xcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxcbitcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4rXFxuK1xcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cXHUwMDNlcGh5bGluaywgaWZyLCBjbWQpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBydGxfc2V0X3J4X21vZGUoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHR1MzIgcnhfbW9kZSA9IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5cyB8IEFjY2VwdE11bHRpY2FzdDtcXG5AQCAtMzA5OCw4ICszMTc1LDIyIEBAIHN0YXRpYyB2b2lkIHJ0bF9lbmFibGVfbHRyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZjIsIDB4OTAwMyk7XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfT0JGRl9MT0NLLCAweDAwMDAsIExJTktfU1BFRURfQ0hBTkdFX0VOKTtcXG4gXFx0XFx0YnJlYWs7XFxuLVxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4gXFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XFxuK1xcdFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcXG4rXFx0XFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xcbitcXHRcXHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuIFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcXG4gXFx0XFx0UlRMX1c4KHRwLCBDT01CT19MVFJfRVhURU5ELCBSVExfUjgodHAsIENPTUJPX0xUUl9FWFRFTkQpIHwgQ09NQk9fTFRSX0VYVEVORF9FTik7XFxuIFxcdFxcdGZhbGx0aHJvdWdoO1xcbkBAIC0zMTE5LDYgKzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0fVxcbiBcXHQvKiBjaGlwIGNhbiB0cmlnZ2VyIExUUiAqL1xcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcXG4rXFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIFNFTkRfTFRSX01TRywgMHgwMDAwLCBMVFJfTVNHX0VOKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXFxuQEAgLTMxNTIsNiArMzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHRcXHRydGxfZW5hYmxlX2x0cih0cCk7XFxuIFxcdFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcXG4rXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcXG4gXFx0XFx0XFx0LyogcmVzZXQgZXBoeSB0eC9yeCBkaXNhYmxlIHRpbWVyICovXFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XFxuQEAgLTMxNjQsNiArMzI1Nyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRzd2l0Y2ggKHRwLVxcdTAwM2VtYWNfdmVyc2lvbikge1xcbiBcXHRcXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNDYgLi4uIFJUTF9HSUdBX01BQ19WRVJfNDg6XFxuK1xcdFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzYxIC4uLiBSVExfR0lHQV9NQUNfVkVSX0xBU1Q6XFxuIFxcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTIsIDB4MDBmZiwgMCk7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0zNjU3LDYgKzM3NTEsMzUgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxNjhlcF8zKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXFx1MDAzZWRldmZuKTtcXG4rXFx0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXFx1MDAzZWJ1cztcXG4rXFx0dW5zaWduZWQgaW50IGRldmZuO1xcbitcXHRpbnQgZnVuYztcXG4rXFx0aW50IHJldDtcXG4rXFx0dTMyIHZhbDtcXG4rXFxuK1xcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXFx1MDAzYyA4OyBmdW5jKyspIHtcXG4rXFx0XFx0ZGV2Zm4gPSBQQ0lfREVWRk4oc2xvdCwgZnVuYyk7XFxuK1xcbitcXHRcXHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgXFx1MDAyNnZhbCk7XFxuK1xcdFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2ICFQQ0lfUE9TU0lCTEVfRVJST1IodmFsKSkge1xcbitcXHRcXHRcXHR2YWwgXFx1MDAyNj0gflBDSV9QTV9DVFJMX1BNRV9TVEFUVVM7XFxuK1xcdFxcdFxcdHZhbCBcXHUwMDI2PSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0sgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcXG4rXFx0XFx0XFx0dmFsIHw9IChSVExfUE1fRDNIT1QgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfUE1fQ1NSLCB2YWwpO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFxcdTAwMjZ2YWwpO1xcbitcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcXG4rXFx0XFx0XFx0dmFsIFxcdTAwMjY9IH4oKFBDSV9FWFBfTE5LU1RBX0xCTVMgfCBQQ0lfRVhQX0xOS1NUQV9MQUJTKSBcXHUwMDNjXFx1MDAzYyAxNik7XFxuK1xcdFxcdFxcdHZhbCB8PSBQQ0lfRVhQX0xOS0NUTF9BU1BNQztcXG4rXFx0XFx0XFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTCwgdmFsKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiB7XFxuIFxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXBoeV9pbmZvIGVfaW5mb184MTE3W10gPSB7XFxuQEAgLTM2OTMsMTIgKzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcbiBcXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xcbiBcXG4tXFx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVxcdTAwM2VwaHlkZXYsIDB4MGM0MiwgMHgxMykgXFx1MDAyNiAweDNmZmY7XFxuLVxcdGlmIChyZ19zYXdfY250IFxcdTAwM2UgMCkge1xcbi1cXHRcXHR1MTYgc3dfY250XzFtc19pbmk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KSB7XFxuK1xcdFxcdHJnX3Nhd19jbnQgPSBwaHlfcmVhZF9wYWdlZCh0cC1cXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFxcdTAwMjYgMHgzZmZmO1xcbitcXHRcXHRpZiAocmdfc2F3X2NudCBcXHUwMDNlIDApIHtcXG4rXFx0XFx0XFx0dTE2IHN3X2NudF8xbXNfaW5pO1xcbiBcXG4tXFx0XFx0c3dfY250XzFtc19pbmkgPSAoMTYwMDAwMDAgLyByZ19zYXdfY250KSBcXHUwMDI2IDB4MGZmZjtcXG4tXFx0XFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZDQxMiwgMHgwZmZmLCBzd19jbnRfMW1zX2luaSk7XFxuK1xcdFxcdFxcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXFx1MDAyNiAweDBmZmY7XFxuK1xcdFxcdFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xcbitcXHRcXHR9XFxuIFxcdH1cXG4gXFxuIFxcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwNTYsIDB4MDBmMCwgMHgwMDAwKTtcXG5AQCAtMzcxMSw2ICszODM2LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIFxcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4YzA5NCwgMHgwMDAwKTtcXG4gXFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDllLCAweDAwMDApO1xcbiBcXG4rXFx0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVxcdTAwM2VwY2lfZGV2KTtcXG4gXFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXFxuIFxcdHI4MTY5X2FwcGx5X2Zpcm13YXJlKHRwKTtcXG4gfVxcbkBAIC00MTQwLDExICs0MjY2LDE3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jaGFuZ2VfbXR1KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGludCBuZXdfbXR1KVxcbiB7XFxuIFxcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdHBoeWxpbmtfc3RvcCh0cC1cXHUwMDNlcGh5bGluayk7XFxuK1xcbiBcXHRXUklURV9PTkNFKGRldi1cXHUwMDNlbXR1LCBuZXdfbXR1KTtcXG4gXFx0bmV0ZGV2X3VwZGF0ZV9mZWF0dXJlcyhkZXYpO1xcbiBcXHRydGxfanVtYm9fY29uZmlnKHRwKTtcXG4gXFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcXG4gXFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXFxuK1xcdFxcdHBoeWxpbmtfc3RhcnQodHAtXFx1MDAzZXBoeWxpbmspO1xcbitcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTQ4NjksOCArNTAwMSwxMyBAQCBzdGF0aWMgaXJxcmV0dXJuX3QgcnRsODE2OV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2luc3RhbmNlKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKHN0YXR1cyBcXHUwMDI2IExpbmtDaGcpXFxuLVxcdFxcdHBoeV9tYWNfaW50ZXJydXB0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRpZiAoc3RhdHVzIFxcdTAwMjYgTGlua0NoZykge1xcbitcXHRcXHRpZiAodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKVxcbitcXHRcXHRcXHRnZW5lcmljX2hhbmRsZV9kb21haW5faXJxKHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XFxuK1xcdFxcdGVsc2UgaWYgKHRwLVxcdTAwM2VzZnBfbW9kZSlcXG4rXFx0XFx0XFx0cGh5bGlua19tYWNfY2hhbmdlKHRwLVxcdTAwM2VwaHlsaW5rLFxcbitcXHRcXHRcXHRcXHRcXHQgICAhIShSVExfUjgodHAsIFBIWXN0YXR1cykgXFx1MDAyNiBMaW5rU3RhdHVzKSk7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bF9pcnFfZGlzYWJsZSh0cCk7XFxuIFxcdG5hcGlfc2NoZWR1bGUoXFx1MDAyNnRwLVxcdTAwM2VuYXBpKTtcXG5AQCAtNDkzMCw5ICs1MDY3LDYgQEAgc3RhdGljIGludCBydGw4MTY5X3BvbGwoc3RydWN0IG5hcGlfc3RydWN0ICpuYXBpLCBpbnQgYnVkZ2V0KVxcbiBcXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiB7XFxuLVxcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuIFxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuIFxcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcXG4gXFx0XFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXFxuQEAgLTQ5NjMsNDAgKzUwOTcsMTUgQEAgc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxcbiBcXHR9XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcXG4te1xcbi1cXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xcbi1cXHRzdHJ1Y3QgZGV2aWNlICpkID0gdHBfdG9fZGV2KHRwKTtcXG4tXFxuLVxcdGlmIChuZXRpZl9jYXJyaWVyX29rKG5kZXYpKSB7XFxuLVxcdFxcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCk7XFxuLVxcdFxcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCB0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VlbmFibGVfdHhfbHBpKTtcXG4tXFx0XFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdHBtX3J1bnRpbWVfaWRsZShkKTtcXG4tXFx0fVxcbi1cXG4tXFx0cGh5X3ByaW50X3N0YXR1cyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tfVxcbi1cXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4ge1xcbi1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXFx1MDAzZXBoeWRldjtcXG4tXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0cGh5X21vZGUgPSB0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcXG4tXFx0XFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcXG4tXFxuLVxcdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cXHUwMDNlZGV2LCBwaHlkZXYsIHI4MTY5X3BoeWxpbmtfaGFuZGxlcixcXG4tXFx0XFx0XFx0XFx0IHBoeV9tb2RlKTtcXG4tXFx0aWYgKHJldClcXG4rXFx0cmV0ID0gcGh5bGlua19jb25uZWN0X3BoeSh0cC1cXHUwMDNlcGh5bGluaywgdHAtXFx1MDAzZXBoeWRldik7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0bmV0ZGV2X2Vycih0cC1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGNvbm5lY3QgcGh5XFxcXG5cXFwiKTtcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4tXFxuLVxcdGlmICghdHAtXFx1MDAzZXN1cHBvcnRzX2dtaWkpXFxuLVxcdFxcdHBoeV9zZXRfbWF4X3NwZWVkKHBoeWRldiwgU1BFRURfMTAwKTtcXG4tXFxuLVxcdHBoeV9hdHRhY2hlZF9pbmZvKHBoeWRldik7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuQEAgLTUwMDcsMTAgKzUxMTYsMTAgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHQvKiBDbGVhciBhbGwgdGFzayBmbGFncyAqL1xcbiBcXHRiaXRtYXBfemVybyh0cC1cXHUwMDNld2suZmxhZ3MsIFJUTF9GTEFHX01BWCk7XFxuIFxcbi1cXHRwaHlfc3RvcCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5bGlua19zdG9wKHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuIFxcdC8qIFJlc2V0IFNlckRlcyBQSFkgdG8gYnJpbmcgZG93biBmaWJlciBsaW5rICovXFxuLVxcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUpXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcXG4gXFx0XFx0cnRsX3NmcF9yZXNldCh0cCk7XFxuIFxcbiBcXHRydGw4MTY5X3VwZGF0ZV9jb3VudGVycyh0cCk7XFxuQEAgLTUwMzIsMTQgKzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xcbiBcXG4gXFx0cGNpX3NldF9tYXN0ZXIodHAtXFx1MDAzZXBjaV9kZXYpO1xcbi1cXHRwaHlfaW5pdF9odyh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0cGh5X3Jlc3VtZSh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4tXFx0cnRsODE2OV9pbml0X3BoeSh0cCk7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KVxcbitcXHRcXHRydGw4MTY5X2luaXRfcGh5KHRwKTtcXG4rXFxuIFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZ0cC1cXHUwMDNlbmFwaSk7XFxuIFxcdGVuYWJsZV93b3JrKFxcdTAwMjZ0cC1cXHUwMDNld2sud29yayk7XFxuIFxcdHJ0bF9yZXNldF93b3JrKHRwKTtcXG4gXFxuLVxcdHBoeV9zdGFydCh0cC1cXHUwMDNlcGh5ZGV2KTtcXG4rXFx0cGh5bGlua19zdGFydCh0cC1cXHUwMDNlcGh5bGluayk7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbkBAIC01MDU1LDcgKzUxNjQsNyBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFxuIFxcdGZyZWVfaXJxKHRwLVxcdTAwM2VpcnEsIHRwKTtcXG4gXFxuLVxcdHBoeV9kaXNjb25uZWN0KHRwLVxcdTAwM2VwaHlkZXYpO1xcbitcXHRwaHlsaW5rX2Rpc2Nvbm5lY3RfcGh5KHRwLVxcdTAwM2VwaHlsaW5rKTtcXG4gXFxuIFxcdGRtYV9mcmVlX2NvaGVyZW50KFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYsIFI4MTY5X1JYX1JJTkdfQllURVMsIHRwLVxcdTAwM2VSeERlc2NBcnJheSxcXG4gXFx0XFx0XFx0ICB0cC1cXHUwMDNlUnhQaHlBZGRyKTtcXG5AQCAtNTExMiw5ICs1MjIxLDExIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKHJldHZhbCBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcXG4gXFxuLVxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4tXFx0aWYgKHJldHZhbClcXG4tXFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuK1xcdGlmICh0cC1cXHUwMDNlcGh5ZGV2KSB7XFxuK1xcdFxcdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcXG4rXFx0XFx0aWYgKHJldHZhbClcXG4rXFx0XFx0XFx0Z290byBlcnJfZnJlZV9pcnE7XFxuK1xcdH1cXG4gXFxuIFxcdHJ0bDgxNjlfdXAodHApO1xcbiBcXHRydGw4MTY5X2luaXRfY291bnRlcl9vZmZzZXRzKHRwKTtcXG5AQCAtNTE5MCw4ICs1MzAxLDExIEBAIHN0YXRpYyBpbnQgcnRsODE2OV9ydW50aW1lX3Jlc3VtZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdHJ0bF9yYXJfc2V0KHRwLCB0cC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuIFxcdF9fcnRsODE2OV9zZXRfd29sKHRwLCB0cC1cXHUwMDNlc2F2ZWRfd29sb3B0cyk7XFxuIFxcbi1cXHRpZiAodHAtXFx1MDAzZVR4RGVzY0FycmF5KVxcbitcXHRpZiAodHAtXFx1MDAzZVR4RGVzY0FycmF5KSB7XFxuK1xcdFxcdHJ0bmxfbG9jaygpO1xcbiBcXHRcXHRydGw4MTY5X3VwKHRwKTtcXG4rXFx0XFx0cnRubF91bmxvY2soKTtcXG4rXFx0fVxcbiBcXG4gXFx0bmV0aWZfZGV2aWNlX2F0dGFjaCh0cC1cXHUwMDNlZGV2KTtcXG4gXFxuQEAgLTUyODgsNiArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cXHUwMDNlbGVkcyk7XFxuIFxcbiBcXHR1bnJlZ2lzdGVyX25ldGRldih0cC1cXHUwMDNlZGV2KTtcXG4rXFx0aWYgKHRwLVxcdTAwM2VwaHlsaW5rKVxcbitcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXG4gXFx0aWYgKHRwLVxcdTAwM2VkYXNoX3R5cGUgIT0gUlRMX0RBU0hfTk9ORSlcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RvcCh0cCk7XFxuQEAgLTUzMTAsNyArNTQyNiw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgcnRsX25ldGRldl9vcHMgPSB7XFxuIFxcdC5uZG9fZml4X2ZlYXR1cmVzXFx0PSBydGw4MTY5X2ZpeF9mZWF0dXJlcyxcXG4gXFx0Lm5kb19zZXRfZmVhdHVyZXNcXHQ9IHJ0bDgxNjlfc2V0X2ZlYXR1cmVzLFxcbiBcXHQubmRvX3NldF9tYWNfYWRkcmVzc1xcdD0gcnRsX3NldF9tYWNfYWRkcmVzcyxcXG4tXFx0Lm5kb19ldGhfaW9jdGxcXHRcXHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxcbitcXHQubmRvX2V0aF9pb2N0bFxcdFxcdD0gcnRsODE2OV9pb2N0bCxcXG4gXFx0Lm5kb19zZXRfcnhfbW9kZVxcdD0gcnRsX3NldF9yeF9tb2RlLFxcbiAjaWZkZWYgQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVJcXG4gXFx0Lm5kb19wb2xsX2NvbnRyb2xsZXJcXHQ9IHJ0bDgxNjlfbmV0cG9sbCxcXG5AQCAtNTQyMywxMSArNTUzOSwzOSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NShzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cywgaW50IGFkZHIsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IHJ0bF9waHlfaXJxX21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZCwgdW5zaWduZWQgaW50IGlycSxcXG4rXFx0XFx0XFx0ICAgaXJxX2h3X251bWJlcl90IGh3aXJxKVxcbit7XFxuK1xcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFxcdTAwMjZkdW1teV9pcnFfY2hpcCwgaGFuZGxlX3NpbXBsZV9pcnEpO1xcbitcXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXFx1MDAzZWhvc3RfZGF0YSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBydGxfcGh5X2lycV9kb21haW5fb3BzID0ge1xcbitcXHQubWFwID0gcnRsX3BoeV9pcnFfbWFwLFxcbit9O1xcbitcXG4rc3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcXG4rXFx0aW50IHZpcnE7XFxuK1xcbitcXHRpZiAodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XFxuK1xcdFxcdHZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XFxuK1xcdFxcdGlmICh2aXJxKVxcbitcXHRcXHRcXHRpcnFfZGlzcG9zZV9tYXBwaW5nKHZpcnEpO1xcbitcXG4rXFx0XFx0aXJxX2RvbWFpbl9yZW1vdmUodHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluKTtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeV9pcnFfZG9tYWluID0gTlVMTDtcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuIHtcXG4gXFx0c3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0cC1cXHUwMDNlcGNpX2RldjtcXG4gXFx0c3RydWN0IG1paV9idXMgKm5ld19idXM7XFxuLVxcdGludCByZXQ7XFxuK1xcdGludCByZXQsIHZpcnE7XFxuIFxcbiBcXHQvKiBPbiBzb21lIGJvYXJkcyB3aXRoIHRoaXMgY2hpcCB2ZXJzaW9uIHRoZSBCSU9TIGlzIGJ1Z2d5IGFuZCBtaXNzZXNcXG4gXFx0ICogdG8gcmVzZXQgdGhlIFBIWSBwYWdlIHNlbGVjdG9yLiBUaGlzIHJlc3VsdHMgaW4gdGhlIFBIWSBJRCByZWFkXFxuQEAgLTU0NDUsNyArNTU4OSw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0bmV3X2J1cy1cXHUwMDNlbmFtZSA9IFxcXCJyODE2OVxcXCI7XFxuIFxcdG5ld19idXMtXFx1MDAzZXByaXYgPSB0cDtcXG4gXFx0bmV3X2J1cy1cXHUwMDNlcGFyZW50ID0gXFx1MDAyNnBkZXYtXFx1MDAzZWRldjtcXG4tXFx0bmV3X2J1cy1cXHUwMDNlaXJxWzBdID0gUEhZX01BQ19JTlRFUlJVUFQ7XFxuIFxcdG5ld19idXMtXFx1MDAzZXBoeV9tYXNrID0gR0VOTUFTSygzMSwgMSk7XFxuIFxcdHNucHJpbnRmKG5ld19idXMtXFx1MDAzZWlkLCBNSUlfQlVTX0lEX1NJWkUsIFxcXCJyODE2OS0leC0leFxcXCIsXFxuIFxcdFxcdCBwY2lfZG9tYWluX25yKHBkZXYtXFx1MDAzZWJ1cyksIHBjaV9kZXZfaWQocGRldikpO1xcbkBAIC01NDU4LDYgKzU2MDEsMjEgQEAgc3RhdGljIGludCByODE2OV9tZGlvX3JlZ2lzdGVyKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRcXHRuZXdfYnVzLVxcdTAwM2V3cml0ZV9jNDUgPSByODE2OV9tZGlvX3dyaXRlX3JlZ19jNDU7XFxuIFxcdH1cXG4gXFxuK1xcdHRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBcXHUwMDI2cnRsX3BoeV9pcnFfZG9tYWluX29wcywgdHApO1xcbitcXHRpZiAoIXRwLVxcdTAwM2VwaHlfaXJxX2RvbWFpbilcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcbitcXHRyZXQgPSBkZXZtX2FkZF9hY3Rpb25fb3JfcmVzZXQoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgcnRsX3BoeV9pcnFfY2xlYW51cCwgdHApO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0dmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC1cXHUwMDNlcGh5X2lycV9kb21haW4sIDApO1xcbitcXHRpZiAoIXZpcnEpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0bmV3X2J1cy1cXHUwMDNlaXJxWzBdID0gdmlycTtcXG4rXFxuIFxcdHJldCA9IGRldm1fbWRpb2J1c19yZWdpc3RlcihcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBuZXdfYnVzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG5AQCAtNTQ3NCwxNiArNTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcXG4gXFx0XFx0cmV0dXJuIC1FVU5BVENIO1xcbiBcXHR9XFxuIFxcbi1cXHR0cC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VtYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuLVxcdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcXG4tXFx0XFx0cGh5X3N1cHBvcnRfZWVlKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVxcdTAwM2VwaHlkZXYpO1xcbi1cXG4tXFx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnMgKi9cXG4tXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzYxKVxcbi1cXHRcXHRwaHlfZGlzYWJsZV9lZWVfbW9kZSh0cC1cXHUwMDNlcGh5ZGV2LFxcbi1cXHRcXHRcXHRcXHQgICAgIEVUSFRPT0xfTElOS19NT0RFXzI1MDBiYXNlVF9GdWxsX0JJVCk7XFxuLVxcbiBcXHQvKiBQSFkgd2lsbCBiZSB3b2tlbiB1cCBpbiBydGxfb3BlbigpICovXFxuIFxcdHBoeV9zdXNwZW5kKHRwLVxcdTAwM2VwaHlkZXYpO1xcbiBcXG5AQCAtNTU5OSw2ICs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbiBcXHRyZXR1cm4gZmFsc2U7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHJ0bF9tYWNfbGlua19kb3duKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1bnNpZ25lZCBpbnQgbW9kZSxcXG4rXFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdHRwLVxcdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XFxuK1xcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxcbitcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG1vZGUsIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuK1xcdFxcdFxcdCAgICBpbnQgc3BlZWQsIGludCBkdXBsZXgsIGJvb2wgdHhfcGF1c2UsIGJvb2wgcnhfcGF1c2UpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcdHN0cnVjdCBkZXZpY2UgKmQgPSB0cF90b19kZXYodHApO1xcbitcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gc3BlZWQ7XFxuK1xcdHJ0bF9saW5rX2NoZ19wYXRjaCh0cCwgc3BlZWQpO1xcbitcXG4rXFx0cG1fcmVxdWVzdF9yZXN1bWUoZCk7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgcGh5bGlua19wY3MgKnJ0bF9tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdGlmIChpbnRlcmZhY2UgPT0gUEhZX0lOVEVSRkFDRV9NT0RFXzEwMDBCQVNFWCB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxcbitcXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUilcXG4rXFx0XFx0cmV0dXJuIFxcdTAwMjZ0cC1cXHUwMDNlcGNzO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcXG4re1xcbit9XFxuK1xcbitzdGF0aWMgdTE2IHJ0bDgxNjlfc2RzX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUxNiBzZHNfcmVnKVxcbit7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUxNiB2YWwgPSAwO1xcbitcXG4rXFx0cmF3X3NwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZ0cC1cXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XFxuK1xcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19BRERSX1JFRywgc2RzX3JlZyk7XFxuK1xcdF9fcjgxNjhfbWFjX29jcF93cml0ZSh0cCwgT0NQX1NEU19DTURfUkVHLCBTRFNfQ01EX1JFQUQpO1xcbitcXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XFxuK1xcdHJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZ0cC1cXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XFxuK1xcbitcXHRyZXR1cm4gdmFsO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuK1xcdFxcdFxcdFxcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbit7XFxuK1xcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcXG4rXFxuK1xcdGlmICh0cC1cXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xcbitcXHRcXHR1MTYgc3RhdDE7XFxuK1xcbitcXHRcXHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcXG4rXFxuK1xcdFxcdGlmICghKHN0YXQxIFxcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcXG4rXFx0XFx0XFx0c3RhdDEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0M0NV9CQVNFICsgTURJT19TVEFUMSk7XFxuK1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlbGluayA9ICEhKHN0YXQxIFxcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKTtcXG4rXFx0XFx0aWYgKCFzdGF0ZS1cXHUwMDNlbGluaylcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0XFx0c3RhdGUtXFx1MDAzZWR1cGxleCA9IERVUExFWF9GVUxMO1xcbitcXHRcXHRzdGF0ZS1cXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0dTE2IGJtc3IsIGxwYTtcXG4rXFxuK1xcdFxcdGJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0JNU1IpO1xcbitcXHRcXHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0xQQSk7XFxuK1xcdFxcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXFxuK1xcdFxcdFxcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXFxuK1xcdFxcdFxcdCAgICAgIGNvbnN0IHVuc2lnbmVkIGxvbmcgKmFkdmVydGlzaW5nLFxcbitcXHRcXHRcXHQgICAgICBib29sIHBlcm1pdF9wYXVzZV90b19tYWMpXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YocGNzLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwY3MpO1xcbitcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxcbitcXHRcXHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG4rXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IHBoeWxpbmtfbGlua19zdGF0ZSAqc3RhdGUpXFxuK3tcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuK3tcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcXG4re1xcbitcXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcXG4rXFxuK1xcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXFxuK3tcXG4rXFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XFxuK1xcbitcXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxcbitcXHRcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuK1xcbitcXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcXG4rXFx0Lm1hY19zZWxlY3RfcGNzID0gcnRsX21hY19zZWxlY3RfcGNzLFxcbitcXHQubWFjX2NvbmZpZyA9IHJ0bF9tYWNfY29uZmlnLFxcbitcXHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcXG4rXFx0Lm1hY19saW5rX3VwICAgID0gcnRsX21hY19saW5rX3VwLFxcbitcXHQubWFjX2Rpc2FibGVfdHhfbHBpID0gcnRsX21hY19kaXNhYmxlX3R4X2xwaSxcXG4rXFx0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxcbit9O1xcbitcXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcXG4rXFxuK1xcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXFx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0Y2FwcyB8PSBNQUNfMTAwRkQgfCBNQUNfMTAwMEZEO1xcbitcXG4rXFx0LyogbWltaWMgYmVoYXZpb3Igb2YgcjgxMjUvcjgxMjYgdmVuZG9yIGRyaXZlcnNcXG4rXFx0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2Vzbid0IHN1cHBvcnQgMi41RyBlZWVcXG4rXFx0ICovXFxuK1xcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcXG4rXFx0XFx0Y2FwcyB8PSBNQUNfMjUwMEZEO1xcbitcXHRpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNzApXFxuK1xcdFxcdGNhcHMgfD0gTUFDXzUwMDBGRDtcXG4rXFx0aWYgKHRwLVxcdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzgwKVxcbitcXHRcXHRjYXBzIHw9IE1BQ18xMDAwMEZEO1xcbitcXG4rXFx0cmV0dXJuIGNhcHM7XFxuK31cXG4rXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcGh5bGlua19wY3Nfb3BzIHI4MTY5X3Bjc19vcHMgPSB7XFxuK1xcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcXG4rXFx0LnBjc19nZXRfc3RhdGUgPSBydGw4MTY5X3Bjc19nZXRfc3RhdGUsXFxuK1xcdC5wY3NfY29uZmlnID0gcnRsODE2OV9wY3NfY29uZmlnLFxcbitcXHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxcbit9O1xcbitcXG4rc3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxcbit7XFxuK1xcdHN0cnVjdCBwaHlsaW5rICpwbDtcXG4rXFx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xcbitcXG4rXFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFxcdTAwMjZ0cC1cXHUwMDNlZGV2LVxcdTAwM2VkZXY7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XFxuK1xcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApO1xcbitcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XFxuK1xcbitcXHRzd2l0Y2ggKHRwLVxcdTAwM2VzZnBfbW9kZSkge1xcbitcXHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcXG4rXFx0XFx0dHAtXFx1MDAzZXBjcy5vcHMgPSBcXHUwMDI2cjgxNjlfcGNzX29wcztcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xcbitcXHRcXHR0cC1cXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEO1xcbitcXHRcXHRicmVhaztcXG4rXFx0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxcbitcXHRcXHR0cC1cXHUwMDNlcGNzLm9wcyA9IFxcdTAwMjZyODE2OV9wY3Nfb3BzO1xcbitcXHRcXHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV8xMEdCQVNFUjtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDAwRkQ7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcXG4rXFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwIHwgTUFDXzEwMDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQgfFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTUFDXzUwMDBGRCB8IE1BQ18xMDAwMEZEO1xcbitcXHRcXHRlbHNlIGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcXG4rXFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8XFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcXG4rXFx0XFx0ZWxzZSBpZiAodHAtXFx1MDAzZW1hY192ZXJzaW9uIFxcdTAwM2U9IFJUTF9HSUdBX01BQ19WRVJfNjEpXFxuK1xcdFxcdFxcdHRwLVxcdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdGlmICh0cC1cXHUwMDNlc3VwcG9ydHNfZ21paSlcXG4rXFx0XFx0XFx0XFx0dHAtXFx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcXG4rXFxuK1xcdFxcdGlmICh0cC1cXHUwMDNlbWFjX3ZlcnNpb24gXFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxcbitcXHRcXHRcXHRwaHlfbW9kZSA9IHRwLVxcdTAwM2VzdXBwb3J0c19nbWlpID8gUEhZX0lOVEVSRkFDRV9NT0RFX0dNSUkgOlxcbitcXHRcXHRcXHRcXHQgICBQSFlfSU5URVJGQUNFX01PREVfTUlJO1xcbitcXHRcXHRlbHNlXFxuK1xcdFxcdFxcdHBoeV9tb2RlID0gUEhZX0lOVEVSRkFDRV9NT0RFX0lOVEVSTkFMO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0X19zZXRfYml0KHBoeV9tb2RlLCB0cC1cXHUwMDNlcGh5bGlua19jb25maWcuc3VwcG9ydGVkX2ludGVyZmFjZXMpO1xcbitcXHRwbCA9IHBoeWxpbmtfY3JlYXRlKFxcdTAwMjZ0cC1cXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXFx1MDAzZWZ3bm9kZSxcXG4rXFx0XFx0XFx0ICAgIHBoeV9tb2RlLCBcXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XFxuK1xcdGlmIChJU19FUlIocGwpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihwbCk7XFxuK1xcbitcXHR0cC1cXHUwMDNlcGh5bGluayA9IHBsO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xcbkBAIC01NjY3LDYgKzYwMzYsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0XFx0XFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcXG4gXFx0dHAtXFx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cXHUwMDNlbWFjX3ZlcnNpb247XFxuIFxcdHRwLVxcdTAwM2Vmd19uYW1lID0gY2hpcC1cXHUwMDNlZndfbmFtZTtcXG4rXFx0dHAtXFx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcXG4gXFxuIFxcdC8qIERpc2FibGUgQVNQTSBMMSBhcyB0aGF0IGNhdXNlIHJhbmRvbSBkZXZpY2Ugc3RvcCB3b3JraW5nXFxuIFxcdCAqIHByb2JsZW1zIGFzIHdlbGwgYXMgZnVsbCBzeXN0ZW0gaGFuZ3MgZm9yIHNvbWUgUENJZSBkZXZpY2VzIHVzZXJzLlxcbkBAIC01Njc5LDEyICs2MDQ5LDcgQEAgc3RhdGljIGludCBydGxfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXFxuIFxcdH1cXG4gXFx0dHAtXFx1MDAzZWFzcG1fbWFuYWdlYWJsZSA9ICFyYztcXG4gXFxuLVxcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcXG4tXFx0XFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIDB4ZDAwNik7XFxuLVxcbi1cXHRcXHRpZiAoKGRhdGEgXFx1MDAyNiAweGZmKSA9PSAweDA3KVxcbi1cXHRcXHRcXHR0cC1cXHUwMDNlc2ZwX21vZGUgPSB0cnVlO1xcbi1cXHR9XFxuK1xcdHRwLVxcdTAwM2VzZnBfbW9kZSA9IHJ0bF9nZXRfc2ZwX21vZGUodHApO1xcbiBcXG4gXFx0dHAtXFx1MDAzZWRhc2hfdHlwZSA9IHJ0bF9nZXRfZGFzaF90eXBlKHRwKTtcXG4gXFx0dHAtXFx1MDAzZWRhc2hfZW5hYmxlZCA9IHJ0bF9kYXNoX2lzX2VuYWJsZWQodHApO1xcbkBAIC01Nzg4LDEzICs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbiBcXG4gXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcXG4gXFxuLVxcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XFxuK1xcdHJjID0gcnRsX2luaXRfcGh5bGluayh0cCk7XFxuIFxcdGlmIChyYylcXG4gXFx0XFx0cmV0dXJuIHJjO1xcbiBcXG4rXFx0aWYgKHRwLVxcdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQX05PTkUpIHtcXG4rXFx0XFx0cmMgPSByODE2OV9tZGlvX3JlZ2lzdGVyKHRwKTtcXG4rXFx0XFx0aWYgKHJjKSB7XFxuK1xcdFxcdFxcdHBoeWxpbmtfZGVzdHJveSh0cC1cXHUwMDNlcGh5bGluayk7XFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbiBcXHRyYyA9IHJlZ2lzdGVyX25ldGRldihkZXYpO1xcbi1cXHRpZiAocmMpXFxuK1xcdGlmIChyYykge1xcbitcXHRcXHRwaHlsaW5rX2Rlc3Ryb3kodHAtXFx1MDAzZXBoeWxpbmspO1xcbiBcXHRcXHRyZXR1cm4gcmM7XFxuK1xcdH1cXG4gXFxuIFxcdGlmIChJU19FTkFCTEVEKENPTkZJR19SODE2OV9MRURTKSkge1xcbiBcXHRcXHRpZiAocnRsX2lzXzgxMjUodHApKVxcbkBAIC01ODE3LDcgKzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFx0XFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSlcXG4rXFx0aWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikgXFx1MDAyNlxcdTAwMjYgdHAtXFx1MDAzZXNmcF9tb2RlICE9IFJUTF9TRlBfODEyN19BVEYpXFxuIFxcdFxcdHBtX3J1bnRpbWVfcHV0X3N5bmMoXFx1MDAyNnBkZXYtXFx1MDAzZWRldik7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NDMuMzI3MTQxMTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwNjE0MDAyODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlI4MTY5XCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicnRsX2luaXRfcGh5bGlua1wiLFxuICAgIFwicnRsX21hY19saW5rX2Rvd25cIixcbiAgICBcInJ0bF9tYWNfbGlua191cFwiLFxuICAgIFwicnRsX21hY19zZWxlY3RfcGNzXCIsXG4gICAgXCJydGw4MTY5X3Nkc19yZWFkXCIsXG4gICAgXCJydGw4MTY5X3Bjc19nZXRfc3RhdGVcIixcbiAgICBcInJ0bDgxNjlfcGNzX2NvbmZpZ1wiLFxuICAgIFwicnRsX21hY19lbmFibGVfdHhfbHBpXCIsXG4gICAgXCJydGxfbWFjX2Rpc2FibGVfdHhfbHBpXCIsXG4gICAgXCJydGw4MTY5X2dldF9scGlfY2Fwc1wiLFxuICAgIFwicnRsX3BoeV9pcnFfbWFwXCIsXG4gICAgXCJydGxfcGh5X2lycV9jbGVhbnVwXCIsXG4gICAgXCJydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25cIixcbiAgICBcInJ0bF9nZXRfc2ZwX21vZGVcIixcbiAgICBcInJ0bDgxNjlfaW9jdGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtaWdyYXRlcyB0aGUgcjgxNjkgbmV0d29yayBkcml2ZXIgdG8gdXNlIHRoZSBwaHlsaW5rIEFQSSBpbnN0ZWFkIG9mIGRpcmVjdCBwaHlkZXYgY2FsbHMuIEl0IGludHJvZHVjZXMgc2V2ZXJhbCBuZXcgZnVuY3Rpb25zIGZvciBwaHlsaW5rIE1BQyBhbmQgUENTIG9wZXJhdGlvbnMsIElSUSBkb21haW4gaGFuZGxpbmcsIGFuZCBTRlAgbW9kZSBkZXRlY3Rpb24uIFRoZXNlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWxseSBzaWduaWZpY2FudCBhbmQgcmVhY2hhYmxlIHZpYSBQQ0kgZGV2aWNlIGZ1enppbmcgYW5kIG5ldHdvcmsgaW50ZXJmYWNlIG9wZXJhdGlvbnMgKGUuZy4sIGV0aHRvb2wsIGlvY3RsLCBsaW5rIHN0YXRlIGNoYW5nZXMpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDI1YmVhZDlmMjk1NmQ3OTgwYTI2NWRlMWRkMjgxOGJhNzQ0NGVlN2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAwNjoyNzo0MSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ1xuaW5kZXggOWIwZjRmOTYzMWRiYWEuLjQ5YWM3MjczNDIyNWY3IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWdcbkBAIC04OCw2ICs4OCw3IEBAIGNvbmZpZyBSODE2OVxuIFx0c2VsZWN0IENSQzMyXG4gXHRzZWxlY3QgUEhZTElCXG4gXHRzZWxlY3QgUkVBTFRFS19QSFlcbitcdHNlbGVjdCBQSFlMSU5LXG4gXHRoZWxwXG4gXHQgIFNheSBZIGhlcmUgaWYgeW91IGhhdmUgYSBSZWFsdGVrIEV0aGVybmV0IGFkYXB0ZXIgYmVsb25naW5nIHRvXG4gXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uY1xuaW5kZXggZWM0ZmMyMWZhMjFmYjAuLjZmNDIyMTA3OWU4Zjk5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmNcbisrKyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXG5AQCAtMjEsMTEgKzIxLDE0IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaXJxLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pcnFkb21haW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3RjcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvaW50ZXJydXB0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9kbWEtbWFwcGluZy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcG1fcnVudGltZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYml0ZmllbGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BoeWxpbmsuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByZWZldGNoLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pcHY2LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuQEAgLTk2LDYgKzk5LDE5IEBAXG4gI2RlZmluZSBKVU1CT185S1x0KDkgKiBTWl8xSyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiAjZGVmaW5lIEpVTUJPXzE2S1x0KFNaXzE2SyAtIFZMQU5fRVRIX0hMRU4gLSBFVEhfRkNTX0xFTilcbiBcbisjZGVmaW5lIE9DUF9TRFNfQUREUl9SRUdcdDB4RUIxMFxuKyNkZWZpbmUgT0NQX1NEU19DTURfUkVHXHRcdDB4RUIwRVxuKyNkZWZpbmUgT0NQX1NEU19EQVRBX1JFR1x0MHhFQjE0XG4rI2RlZmluZSBTRFNfQ01EX1JFQURcdFx0MHgwMDAxXG4rI2RlZmluZSBSVExfU0RTX0MyMl9CQVNFXHQweDQwXG4rI2RlZmluZSBSVExfU0RTX0M0NV9CQVNFXHQweDAwODBcbisjZGVmaW5lIFJUTF9QS0dfREVURUNUXHRcdDB4ZGMwMFxuKyNkZWZpbmUgUlRMX1BLR19ERVRFQ1RfTUFTS1x0MHgwMDc4XG4rI2RlZmluZSBSVExfUEtHX0RFVEVDVF84MTE2QUZcdDB4MDAzMFxuKyNkZWZpbmUgUlRMX0lOVF9IV19JRFx0XHQweGQwMDZcbisjZGVmaW5lIFJUTF9JTlRfSFdfSURfTUFTS1x0MHgwMGZmXG4rI2RlZmluZSBSVExfSU5UX0hXX0lEXzgxMTZBRlx0MHgwMDAwXG4rXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcbiBcdHUzMiBtYXNrO1xuIFx0dTMyIHZhbDtcbkBAIC0zMzQsMTEgKzM1MCwxNiBAQCBlbnVtIHJ0bF9yZWdpc3RlcnMge1xuIFx0QUxEUFNfTFRSXHQ9IDB4ZTBhMixcbiBcdExUUl9PQkZGX0xPQ0tcdD0gMHhlMDMyLFxuIFx0TFRSX1NOT09QXHQ9IDB4ZTAzNCxcbitcdFNFTkRfTFRSX01TR1x0PSAweGUwMzgsXG4gXG4gI2RlZmluZSBBTERQU19MVFJfRU5cdFx0XHRCSVQoMClcbiAjZGVmaW5lIExUUl9PQkZGX0xPQ0tfRU5cdFx0QklUKDApXG4gI2RlZmluZSBMSU5LX1NQRUVEX0NIQU5HRV9FTlx0XHRCSVQoMTQpXG4gI2RlZmluZSBMVFJfU05PT1BfRU5cdFx0XHRHRU5NQVNLKDE1LCAxNClcbisjZGVmaW5lIExUUl9NU0dfRU5cdFx0XHRCSVQoMClcbisjZGVmaW5lIFJUTDgxMTZBRl9GVU5DX1BNX0NTUlx0XHQweDgwXG4rI2RlZmluZSBSVEw4MTE2QUZfRlVOQ19FWFBfTE5LQ1RMXHQweDQ0XG4rI2RlZmluZSBSVExfUE1fRDNIT1RcdFx0XHRHRU5NQVNLKDEsIDApXG4gfTtcbiBcbiBlbnVtIHJ0bDgxNjhfODEwMV9yZWdpc3RlcnMge1xuQEAgLTcyOCw2ICs3NDksMTIgQEAgZW51bSBydGxfZGFzaF90eXBlIHtcbiBcdFJUTF9EQVNIXzI1X0JQLFxuIH07XG4gXG4rZW51bSBydGxfc2ZwX21vZGUge1xuK1x0UlRMX1NGUF9OT05FLFxuK1x0UlRMX1NGUF84MTY4X0FGLFxuK1x0UlRMX1NGUF84MTI3X0FURixcbit9O1xuK1xuIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dm9pZCBfX2lvbWVtICptbWlvX2FkZHI7XHQvKiBtZW1vcnkgbWFwIHBoeXNpY2FsIGFkZHJlc3MgKi9cbiBcdHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2O1xuQEAgLTczNiw2ICs3NjMsNyBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHN0cnVjdCBuYXBpX3N0cnVjdCBuYXBpO1xuIFx0ZW51bSBtYWNfdmVyc2lvbiBtYWNfdmVyc2lvbjtcbiBcdGVudW0gcnRsX2Rhc2hfdHlwZSBkYXNoX3R5cGU7XG4rXHRlbnVtIHJ0bF9zZnBfbW9kZSBzZnBfbW9kZTtcbiBcdHUzMiBjdXJfcng7IC8qIEluZGV4IGludG8gdGhlIFJ4IGRlc2NyaXB0b3IgYnVmZmVyIG9mIG5leHQgUnggcGt0LiAqL1xuIFx0dTMyIGN1cl90eDsgLyogSW5kZXggaW50byB0aGUgVHggZGVzY3JpcHRvciBidWZmZXIgb2YgbmV4dCBSeCBwa3QuICovXG4gXHR1MzIgZGlydHlfdHg7XG5AQCAtNzUwLDYgKzc3OCw3IEBAIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUge1xuIFx0dTMyIGlycV9tYXNrO1xuIFx0aW50IGlycTtcbiBcdHN0cnVjdCBjbGsgKmNsaztcbitcdGludCBzcGVlZDtcbiBcbiBcdHN0cnVjdCB7XG4gXHRcdERFQ0xBUkVfQklUTUFQKGZsYWdzLCBSVExfRkxBR19NQVgpO1xuQEAgLTc2Miw3ICs3OTEsNiBAQCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlIHtcbiBcdHVuc2lnbmVkIHN1cHBvcnRzX2dtaWk6MTtcbiBcdHVuc2lnbmVkIGFzcG1fbWFuYWdlYWJsZToxO1xuIFx0dW5zaWduZWQgZGFzaF9lbmFibGVkOjE7XG4tXHRib29sIHNmcF9tb2RlOjE7XG4gXHRkbWFfYWRkcl90IGNvdW50ZXJzX3BoeXNfYWRkcjtcbiBcdHN0cnVjdCBydGw4MTY5X2NvdW50ZXJzICpjb3VudGVycztcbiBcdHN0cnVjdCBydGw4MTY5X3RjX29mZnNldHMgdGNfb2Zmc2V0O1xuQEAgLTc3NCw2ICs4MDIsMTIgQEAgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSB7XG4gXHRzdHJ1Y3QgcjgxNjlfbGVkX2NsYXNzZGV2ICpsZWRzO1xuIFxuIFx0dTMyIG9jcF9iYXNlO1xuK1x0c3RydWN0IHBoeWxpbmsgKnBoeWxpbms7XG4rXHRzdHJ1Y3QgcGh5bGlua19jb25maWcgcGh5bGlua19jb25maWc7XG4rXHRzdHJ1Y3QgcGh5bGlua19wY3MgcGNzO1xuK1x0c3RydWN0IGlycV9kb21haW4gKnBoeV9pcnFfZG9tYWluO1xuK1x0c3RydWN0IGV0aHRvb2xfcGF1c2VwYXJhbSBzYXZlZF9wYXVzZTtcbitcdGJvb2wganVtYm9fcGF1c2Vfc2F2ZWQ7XG4gfTtcbiBcbiB0eXBlZGVmIHZvaWQgKCpydGxfZ2VuZXJpY19mY3QpKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKTtcbkBAIC0xMTI4LDEwICsxMTYyLDYgQEAgc3RhdGljIGludCByODE2OF9waHlfb2NwX3JlYWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIHUzMiByZWcpXG4gXHRpZiAocnRsX29jcF9yZWdfZmFpbHVyZShyZWcpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdC8qIFJldHVybiBkdW1teSBNSUlfUEhZU0lEMiBpbiBTRlAgbW9kZSB0byBtYXRjaCBTRlAgUEhZIGRyaXZlciAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlIFx1MDAyNlx1MDAyNiByZWcgPT0gKE9DUF9TVERfUEhZX0JBU0UgKyAyICogTUlJX1BIWVNJRDIpKVxuLVx0XHRyZXR1cm4gUEhZX0lEX1JUTF9EVU1NWV9TRlAgXHUwMDI2IDB4ZmZmZjtcbi1cbiBcdFJUTF9XMzIodHAsIEdQSFlfT0NQLCByZWcgXHUwMDNjXHUwMDNjIDE1KTtcbiBcbiBcdHJldHVybiBydGxfbG9vcF93YWl0X2hpZ2godHAsIFx1MDAyNnJ0bF9vY3BfZ3BoeV9jb25kLCAyNSwgMTApID9cbkBAIC0xMjE3LDEyICsxMjQ3LDYgQEAgc3RhdGljIHZvaWQgcjgxMjdfc2ZwX2luaXRfMTBnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfcGh5X29jcF93cml0ZSh0cCwgMHhjODA0LCAodmFsIFx1MDAyNiB+MHgwMDBmKSB8IDB4MDAwYyk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJ0bF9zZnBfaW5pdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbi17XG4tXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbi1cdFx0cjgxMjdfc2ZwX2luaXRfMTBnKHRwKTtcbi19XG4tXG4gc3RhdGljIHZvaWQgcnRsX3NmcF9yZXNldChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbkBAIC0xMjgzLDYgKzEzMDcsMTUgQEAgc3RhdGljIHZvaWQgbWFjX21jdV93cml0ZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZywgaW50IHZhbHVlKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgdHAtXHUwMDNlb2NwX2Jhc2UgKyByZWcsIHZhbHVlKTtcbiB9XG4gXG4rc3RhdGljIGJvb2wgcnRsX2lzXzgxMTZhZihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbit7XG4rXHRyZXR1cm4gdHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl81MiBcdTAwMjZcdTAwMjZcbitcdFx0KHI4MTY4X21hY19vY3BfcmVhZCh0cCwgUlRMX1BLR19ERVRFQ1QpIFx1MDAyNiBSVExfUEtHX0RFVEVDVF9NQVNLKSA9PVxuK1x0XHRSVExfUEtHX0RFVEVDVF84MTE2QUYgXHUwMDI2XHUwMDI2XG4rXHRcdChyODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpIFx1MDAyNiBSVExfSU5UX0hXX0lEX01BU0spID09XG4rXHRcdFJUTF9JTlRfSFdfSURfODExNkFGO1xuK31cbitcbiBzdGF0aWMgaW50IG1hY19tY3VfcmVhZChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHJlZylcbiB7XG4gXHRyZXR1cm4gcjgxNjhfbWFjX29jcF9yZWFkKHRwLCB0cC1cdTAwM2VvY3BfYmFzZSArIHJlZyk7XG5AQCAtMTU3OCw2ICsxNjExLDIwIEBAIHN0YXRpYyBib29sIHJ0bF9kYXNoX2lzX2VuYWJsZWQoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBlbnVtIHJ0bF9zZnBfbW9kZSBydGxfZ2V0X3NmcF9tb2RlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdGlmIChydGxfaXNfODEyNSh0cCkpIHtcbitcdFx0dTE2IGRhdGEgPSByODE2OF9tYWNfb2NwX3JlYWQodHAsIFJUTF9JTlRfSFdfSUQpO1xuK1xuK1x0XHRpZiAoKGRhdGEgXHUwMDI2IDB4ZmYpID09IDB4MDcpXG4rXHRcdFx0cmV0dXJuIFJUTF9TRlBfODEyN19BVEY7XG4rXHR9IGVsc2UgaWYgKHJ0bF9pc184MTE2YWYodHApKSB7XG4rXHRcdHJldHVybiBSVExfU0ZQXzgxNjhfQUY7XG4rXHR9XG4rXG4rXHRyZXR1cm4gUlRMX1NGUF9OT05FO1xuK31cbitcbiBzdGF0aWMgZW51bSBydGxfZGFzaF90eXBlIHJ0bF9nZXRfZGFzaF90eXBlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbkBAIC0xNjczLDE2ICsxNzIwLDE0IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaXJxX21hc2tfYW5kX2FjayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdHJ0bF9wY2lfY29tbWl0KHRwKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3N0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgaW50IHNwZWVkKVxuIHtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXG4gXHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl8zNCB8fFxuIFx0ICAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzgpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4tXHRcdH0gZWxzZSBpZiAocGh5ZGV2LVx1MDAzZXNwZWVkID09IFNQRUVEXzEwMCkge1xuK1x0XHR9IGVsc2UgaWYgKHNwZWVkID09IFNQRUVEXzEwMCkge1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWJjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMWYpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwMDUpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTE2OTIsNyArMTczNyw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9saW5rX2NoZ19wYXRjaChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsX3Jlc2V0X3BhY2tldF9maWx0ZXIodHApO1xuIFx0fSBlbHNlIGlmICh0cC1cdTAwM2VtYWNfdmVyc2lvbiA9PSBSVExfR0lHQV9NQUNfVkVSXzM1IHx8XG4gXHRcdCAgIHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzYpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4rXHRcdGlmIChzcGVlZCA9PSBTUEVFRF8xMDAwKSB7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxYmMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAxMSk7XG4gXHRcdFx0cnRsX2VyaV93cml0ZSh0cCwgMHgxZGMsIEVSSUFSX01BU0tfMTExMSwgMHgwMDAwMDAwNSk7XG4gXHRcdH0gZWxzZSB7XG5AQCAtMTcwMCw3ICsxNzQ1LDcgQEAgc3RhdGljIHZvaWQgcnRsX2xpbmtfY2hnX3BhdGNoKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzExMTEsIDB4MDAwMDAwM2YpO1xuIFx0XHR9XG4gXHR9IGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfMzcpIHtcbi1cdFx0aWYgKHBoeWRldi1cdTAwM2VzcGVlZCA9PSBTUEVFRF8xMCkge1xuK1x0XHRpZiAoc3BlZWQgPT0gU1BFRURfMTApIHtcbiBcdFx0XHRydGxfZXJpX3dyaXRlKHRwLCAweDFkMCwgRVJJQVJfTUFTS18wMDExLCAweDRkMDIpO1xuIFx0XHRcdHJ0bF9lcmlfd3JpdGUodHAsIDB4MWRjLCBFUklBUl9NQVNLXzAwMTEsIDB4MDA2MGEpO1xuIFx0XHR9IGVsc2Uge1xuQEAgLTIwNzQsMTEgKzIxMTksMTEgQEAgcnRsX2NvYWxlc2NlX2luZm8oc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdGNpID0gcnRsX2NvYWxlc2NlX2luZm9fODE2OF84MTM2O1xuIFxuIFx0LyogaWYgc3BlZWQgaXMgdW5rbm93biBhc3N1bWUgaGlnaGVzdCBvbmUgKi9cbi1cdGlmICh0cC1cdTAwM2VwaHlkZXYtXHUwMDNlc3BlZWQgPT0gU1BFRURfVU5LTk9XTilcbitcdGlmICh0cC1cdTAwM2VzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuIFx0XHRyZXR1cm4gY2k7XG4gXG4gXHRmb3IgKDsgY2ktXHUwMDNlc3BlZWQ7IGNpKyspIHtcbi1cdFx0aWYgKHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZCA9PSBjaS1cdTAwM2VzcGVlZClcbitcdFx0aWYgKHRwLVx1MDAzZXNwZWVkID09IGNpLVx1MDAzZXNwZWVkKVxuIFx0XHRcdHJldHVybiBjaTtcbiBcdH1cbiBcbkBAIC0yMjM2LDcgKzIyODEsNyBAQCBzdGF0aWMgdm9pZCBydGxfc2V0X2VlZV90eGlkbGVfdGltZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCByODE2OV9nZXRfdHhfbHBpX3RpbWVyX3VzKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbi1cdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXBoeWRldi1cdTAwM2VzcGVlZDtcbitcdHVuc2lnbmVkIGludCBzcGVlZCA9IHRwLVx1MDAzZXNwZWVkO1xuIFx0dW5zaWduZWQgaW50IHRpbWVyID0gdHAtXHUwMDNldHhfbHBpX3RpbWVyO1xuIFxuIFx0aWYgKCF0aW1lciB8fCBzcGVlZCA9PSBTUEVFRF9VTktOT1dOKVxuQEAgLTIyNTQsNyArMjI5OSw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9nZXRfZWVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX2tlZWUgKmRhdGEpXG4gXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXG4tXHRyZXQgPSBwaHlfZXRodG9vbF9nZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4rXHRyZXQgPSBwaHlsaW5rX2V0aHRvb2xfZ2V0X2VlZSh0cC1cdTAwM2VwaHlsaW5rLCBkYXRhKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG5AQCAtMjI3MCw3ICsyMzE1LDcgQEAgc3RhdGljIGludCBydGw4MTY5X3NldF9lZWUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfa2VlZSAqZGF0YSlcbiBcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbi1cdHJldHVybiBwaHlfZXRodG9vbF9zZXRfZWVlKHRwLVx1MDAzZXBoeWRldiwgZGF0YSk7XG4rXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX3NldF9lZWUodHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMDEsMTMgKzIzNDYsOCBAQCBzdGF0aWMgdm9pZCBydGw4MTY5X2dldF9wYXVzZXBhcmFtKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtICpkYXRhKVxuIHtcbiBcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgdHhfcGF1c2UsIHJ4X3BhdXNlO1xuLVxuLVx0cGh5X2dldF9wYXVzZSh0cC1cdTAwM2VwaHlkZXYsIFx1MDAyNnR4X3BhdXNlLCBcdTAwMjZyeF9wYXVzZSk7XG4gXG4tXHRkYXRhLVx1MDAzZWF1dG9uZWcgPSB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYXV0b25lZztcbi1cdGRhdGEtXHUwMDNldHhfcGF1c2UgPSB0eF9wYXVzZSA/IDEgOiAwO1xuLVx0ZGF0YS1cdTAwM2VyeF9wYXVzZSA9IHJ4X3BhdXNlID8gMSA6IDA7XG4rXHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuQEAgLTIzMTgsOSArMjM1OCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9zZXRfcGF1c2VwYXJhbShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0aWYgKGRldi1cdTAwM2VtdHUgXHUwMDNlIEVUSF9EQVRBX0xFTilcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuLVx0cGh5X3NldF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldiwgZGF0YS1cdTAwM2VyeF9wYXVzZSwgZGF0YS1cdTAwM2V0eF9wYXVzZSk7XG4tXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgZGF0YSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9tYWNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMzg2LDM0ICsyNDI0LDI3IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZ2V0X2V0aF9jdHJsX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdGxlMzJfdG9fY3B1KHRwLVx1MDAzZWNvdW50ZXJzLVx1MDAzZXJ4X3Vua25vd25fb3Bjb2RlKTtcbiB9XG4gXG4tc3RhdGljIGludCBydGw4MTY5X3NldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbi1cdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4rc3RhdGljIGludCBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyhzdHJ1Y3QgbmV0X2RldmljZSAqbmRldixcbitcdFx0XHRcdCAgICAgIHN0cnVjdCBldGh0b29sX2xpbmtfa3NldHRpbmdzICpjbWQpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihuZGV2KTtcbi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB0cC1cdTAwM2VwaHlkZXY7XG4tXHRpbnQgZHVwbGV4ID0gY21kLVx1MDAzZWJhc2UuZHVwbGV4O1xuLVx0aW50IHNwZWVkID0gY21kLVx1MDAzZWJhc2Uuc3BlZWQ7XG4tXG4tXHRpZiAoIXRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRyZXR1cm4gcGh5X2V0aHRvb2xfa3NldHRpbmdzX3NldChwaHlkZXYsIGNtZCk7XG4tXG4tXHRpZiAoY21kLVx1MDAzZWJhc2UuYXV0b25lZyAhPSBBVVRPTkVHX0RJU0FCTEUpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuLVx0aWYgKCFwaHlfY2hlY2tfdmFsaWQoc3BlZWQsIGR1cGxleCwgcGh5ZGV2LVx1MDAzZXN1cHBvcnRlZCkpXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rXHRyZXR1cm4gcGh5bGlua19ldGh0b29sX2tzZXR0aW5nc19nZXQodHAtXHUwMDNlcGh5bGluaywgY21kKTtcbit9XG4gXG4tXHRwaHlkZXYtXHUwMDNlYXV0b25lZyA9IEFVVE9ORUdfRElTQUJMRTtcbi1cdHBoeWRldi1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuLVx0cGh5ZGV2LVx1MDAzZWR1cGxleCA9IGR1cGxleDtcbitzdGF0aWMgaW50IHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzKHN0cnVjdCBuZXRfZGV2aWNlICpuZGV2LFxuK1x0XHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgKmNtZClcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuIFxuLVx0cnRsX3NmcF9pbml0KHRwKTtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX3NldCh0cC1cdTAwM2VwaHlsaW5rLCBjbWQpO1xuK31cbiBcbi1cdG11dGV4X3VubG9jayhcdTAwMjZwaHlkZXYtXHUwMDNlbG9jayk7XG4rc3RhdGljIGludCBydGw4MTY5X253YXlfcmVzZXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KGRldik7XG4gXG4tXHRyZXR1cm4gMDtcbitcdHJldHVybiBwaHlsaW5rX2V0aHRvb2xfbndheV9yZXNldCh0cC1cdTAwM2VwaHlsaW5rKTtcbiB9XG4gXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuQEAgLTI0MzEsMTAgKzI0NjIsMTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX29wcyBydGw4MTY5X2V0aHRvb2xfb3BzID0ge1xuIFx0LmdldF9zc2V0X2NvdW50XHRcdD0gcnRsODE2OV9nZXRfc3NldF9jb3VudCxcbiBcdC5nZXRfZXRodG9vbF9zdGF0c1x0PSBydGw4MTY5X2dldF9ldGh0b29sX3N0YXRzLFxuIFx0LmdldF90c19pbmZvXHRcdD0gZXRodG9vbF9vcF9nZXRfdHNfaW5mbyxcbi1cdC5ud2F5X3Jlc2V0XHRcdD0gcGh5X2V0aHRvb2xfbndheV9yZXNldCxcbitcdC5ud2F5X3Jlc2V0XHRcdD0gcnRsODE2OV9ud2F5X3Jlc2V0LFxuIFx0LmdldF9lZWVcdFx0PSBydGw4MTY5X2dldF9lZWUsXG4gXHQuc2V0X2VlZVx0XHQ9IHJ0bDgxNjlfc2V0X2VlZSxcbi1cdC5nZXRfbGlua19rc2V0dGluZ3NcdD0gcGh5X2V0aHRvb2xfZ2V0X2xpbmtfa3NldHRpbmdzLFxuK1x0LmdldF9saW5rX2tzZXR0aW5nc1x0PSBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5ncyxcbiBcdC5zZXRfbGlua19rc2V0dGluZ3NcdD0gcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3MsXG4gXHQuZ2V0X3JpbmdwYXJhbVx0XHQ9IHJ0bDgxNjlfZ2V0X3JpbmdwYXJhbSxcbiBcdC5nZXRfcGF1c2Vfc3RhdHNcdD0gcnRsODE2OV9nZXRfcGF1c2Vfc3RhdHMsXG5AQCAtMjQ5OSw5ICsyNTMwLDEwIEBAIHZvaWQgcjgxNjlfYXBwbHlfZmlybXdhcmUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRcdHRwLVx1MDAzZW9jcF9iYXNlID0gT0NQX1NURF9QSFlfQkFTRTtcbiBcbiBcdFx0LyogUEhZIHNvZnQgcmVzZXQgbWF5IHN0aWxsIGJlIGluIHByb2dyZXNzICovXG4tXHRcdHBoeV9yZWFkX3BvbGxfdGltZW91dCh0cC1cdTAwM2VwaHlkZXYsIE1JSV9CTUNSLCB2YWwsXG4tXHRcdFx0XHQgICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4tXHRcdFx0XHQgICAgICA1MDAwMCwgNjAwMDAwLCB0cnVlKTtcbitcdFx0aWYgKHRwLVx1MDAzZXBoeWRldilcbitcdFx0XHRwaHlfcmVhZF9wb2xsX3RpbWVvdXQodHAtXHUwMDNlcGh5ZGV2LCBNSUlfQk1DUiwgdmFsLFxuK1x0XHRcdFx0XHQgICAgICAhKHZhbCBcdTAwMjYgQk1DUl9SRVNFVCksXG4rXHRcdFx0XHRcdCAgICAgIDUwMDAwLCA2MDAwMDAsIHRydWUpO1xuIFx0fVxuIH1cbiBcbkBAIC0yNTM4LDYgKzI1NzAsOCBAQCBzdGF0aWMgdm9pZCBydGxfc2NoZWR1bGVfdGFzayhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgZW51bSBydGxfZmxhZyBmbGFnKVxuIFxuIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4ge1xuK1x0cGh5X2luaXRfaHcodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeV9yZXN1bWUodHAtXHUwMDNlcGh5ZGV2KTtcbiBcdHI4MTY5X2h3X3BoeV9jb25maWcodHAsIHRwLVx1MDAzZXBoeWRldiwgdHAtXHUwMDNlbWFjX3ZlcnNpb24pO1xuIFxuIFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYz0gUlRMX0dJR0FfTUFDX1ZFUl8wNikge1xuQEAgLTI1NTIsOSArMjU4Niw2IEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfaW5pdF9waHkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHQgICAgdHAtXHUwMDNlcGNpX2Rldi1cdTAwM2VzdWJzeXN0ZW1fZGV2aWNlID09IDB4ZTAwMClcbiBcdFx0cGh5X3dyaXRlX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwMDAxLCAweDEwLCAweGYwMWIpO1xuIFxuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuLVx0XHRydGxfc2ZwX2luaXQodHApO1xuLVxuIFx0LyogV2UgbWF5IGhhdmUgY2FsbGVkIHBoeV9zcGVlZF9kb3duIGJlZm9yZSAqL1xuIFx0cGh5X3NwZWVkX3VwKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtMjYyNyw2ICsyNjU4LDcgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9pbml0X3JpbmdfaW5kZXhlcyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBzdGF0aWMgdm9pZCBydGxfanVtYm9fY29uZmlnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIHtcbiBcdGJvb2wganVtYm8gPSB0cC1cdTAwM2VkZXYtXHUwMDNlbXR1IFx1MDAzZSBFVEhfREFUQV9MRU47XG4rXHRzdHJ1Y3QgZXRodG9vbF9wYXVzZXBhcmFtIHBhdXNlO1xuIFx0aW50IHJlYWRycSA9IDQwOTY7XG4gXG4gXHRpZiAoanVtYm8gXHUwMDI2XHUwMDI2IHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl8xNyBcdTAwMjZcdTAwMjZcbkBAIC0yNjU4LDEzICsyNjkwLDQ4IEBAIHN0YXRpYyB2b2lkIHJ0bF9qdW1ib19jb25maWcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRpZiAocGNpX2lzX3BjaWUodHAtXHUwMDNlcGNpX2RldikgXHUwMDI2XHUwMDI2IHRwLVx1MDAzZXN1cHBvcnRzX2dtaWkpXG4gXHRcdHBjaWVfc2V0X3JlYWRycSh0cC1cdTAwM2VwY2lfZGV2LCByZWFkcnEpO1xuIFxuLVx0LyogQ2hpcCBkb2Vzbid0IHN1cHBvcnQgcGF1c2UgaW4ganVtYm8gbW9kZSAqL1xuIFx0aWYgKGp1bWJvKSB7XG4tXHRcdGxpbmttb2RlX2NsZWFyX2JpdChFVEhUT09MX0xJTktfTU9ERV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRsaW5rbW9kZV9jbGVhcl9iaXQoRVRIVE9PTF9MSU5LX01PREVfQXN5bV9QYXVzZV9CSVQsXG4tXHRcdFx0XHQgICB0cC1cdTAwM2VwaHlkZXYtXHUwMDNlYWR2ZXJ0aXNpbmcpO1xuLVx0XHRwaHlfc3RhcnRfYW5lZyh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0XHRpZiAoIXRwLVx1MDAzZWp1bWJvX3BhdXNlX3NhdmVkKSB7XG4rXHRcdFx0c3RydWN0IGV0aHRvb2xfbGlua19rc2V0dGluZ3MgY21kO1xuK1x0XHRcdGJvb2wgYWR2X3BhdXNlLCBhZHZfYXN5bTtcbitcbitcdFx0XHRwaHlsaW5rX2V0aHRvb2xfZ2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuK1xuK1x0XHRcdGlmICh0cC1cdTAwM2VzYXZlZF9wYXVzZS5hdXRvbmVnKSB7XG4rXHRcdFx0XHRwaHlsaW5rX2V0aHRvb2xfa3NldHRpbmdzX2dldCh0cC1cdTAwM2VwaHlsaW5rLCBcdTAwMjZjbWQpO1xuK1x0XHRcdFx0YWR2X3BhdXNlID0gZXRodG9vbF9saW5rX2tzZXR0aW5nc190ZXN0X2xpbmtfbW9kZShcdTAwMjZjbWQsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHQgIGFkdmVydGlzaW5nLFxuK1x0XHRcdFx0XHRcdFx0XHRcdFx0ICBQYXVzZSk7XG4rXHRcdFx0XHRhZHZfYXN5bSAgPSBldGh0b29sX2xpbmtfa3NldHRpbmdzX3Rlc3RfbGlua19tb2RlKFx1MDAyNmNtZCxcbitcdFx0XHRcdFx0XHRcdFx0XHRcdCAgYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0XHRcdFx0XHRcdFx0XHQgIEFzeW1fUGF1c2UpO1xuK1xuK1x0XHRcdFx0aWYgKGFkdl9wYXVzZSBcdTAwMjZcdTAwMjYgIWFkdl9hc3ltKSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAxO1xuK1x0XHRcdFx0fSBlbHNlIGlmIChhZHZfcGF1c2UgXHUwMDI2XHUwMDI2IGFkdl9hc3ltKSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMTtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwO1xuK1x0XHRcdFx0fSBlbHNlIGlmICghYWR2X3BhdXNlIFx1MDAyNlx1MDAyNiBhZHZfYXN5bSkge1xuK1x0XHRcdFx0XHR0cC1cdTAwM2VzYXZlZF9wYXVzZS5yeF9wYXVzZSA9IDA7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnR4X3BhdXNlID0gMTtcbitcdFx0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRcdHRwLVx1MDAzZXNhdmVkX3BhdXNlLnJ4X3BhdXNlID0gMDtcbitcdFx0XHRcdFx0dHAtXHUwMDNlc2F2ZWRfcGF1c2UudHhfcGF1c2UgPSAwO1xuK1x0XHRcdFx0fVxuK1x0XHRcdH1cbitcbitcdFx0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IHRydWU7XG4rXHRcdH1cbitcbitcdFx0cGF1c2UuYXV0b25lZyA9IHRwLVx1MDAzZXNhdmVkX3BhdXNlLmF1dG9uZWc7XG4rXHRcdHBhdXNlLnJ4X3BhdXNlID0gMDtcbitcdFx0cGF1c2UudHhfcGF1c2UgPSAwO1xuK1xuK1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2cGF1c2UpO1xuK1x0fSBlbHNlIGlmICh0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCkge1xuK1x0XHRwaHlsaW5rX2V0aHRvb2xfc2V0X3BhdXNlcGFyYW0odHAtXHUwMDNlcGh5bGluaywgXHUwMDI2dHAtXHUwMDNlc2F2ZWRfcGF1c2UpO1xuK1x0XHR0cC1cdTAwM2VqdW1ib19wYXVzZV9zYXZlZCA9IGZhbHNlO1xuIFx0fVxuIH1cbiBcbkBAIC0yNzgwLDcgKzI4NDcsNyBAQCBzdGF0aWMgdm9pZCBydGxfcHJlcGFyZV9wb3dlcl9kb3duKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0XHRydGxfZXBoeV93cml0ZSh0cCwgMHgxOSwgMHhmZjY0KTtcbiBcbiBcdGlmIChkZXZpY2VfbWF5X3dha2V1cCh0cF90b19kZXYodHApKSkge1xuLVx0XHRwaHlfc3BlZWRfZG93bih0cC1cdTAwM2VwaHlkZXYsIGZhbHNlKTtcbitcdFx0cGh5bGlua19zcGVlZF9kb3duKHRwLVx1MDAzZXBoeWxpbmssIGZhbHNlKTtcbiBcdFx0cnRsX3dvbF9lbmFibGVfcngodHApO1xuIFx0fVxuIH1cbkBAIC0yODMyLDYgKzI4OTksMTYgQEAgc3RhdGljIHZvaWQgcnRsODE2OV9zZXRfbWFnaWNfcmVnKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0UlRMX1czMih0cCwgMHg3YywgdmFsKTtcbiB9XG4gXG4rc3RhdGljIGludCBydGw4MTY5X2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZnJlcSAqaWZyLCBpbnQgY21kKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gbmV0ZGV2X3ByaXYoZGV2KTtcbitcbitcdGlmICghbmV0aWZfcnVubmluZyhkZXYpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdHJldHVybiBwaHlsaW5rX21paV9pb2N0bCh0cC1cdTAwM2VwaHlsaW5rLCBpZnIsIGNtZCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJ0bF9zZXRfcnhfbW9kZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHUzMiByeF9tb2RlID0gQWNjZXB0QnJvYWRjYXN0IHwgQWNjZXB0TXlQaHlzIHwgQWNjZXB0TXVsdGljYXN0O1xuQEAgLTMwOTgsOCArMzE3NSwyMiBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGYyLCAweDkwMDMpO1xuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAwLCBMSU5LX1NQRUVEX0NIQU5HRV9FTik7XG4gXHRcdGJyZWFrO1xuLVx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDAsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBMVFJfU05PT1AsIDB4MDAwMCwgTFRSX1NOT09QX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMDJjLCAweDE4ODApO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwMmUsIDB4NDg4MCk7XG4rXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBBTERQU19MVFIsIDB4MDAwMCwgQUxEUFNfTFRSX0VOKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQ4LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZGEsIDB4OTAwMyk7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkYywgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjZGQyLCAweDg4M2MpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGNkZDQsIDB4OGMxMik7XG4rXHRcdHI4MTY4X21hY19vY3Bfd3JpdGUodHAsIDB4Y2RkNiwgMHg5MDAzKTtcbitcdFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhlMGE2LCAweDkwMDMpO1xuK1x0XHRyODE2OF9tYWNfb2NwX3dyaXRlKHRwLCAweGUwYTgsIDB4OTAwMyk7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuIFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgQUxEUFNfTFRSLCAweDAwMDAsIEFMRFBTX0xUUl9FTik7XG4gXHRcdFJUTF9XOCh0cCwgQ09NQk9fTFRSX0VYVEVORCwgUlRMX1I4KHRwLCBDT01CT19MVFJfRVhURU5EKSB8IENPTUJPX0xUUl9FWFRFTkRfRU4pO1xuIFx0XHRmYWxsdGhyb3VnaDtcbkBAIC0zMTE5LDYgKzMyMTAsNyBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX2x0cihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdH1cbiBcdC8qIGNoaXAgY2FuIHRyaWdnZXIgTFRSICovXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgTFRSX09CRkZfTE9DSywgMHgwMDAzLCBMVFJfT0JGRl9MT0NLX0VOKTtcbitcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCBTRU5EX0xUUl9NU0csIDB4MDAwMCwgTFRSX01TR19FTik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuQEAgLTMxNTIsNiArMzI0NCw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19hc3BtX2Nsa3JlcV9lbmFibGUoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIFx0XHRydGxfZW5hYmxlX2x0cih0cCk7XG4gXHRcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzQ2IC4uLiBSVExfR0lHQV9NQUNfVkVSXzQ4OlxuK1x0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNTI6XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl82MSAuLi4gUlRMX0dJR0FfTUFDX1ZFUl9MQVNUOlxuIFx0XHRcdC8qIHJlc2V0IGVwaHkgdHgvcnggZGlzYWJsZSB0aW1lciAqL1xuIFx0XHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGUwOTQsIDB4ZmYwMCwgMCk7XG5AQCAtMzE2NCw2ICszMjU3LDcgQEAgc3RhdGljIHZvaWQgcnRsX2h3X2FzcG1fY2xrcmVxX2VuYWJsZShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9IGVsc2Uge1xuIFx0XHRzd2l0Y2ggKHRwLVx1MDAzZW1hY192ZXJzaW9uKSB7XG4gXHRcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl80NiAuLi4gUlRMX0dJR0FfTUFDX1ZFUl80ODpcbitcdFx0Y2FzZSBSVExfR0lHQV9NQUNfVkVSXzUyOlxuIFx0XHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfNjEgLi4uIFJUTF9HSUdBX01BQ19WRVJfTEFTVDpcbiBcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlMDkyLCAweDAwZmYsIDApO1xuIFx0XHRcdGJyZWFrO1xuQEAgLTM2NTcsNiArMzc1MSwzNSBAQCBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODE2OGVwXzMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhlODYwLCAweDAwMDAsIDB4MDA4MCk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbit7XG4rXHR1bnNpZ25lZCBpbnQgc2xvdCA9IFBDSV9TTE9UKHBkZXYtXHUwMDNlZGV2Zm4pO1xuK1x0c3RydWN0IHBjaV9idXMgKmJ1cyA9IHBkZXYtXHUwMDNlYnVzO1xuK1x0dW5zaWduZWQgaW50IGRldmZuO1xuK1x0aW50IGZ1bmM7XG4rXHRpbnQgcmV0O1xuK1x0dTMyIHZhbDtcbitcbitcdGZvciAoZnVuYyA9IDI7IGZ1bmMgXHUwMDNjIDg7IGZ1bmMrKykge1xuK1x0XHRkZXZmbiA9IFBDSV9ERVZGTihzbG90LCBmdW5jKTtcbitcbitcdFx0cmV0ID0gcGNpX2J1c19yZWFkX2NvbmZpZ19kd29yZChidXMsIGRldmZuLCBSVEw4MTE2QUZfRlVOQ19QTV9DU1IsIFx1MDAyNnZhbCk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSB+UENJX1BNX0NUUkxfUE1FX1NUQVRVUztcbitcdFx0XHR2YWwgXHUwMDI2PSB+KFBDSV9QTV9DVFJMX1NUQVRFX01BU0sgfCBQQ0lfUE1fQ1RSTF9QTUVfRU5BQkxFKTtcbitcdFx0XHR2YWwgfD0gKFJUTF9QTV9EM0hPVCB8IFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUpO1xuK1x0XHRcdHBjaV9idXNfd3JpdGVfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX1BNX0NTUiwgdmFsKTtcbitcdFx0fVxuK1xuK1x0XHRyZXQgPSBwY2lfYnVzX3JlYWRfY29uZmlnX2R3b3JkKGJ1cywgZGV2Zm4sIFJUTDgxMTZBRl9GVU5DX0VYUF9MTktDVEwsIFx1MDAyNnZhbCk7XG4rXHRcdGlmICghcmV0IFx1MDAyNlx1MDAyNiAhUENJX1BPU1NJQkxFX0VSUk9SKHZhbCkpIHtcbitcdFx0XHR2YWwgXHUwMDI2PSB+KChQQ0lfRVhQX0xOS1NUQV9MQk1TIHwgUENJX0VYUF9MTktTVEFfTEFCUykgXHUwMDNjXHUwMDNjIDE2KTtcbitcdFx0XHR2YWwgfD0gUENJX0VYUF9MTktDVExfQVNQTUM7XG4rXHRcdFx0cGNpX2J1c193cml0ZV9jb25maWdfZHdvcmQoYnVzLCBkZXZmbiwgUlRMODExNkFGX0ZVTkNfRVhQX0xOS0NUTCwgdmFsKTtcbitcdFx0fVxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBydGxfaHdfc3RhcnRfODExNyhzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdGF0aWMgY29uc3Qgc3RydWN0IGVwaHlfaW5mbyBlX2luZm9fODExN1tdID0ge1xuQEAgLTM2OTMsMTIgKzM4MTYsMTQgQEAgc3RhdGljIHZvaWQgcnRsX2h3X3N0YXJ0XzgxMTcoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXG4gXHRydGxfcGNpZV9zdGF0ZV9sMmwzX2Rpc2FibGUodHApO1xuIFxuLVx0cmdfc2F3X2NudCA9IHBoeV9yZWFkX3BhZ2VkKHRwLVx1MDAzZXBoeWRldiwgMHgwYzQyLCAweDEzKSBcdTAwMjYgMHgzZmZmO1xuLVx0aWYgKHJnX3Nhd19jbnQgXHUwMDNlIDApIHtcbi1cdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuK1x0XHRyZ19zYXdfY250ID0gcGh5X3JlYWRfcGFnZWQodHAtXHUwMDNlcGh5ZGV2LCAweDBjNDIsIDB4MTMpIFx1MDAyNiAweDNmZmY7XG4rXHRcdGlmIChyZ19zYXdfY250IFx1MDAzZSAwKSB7XG4rXHRcdFx0dTE2IHN3X2NudF8xbXNfaW5pO1xuIFxuLVx0XHRzd19jbnRfMW1zX2luaSA9ICgxNjAwMDAwMCAvIHJnX3Nhd19jbnQpIFx1MDAyNiAweDBmZmY7XG4tXHRcdHI4MTY4X21hY19vY3BfbW9kaWZ5KHRwLCAweGQ0MTIsIDB4MGZmZiwgc3dfY250XzFtc19pbmkpO1xuK1x0XHRcdHN3X2NudF8xbXNfaW5pID0gKDE2MDAwMDAwIC8gcmdfc2F3X2NudCkgXHUwMDI2IDB4MGZmZjtcbitcdFx0XHRyODE2OF9tYWNfb2NwX21vZGlmeSh0cCwgMHhkNDEyLCAweDBmZmYsIHN3X2NudF8xbXNfaW5pKTtcbitcdFx0fVxuIFx0fVxuIFxuIFx0cjgxNjhfbWFjX29jcF9tb2RpZnkodHAsIDB4ZTA1NiwgMHgwMGYwLCAweDAwMDApO1xuQEAgLTM3MTEsNiArMzgzNiw3IEBAIHN0YXRpYyB2b2lkIHJ0bF9od19zdGFydF84MTE3KHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDk0LCAweDAwMDApO1xuIFx0cjgxNjhfbWFjX29jcF93cml0ZSh0cCwgMHhjMDllLCAweDAwMDApO1xuIFxuK1x0cnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uKHRwLVx1MDAzZXBjaV9kZXYpO1xuIFx0LyogZmlybXdhcmUgaXMgZm9yIE1BQyBvbmx5ICovXG4gXHRyODE2OV9hcHBseV9maXJtd2FyZSh0cCk7XG4gfVxuQEAgLTQxNDAsMTEgKzQyNjYsMTcgQEAgc3RhdGljIGludCBydGw4MTY5X2NoYW5nZV9tdHUoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IG5ld19tdHUpXG4ge1xuIFx0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuK1x0aWYgKG5ldGlmX3J1bm5pbmcoZGV2KSlcbitcdFx0cGh5bGlua19zdG9wKHRwLVx1MDAzZXBoeWxpbmspO1xuK1xuIFx0V1JJVEVfT05DRShkZXYtXHUwMDNlbXR1LCBuZXdfbXR1KTtcbiBcdG5ldGRldl91cGRhdGVfZmVhdHVyZXMoZGV2KTtcbiBcdHJ0bF9qdW1ib19jb25maWcodHApO1xuIFx0cnRsX3NldF9lZWVfdHhpZGxlX3RpbWVyKHRwKTtcbiBcbitcdGlmIChuZXRpZl9ydW5uaW5nKGRldikpXG4rXHRcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4rXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtNDg2OSw4ICs1MDAxLDEzIEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBydGw4MTY5X2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaW5zdGFuY2UpXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0aWYgKHN0YXR1cyBcdTAwMjYgTGlua0NoZylcbi1cdFx0cGh5X21hY19pbnRlcnJ1cHQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdGlmIChzdGF0dXMgXHUwMDI2IExpbmtDaGcpIHtcbitcdFx0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKVxuK1x0XHRcdGdlbmVyaWNfaGFuZGxlX2RvbWFpbl9pcnEodHAtXHUwMDNlcGh5X2lycV9kb21haW4sIDApO1xuK1x0XHRlbHNlIGlmICh0cC1cdTAwM2VzZnBfbW9kZSlcbitcdFx0XHRwaHlsaW5rX21hY19jaGFuZ2UodHAtXHUwMDNlcGh5bGluayxcbitcdFx0XHRcdFx0ICAgISEoUlRMX1I4KHRwLCBQSFlzdGF0dXMpIFx1MDAyNiBMaW5rU3RhdHVzKSk7XG4rXHR9XG4gXG4gXHRydGxfaXJxX2Rpc2FibGUodHApO1xuIFx0bmFwaV9zY2hlZHVsZShcdTAwMjZ0cC1cdTAwM2VuYXBpKTtcbkBAIC00OTMwLDkgKzUwNjcsNiBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcG9sbChzdHJ1Y3QgbmFwaV9zdHJ1Y3QgKm5hcGksIGludCBidWRnZXQpXG4gXG4gc3RhdGljIHZvaWQgcnRsX2VuYWJsZV90eF9scGkoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAsIGJvb2wgZW5hYmxlKVxuIHtcbi1cdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkpXG4tXHRcdHJldHVybjtcbi1cbiBcdHN3aXRjaCAodHAtXHUwMDNlbWFjX3ZlcnNpb24pIHtcbiBcdGNhc2UgUlRMX0dJR0FfTUFDX1ZFUl8zNCAuLi4gUlRMX0dJR0FfTUFDX1ZFUl81MjpcbiBcdFx0LyogQWRqdXN0IEVFRSBMRUQgZnJlcXVlbmN5ICovXG5AQCAtNDk2Myw0MCArNTA5NywxNSBAQCBzdGF0aWMgdm9pZCBydGxfZW5hYmxlX3R4X2xwaShzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCwgYm9vbCBlbmFibGUpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHI4MTY5X3BoeWxpbmtfaGFuZGxlcihzdHJ1Y3QgbmV0X2RldmljZSAqbmRldilcbi17XG4tXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IG5ldGRldl9wcml2KG5kZXYpO1xuLVx0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4tXG4tXHRpZiAobmV0aWZfY2Fycmllcl9vayhuZGV2KSkge1xuLVx0XHRydGxfbGlua19jaGdfcGF0Y2godHApO1xuLVx0XHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHAtXHUwMDNlcGh5ZGV2LVx1MDAzZWVuYWJsZV90eF9scGkpO1xuLVx0XHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbi1cdH0gZWxzZSB7XG4tXHRcdHBtX3J1bnRpbWVfaWRsZShkKTtcbi1cdH1cbi1cbi1cdHBoeV9wcmludF9zdGF0dXModHAtXHUwMDNlcGh5ZGV2KTtcbi19XG4tXG4gc3RhdGljIGludCByODE2OV9waHlfY29ubmVjdChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4tXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdHAtXHUwMDNlcGh5ZGV2O1xuLVx0cGh5X2ludGVyZmFjZV90IHBoeV9tb2RlO1xuIFx0aW50IHJldDtcbiBcbi1cdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbi1cdFx0ICAgUEhZX0lOVEVSRkFDRV9NT0RFX01JSTtcbi1cbi1cdHJldCA9IHBoeV9jb25uZWN0X2RpcmVjdCh0cC1cdTAwM2VkZXYsIHBoeWRldiwgcjgxNjlfcGh5bGlua19oYW5kbGVyLFxuLVx0XHRcdFx0IHBoeV9tb2RlKTtcbi1cdGlmIChyZXQpXG4rXHRyZXQgPSBwaHlsaW5rX2Nvbm5lY3RfcGh5KHRwLVx1MDAzZXBoeWxpbmssIHRwLVx1MDAzZXBoeWRldik7XG4rXHRpZiAocmV0KSB7XG4rXHRcdG5ldGRldl9lcnIodHAtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBjb25uZWN0IHBoeVxcblwiKTtcbiBcdFx0cmV0dXJuIHJldDtcbi1cbi1cdGlmICghdHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbi1cdFx0cGh5X3NldF9tYXhfc3BlZWQocGh5ZGV2LCBTUEVFRF8xMDApO1xuLVxuLVx0cGh5X2F0dGFjaGVkX2luZm8ocGh5ZGV2KTtcbitcdH1cbiBcbiBcdHJldHVybiAwO1xuIH1cbkBAIC01MDA3LDEwICs1MTE2LDEwIEBAIHN0YXRpYyB2b2lkIHJ0bDgxNjlfZG93bihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdC8qIENsZWFyIGFsbCB0YXNrIGZsYWdzICovXG4gXHRiaXRtYXBfemVybyh0cC1cdTAwM2V3ay5mbGFncywgUlRMX0ZMQUdfTUFYKTtcbiBcbi1cdHBoeV9zdG9wKHRwLVx1MDAzZXBoeWRldik7XG4rXHRwaHlsaW5rX3N0b3AodHAtXHUwMDNlcGh5bGluayk7XG4gXG4gXHQvKiBSZXNldCBTZXJEZXMgUEhZIHRvIGJyaW5nIGRvd24gZmliZXIgbGluayAqL1xuLVx0aWYgKHRwLVx1MDAzZXNmcF9tb2RlKVxuK1x0aWYgKHRwLVx1MDAzZXNmcF9tb2RlID09IFJUTF9TRlBfODEyN19BVEYpXG4gXHRcdHJ0bF9zZnBfcmVzZXQodHApO1xuIFxuIFx0cnRsODE2OV91cGRhdGVfY291bnRlcnModHApO1xuQEAgLTUwMzIsMTQgKzUxNDEsMTQgQEAgc3RhdGljIHZvaWQgcnRsODE2OV91cChzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFxuIFx0cGNpX3NldF9tYXN0ZXIodHAtXHUwMDNlcGNpX2Rldik7XG4tXHRwaHlfaW5pdF9odyh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cGh5X3Jlc3VtZSh0cC1cdTAwM2VwaHlkZXYpO1xuLVx0cnRsODE2OV9pbml0X3BoeSh0cCk7XG4rXHRpZiAodHAtXHUwMDNlcGh5ZGV2KVxuK1x0XHRydGw4MTY5X2luaXRfcGh5KHRwKTtcbitcbiBcdG5hcGlfZW5hYmxlKFx1MDAyNnRwLVx1MDAzZW5hcGkpO1xuIFx0ZW5hYmxlX3dvcmsoXHUwMDI2dHAtXHUwMDNld2sud29yayk7XG4gXHRydGxfcmVzZXRfd29yayh0cCk7XG4gXG4tXHRwaHlfc3RhcnQodHAtXHUwMDNlcGh5ZGV2KTtcbitcdHBoeWxpbmtfc3RhcnQodHAtXHUwMDNlcGh5bGluayk7XG4gfVxuIFxuIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuQEAgLTUwNTUsNyArNTE2NCw3IEBAIHN0YXRpYyBpbnQgcnRsODE2OV9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuIFx0ZnJlZV9pcnEodHAtXHUwMDNlaXJxLCB0cCk7XG4gXG4tXHRwaHlfZGlzY29ubmVjdCh0cC1cdTAwM2VwaHlkZXYpO1xuK1x0cGh5bGlua19kaXNjb25uZWN0X3BoeSh0cC1cdTAwM2VwaHlsaW5rKTtcbiBcbiBcdGRtYV9mcmVlX2NvaGVyZW50KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBSODE2OV9SWF9SSU5HX0JZVEVTLCB0cC1cdTAwM2VSeERlc2NBcnJheSxcbiBcdFx0XHQgIHRwLVx1MDAzZVJ4UGh5QWRkcik7XG5AQCAtNTExMiw5ICs1MjIxLDExIEBAIHN0YXRpYyBpbnQgcnRsX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmIChyZXR2YWwgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX3JlbGVhc2VfZndfMjtcbiBcbi1cdHJldHZhbCA9IHI4MTY5X3BoeV9jb25uZWN0KHRwKTtcbi1cdGlmIChyZXR2YWwpXG4tXHRcdGdvdG8gZXJyX2ZyZWVfaXJxO1xuK1x0aWYgKHRwLVx1MDAzZXBoeWRldikge1xuK1x0XHRyZXR2YWwgPSByODE2OV9waHlfY29ubmVjdCh0cCk7XG4rXHRcdGlmIChyZXR2YWwpXG4rXHRcdFx0Z290byBlcnJfZnJlZV9pcnE7XG4rXHR9XG4gXG4gXHRydGw4MTY5X3VwKHRwKTtcbiBcdHJ0bDgxNjlfaW5pdF9jb3VudGVyX29mZnNldHModHApO1xuQEAgLTUxOTAsOCArNTMwMSwxMSBAQCBzdGF0aWMgaW50IHJ0bDgxNjlfcnVudGltZV9yZXN1bWUoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cnRsX3Jhcl9zZXQodHAsIHRwLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkcik7XG4gXHRfX3J0bDgxNjlfc2V0X3dvbCh0cCwgdHAtXHUwMDNlc2F2ZWRfd29sb3B0cyk7XG4gXG4tXHRpZiAodHAtXHUwMDNlVHhEZXNjQXJyYXkpXG4rXHRpZiAodHAtXHUwMDNlVHhEZXNjQXJyYXkpIHtcbitcdFx0cnRubF9sb2NrKCk7XG4gXHRcdHJ0bDgxNjlfdXAodHApO1xuK1x0XHRydG5sX3VubG9jaygpO1xuK1x0fVxuIFxuIFx0bmV0aWZfZGV2aWNlX2F0dGFjaCh0cC1cdTAwM2VkZXYpO1xuIFxuQEAgLTUyODgsNiArNTQwMiw4IEBAIHN0YXRpYyB2b2lkIHJ0bF9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIFx0XHRyODE2OV9yZW1vdmVfbGVkcyh0cC1cdTAwM2VsZWRzKTtcbiBcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2KHRwLVx1MDAzZWRldik7XG4rXHRpZiAodHAtXHUwMDNlcGh5bGluaylcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFxuIFx0aWYgKHRwLVx1MDAzZWRhc2hfdHlwZSAhPSBSVExfREFTSF9OT05FKVxuIFx0XHRydGw4MTY4X2RyaXZlcl9zdG9wKHRwKTtcbkBAIC01MzEwLDcgKzU0MjYsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIHJ0bF9uZXRkZXZfb3BzID0ge1xuIFx0Lm5kb19maXhfZmVhdHVyZXNcdD0gcnRsODE2OV9maXhfZmVhdHVyZXMsXG4gXHQubmRvX3NldF9mZWF0dXJlc1x0PSBydGw4MTY5X3NldF9mZWF0dXJlcyxcbiBcdC5uZG9fc2V0X21hY19hZGRyZXNzXHQ9IHJ0bF9zZXRfbWFjX2FkZHJlc3MsXG4tXHQubmRvX2V0aF9pb2N0bFx0XHQ9IHBoeV9kb19pb2N0bF9ydW5uaW5nLFxuK1x0Lm5kb19ldGhfaW9jdGxcdFx0PSBydGw4MTY5X2lvY3RsLFxuIFx0Lm5kb19zZXRfcnhfbW9kZVx0PSBydGxfc2V0X3J4X21vZGUsXG4gI2lmZGVmIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSXG4gXHQubmRvX3BvbGxfY29udHJvbGxlclx0PSBydGw4MTY5X25ldHBvbGwsXG5AQCAtNTQyMywxMSArNTUzOSwzOSBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fd3JpdGVfcmVnX2M0NShzdHJ1Y3QgbWlpX2J1cyAqbWlpX2J1cywgaW50IGFkZHIsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIGludCBydGxfcGh5X2lycV9tYXAoc3RydWN0IGlycV9kb21haW4gKmQsIHVuc2lnbmVkIGludCBpcnEsXG4rXHRcdFx0ICAgaXJxX2h3X251bWJlcl90IGh3aXJxKVxuK3tcbitcdGlycV9zZXRfY2hpcF9hbmRfaGFuZGxlcihpcnEsIFx1MDAyNmR1bW15X2lycV9jaGlwLCBoYW5kbGVfc2ltcGxlX2lycSk7XG4rXHRpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGQtXHUwMDNlaG9zdF9kYXRhKTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21haW5fb3BzIHJ0bF9waHlfaXJxX2RvbWFpbl9vcHMgPSB7XG4rXHQubWFwID0gcnRsX3BoeV9pcnFfbWFwLFxuK307XG4rXG4rc3RhdGljIHZvaWQgcnRsX3BoeV9pcnFfY2xlYW51cCh2b2lkICpkYXRhKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gZGF0YTtcbitcdGludCB2aXJxO1xuK1xuK1x0aWYgKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluKSB7XG4rXHRcdHZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHRwLVx1MDAzZXBoeV9pcnFfZG9tYWluLCAwKTtcbitcdFx0aWYgKHZpcnEpXG4rXHRcdFx0aXJxX2Rpc3Bvc2VfbWFwcGluZyh2aXJxKTtcbitcbitcdFx0aXJxX2RvbWFpbl9yZW1vdmUodHAtXHUwMDNlcGh5X2lycV9kb21haW4pO1xuK1x0XHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IE5VTEw7XG4rXHR9XG4rfVxuK1xuIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiB7XG4gXHRzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRwLVx1MDAzZXBjaV9kZXY7XG4gXHRzdHJ1Y3QgbWlpX2J1cyAqbmV3X2J1cztcbi1cdGludCByZXQ7XG4rXHRpbnQgcmV0LCB2aXJxO1xuIFxuIFx0LyogT24gc29tZSBib2FyZHMgd2l0aCB0aGlzIGNoaXAgdmVyc2lvbiB0aGUgQklPUyBpcyBidWdneSBhbmQgbWlzc2VzXG4gXHQgKiB0byByZXNldCB0aGUgUEhZIHBhZ2Ugc2VsZWN0b3IuIFRoaXMgcmVzdWx0cyBpbiB0aGUgUEhZIElEIHJlYWRcbkBAIC01NDQ1LDcgKzU1ODksNiBAQCBzdGF0aWMgaW50IHI4MTY5X21kaW9fcmVnaXN0ZXIoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4gXHRuZXdfYnVzLVx1MDAzZW5hbWUgPSBcInI4MTY5XCI7XG4gXHRuZXdfYnVzLVx1MDAzZXByaXYgPSB0cDtcbiBcdG5ld19idXMtXHUwMDNlcGFyZW50ID0gXHUwMDI2cGRldi1cdTAwM2VkZXY7XG4tXHRuZXdfYnVzLVx1MDAzZWlycVswXSA9IFBIWV9NQUNfSU5URVJSVVBUO1xuIFx0bmV3X2J1cy1cdTAwM2VwaHlfbWFzayA9IEdFTk1BU0soMzEsIDEpO1xuIFx0c25wcmludGYobmV3X2J1cy1cdTAwM2VpZCwgTUlJX0JVU19JRF9TSVpFLCBcInI4MTY5LSV4LSV4XCIsXG4gXHRcdCBwY2lfZG9tYWluX25yKHBkZXYtXHUwMDNlYnVzKSwgcGNpX2Rldl9pZChwZGV2KSk7XG5AQCAtNTQ1OCw2ICs1NjAxLDIxIEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0bmV3X2J1cy1cdTAwM2V3cml0ZV9jNDUgPSByODE2OV9tZGlvX3dyaXRlX3JlZ19jNDU7XG4gXHR9XG4gXG4rXHR0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCAxLFxuK1x0XHRcdFx0XHRcdCAgIFx1MDAyNnJ0bF9waHlfaXJxX2RvbWFpbl9vcHMsIHRwKTtcbitcdGlmICghdHAtXHUwMDNlcGh5X2lycV9kb21haW4pXG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1xuK1x0cmV0ID0gZGV2bV9hZGRfYWN0aW9uX29yX3Jlc2V0KFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBydGxfcGh5X2lycV9jbGVhbnVwLCB0cCk7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0dmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyh0cC1cdTAwM2VwaHlfaXJxX2RvbWFpbiwgMCk7XG4rXHRpZiAoIXZpcnEpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0bmV3X2J1cy1cdTAwM2VpcnFbMF0gPSB2aXJxO1xuK1xuIFx0cmV0ID0gZGV2bV9tZGlvYnVzX3JlZ2lzdGVyKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBuZXdfYnVzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG5AQCAtNTQ3NCwxNiArNTYzMiw2IEBAIHN0YXRpYyBpbnQgcjgxNjlfbWRpb19yZWdpc3RlcihzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cClcbiBcdFx0cmV0dXJuIC1FVU5BVENIO1xuIFx0fVxuIFxuLVx0dHAtXHUwMDNlcGh5ZGV2LVx1MDAzZW1hY19tYW5hZ2VkX3BtID0gdHJ1ZTtcbi1cdGlmIChydGxfc3VwcG9ydHNfZWVlKHRwKSlcbi1cdFx0cGh5X3N1cHBvcnRfZWVlKHRwLVx1MDAzZXBoeWRldik7XG4tXHRwaHlfc3VwcG9ydF9hc3ltX3BhdXNlKHRwLVx1MDAzZXBoeWRldik7XG4tXG4tXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVycyAqL1xuLVx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNjEpXG4tXHRcdHBoeV9kaXNhYmxlX2VlZV9tb2RlKHRwLVx1MDAzZXBoeWRldixcbi1cdFx0XHRcdCAgICAgRVRIVE9PTF9MSU5LX01PREVfMjUwMGJhc2VUX0Z1bGxfQklUKTtcbi1cbiBcdC8qIFBIWSB3aWxsIGJlIHdva2VuIHVwIGluIHJ0bF9vcGVuKCkgKi9cbiBcdHBoeV9zdXNwZW5kKHRwLVx1MDAzZXBoeWRldik7XG4gXG5AQCAtNTU5OSw2ICs1NzQ3LDIyNyBAQCBzdGF0aWMgYm9vbCBydGxfYXNwbV9pc19zYWZlKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBydGxfbWFjX2xpbmtfZG93bihzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZywgdW5zaWduZWQgaW50IG1vZGUsXG4rXHRcdFx0ICAgICAgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHRwLVx1MDAzZXNwZWVkID0gU1BFRURfVU5LTk9XTjtcbitcdHBtX3J1bnRpbWVfaWRsZSh0cF90b19kZXYodHApKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19saW5rX3VwKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuK1x0XHRcdCAgICB1bnNpZ25lZCBpbnQgbW9kZSwgcGh5X2ludGVyZmFjZV90IGludGVyZmFjZSxcbitcdFx0XHQgICAgaW50IHNwZWVkLCBpbnQgZHVwbGV4LCBib29sIHR4X3BhdXNlLCBib29sIHJ4X3BhdXNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1x0c3RydWN0IGRldmljZSAqZCA9IHRwX3RvX2Rldih0cCk7XG4rXG4rXHR0cC1cdTAwM2VzcGVlZCA9IHNwZWVkO1xuK1x0cnRsX2xpbmtfY2hnX3BhdGNoKHRwLCBzcGVlZCk7XG4rXG4rXHRwbV9yZXF1ZXN0X3Jlc3VtZShkKTtcbit9XG4rXG4rc3RhdGljIHN0cnVjdCBwaHlsaW5rX3BjcyAqcnRsX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuK1x0XHRcdFx0XHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKGNvbmZpZywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGh5bGlua19jb25maWcpO1xuK1xuK1x0aWYgKGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYIHx8XG4rXHQgICAgaW50ZXJmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9TR01JSSB8fFxuK1x0ICAgIGludGVyZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVIpXG4rXHRcdHJldHVybiBcdTAwMjZ0cC1cdTAwM2VwY3M7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19jb25maWcoc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbit9XG4rXG4rc3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcbit7XG4rXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0dTE2IHZhbCA9IDA7XG4rXG4rXHRyYXdfc3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2dHAtXHUwMDNlbWFjX29jcF9sb2NrLCBmbGFncyk7XG4rXHRfX3I4MTY4X21hY19vY3Bfd3JpdGUodHAsIE9DUF9TRFNfQUREUl9SRUcsIHNkc19yZWcpO1xuK1x0X19yODE2OF9tYWNfb2NwX3dyaXRlKHRwLCBPQ1BfU0RTX0NNRF9SRUcsIFNEU19DTURfUkVBRCk7XG4rXHR2YWwgPSBfX3I4MTY4X21hY19vY3BfcmVhZCh0cCwgT0NQX1NEU19EQVRBX1JFRyk7XG4rXHRyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZ0cC1cdTAwM2VtYWNfb2NwX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiB2YWw7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2dldF9zdGF0ZShzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcyxcbitcdFx0XHRcdCAgdW5zaWduZWQgaW50IG5lZ19tb2RlLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgcGh5bGlua19saW5rX3N0YXRlICpzdGF0ZSlcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihwY3MsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBjcyk7XG4rXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURikge1xuK1x0XHR1MTYgc3RhdDE7XG4rXG4rXHRcdHN0YXQxID0gcnRsODE2OV9zZHNfcmVhZCh0cCwgUlRMX1NEU19DNDVfQkFTRSArIE1ESU9fU1RBVDEpO1xuK1xuK1x0XHRpZiAoIShzdGF0MSBcdTAwMjYgTURJT19TVEFUMV9MU1RBVFVTKSlcbitcdFx0XHRzdGF0MSA9IHJ0bDgxNjlfc2RzX3JlYWQodHAsIFJUTF9TRFNfQzQ1X0JBU0UgKyBNRElPX1NUQVQxKTtcbitcbitcdFx0c3RhdGUtXHUwMDNlbGluayA9ICEhKHN0YXQxIFx1MDAyNiBNRElPX1NUQVQxX0xTVEFUVVMpO1xuK1x0XHRpZiAoIXN0YXRlLVx1MDAzZWxpbmspXG4rXHRcdFx0cmV0dXJuO1xuK1xuK1x0XHRzdGF0ZS1cdTAwM2VkdXBsZXggPSBEVVBMRVhfRlVMTDtcbitcdFx0c3RhdGUtXHUwMDNlc3BlZWQgPSBTUEVFRF8xMDAwMDtcbitcdH0gZWxzZSB7XG4rXHRcdHUxNiBibXNyLCBscGE7XG4rXG4rXHRcdGJtc3IgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0JNU1IpO1xuK1x0XHRscGEgPSBydGw4MTY5X3Nkc19yZWFkKHRwLCBSVExfU0RTX0MyMl9CQVNFICsgTUlJX0xQQSk7XG4rXHRcdHBoeWxpbmtfbWlpX2MyMl9wY3NfZGVjb2RlX3N0YXRlKHN0YXRlLCBuZWdfbW9kZSwgYm1zciwgbHBhKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIGludCBydGw4MTY5X3Bjc19jb25maWcoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGludCBtb2RlLFxuK1x0XHRcdCAgICAgIHBoeV9pbnRlcmZhY2VfdCBpbnRlcmZhY2UsXG4rXHRcdFx0ICAgICAgY29uc3QgdW5zaWduZWQgbG9uZyAqYWR2ZXJ0aXNpbmcsXG4rXHRcdFx0ICAgICAgYm9vbCBwZXJtaXRfcGF1c2VfdG9fbWFjKVxuK3tcbitcdHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwID0gY29udGFpbmVyX29mKHBjcywgc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSwgcGNzKTtcbitcbitcdGlmICh0cC1cdTAwM2VzZnBfbW9kZSA9PSBSVExfU0ZQXzgxMjdfQVRGKVxuK1x0XHRyODEyN19zZnBfaW5pdF8xMGcodHApO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcbitcdFx0XHRcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0KHN0cnVjdCBwaHlsaW5rX3BjcyAqcGNzKVxuK3tcbit9XG4rXG4rc3RhdGljIHZvaWQgcnRsX21hY19kaXNhYmxlX3R4X2xwaShzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZylcbit7XG4rXHRzdHJ1Y3QgcnRsODE2OV9wcml2YXRlICp0cCA9IGNvbnRhaW5lcl9vZihjb25maWcsIHN0cnVjdCBydGw4MTY5X3ByaXZhdGUsIHBoeWxpbmtfY29uZmlnKTtcbitcbitcdHJ0bF9lbmFibGVfdHhfbHBpKHRwLCBmYWxzZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgcnRsX21hY19lbmFibGVfdHhfbHBpKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLCB1MzIgdGltZXIsIGJvb2wgdHhfY2xrX3N0b3ApXG4re1xuK1x0c3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHAgPSBjb250YWluZXJfb2YoY29uZmlnLCBzdHJ1Y3QgcnRsODE2OV9wcml2YXRlLCBwaHlsaW5rX2NvbmZpZyk7XG4rXG4rXHRpZiAoIXJ0bF9zdXBwb3J0c19lZWUodHApKVxuK1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4rXG4rXHRydGxfZW5hYmxlX3R4X2xwaSh0cCwgdHJ1ZSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX21hY19vcHMgcnRsX3BoeWxpbmtfbWFjX29wcyA9IHtcbitcdC5tYWNfc2VsZWN0X3BjcyA9IHJ0bF9tYWNfc2VsZWN0X3BjcyxcbitcdC5tYWNfY29uZmlnID0gcnRsX21hY19jb25maWcsXG4rXHQubWFjX2xpbmtfZG93biAgPSBydGxfbWFjX2xpbmtfZG93bixcbitcdC5tYWNfbGlua191cCAgICA9IHJ0bF9tYWNfbGlua191cCxcbitcdC5tYWNfZGlzYWJsZV90eF9scGkgPSBydGxfbWFjX2Rpc2FibGVfdHhfbHBpLFxuK1x0Lm1hY19lbmFibGVfdHhfbHBpID0gcnRsX21hY19lbmFibGVfdHhfbHBpLFxuK307XG4rXG4rc3RhdGljIHVuc2lnbmVkIGxvbmcgcnRsODE2OV9nZXRfbHBpX2NhcHMoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXG4re1xuK1x0dW5zaWduZWQgbG9uZyBjYXBzID0gMDtcbitcbitcdGlmICghcnRsX3N1cHBvcnRzX2VlZSh0cCkgfHwgdHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF84MTI3X0FURilcbitcdFx0cmV0dXJuIDA7XG4rXG4rXHRjYXBzIHw9IE1BQ18xMDBGRCB8IE1BQ18xMDAwRkQ7XG4rXG4rXHQvKiBtaW1pYyBiZWhhdmlvciBvZiByODEyNS9yODEyNiB2ZW5kb3IgZHJpdmVyc1xuK1x0ICogUlRMX0dJR0FfTUFDX1ZFUl82MSBkb2Vzbid0IHN1cHBvcnQgMi41RyBlZWVcbitcdCAqL1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl82MylcbitcdFx0Y2FwcyB8PSBNQUNfMjUwMEZEO1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzZT0gUlRMX0dJR0FfTUFDX1ZFUl83MClcbitcdFx0Y2FwcyB8PSBNQUNfNTAwMEZEO1xuK1x0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfODApXG4rXHRcdGNhcHMgfD0gTUFDXzEwMDAwRkQ7XG4rXG4rXHRyZXR1cm4gY2Fwcztcbit9XG4rXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBwaHlsaW5rX3Bjc19vcHMgcjgxNjlfcGNzX29wcyA9IHtcbitcdC5wY3NfdmFsaWRhdGUgPSBydGw4MTY5X3Bjc192YWxpZGF0ZSxcbitcdC5wY3NfZ2V0X3N0YXRlID0gcnRsODE2OV9wY3NfZ2V0X3N0YXRlLFxuK1x0LnBjc19jb25maWcgPSBydGw4MTY5X3Bjc19jb25maWcsXG4rXHQucGNzX2FuX3Jlc3RhcnQgPSBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0LFxuK307XG4rXG4rc3RhdGljIGludCBydGxfaW5pdF9waHlsaW5rKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwKVxuK3tcbitcdHN0cnVjdCBwaHlsaW5rICpwbDtcbitcdHBoeV9pbnRlcmZhY2VfdCBwaHlfbW9kZTtcbitcbitcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRldiA9IFx1MDAyNnRwLVx1MDAzZWRldi1cdTAwM2VkZXY7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy50eXBlID0gUEhZTElOS19ORVRERVY7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfbWFuYWdlZF9wbSA9IHRydWU7XG4rXHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5scGlfY2FwYWJpbGl0aWVzID0gcnRsODE2OV9nZXRfbHBpX2NhcHModHApO1xuK1x0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfQVNZTV9QQVVTRSB8IE1BQ19TWU1fUEFVU0U7XG4rXG4rXHRzd2l0Y2ggKHRwLVx1MDAzZXNmcF9tb2RlKSB7XG4rXHRjYXNlIFJUTF9TRlBfODE2OF9BRjpcbitcdFx0dHAtXHUwMDNlcGNzLm9wcyA9IFx1MDAyNnI4MTY5X3Bjc19vcHM7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTAwMEJBU0VYO1xuK1x0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQ7XG4rXHRcdGJyZWFrO1xuK1x0Y2FzZSBSVExfU0ZQXzgxMjdfQVRGOlxuK1x0XHR0cC1cdTAwM2VwY3Mub3BzID0gXHUwMDI2cjgxNjlfcGNzX29wcztcbitcdFx0cGh5X21vZGUgPSBQSFlfSU5URVJGQUNFX01PREVfMTBHQkFTRVI7XG4rXHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLmRlZmF1bHRfYW5faW5iYW5kID0gdHJ1ZTtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMDBGRDtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAgfCBNQUNfMTAwO1xuK1xuK1x0XHRpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gPT0gUlRMX0dJR0FfTUFDX1ZFUl84MClcbitcdFx0XHR0cC1cdTAwM2VwaHlsaW5rX2NvbmZpZy5tYWNfY2FwYWJpbGl0aWVzIHw9IE1BQ18xMDAwRkQgfCBNQUNfMjUwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfNTAwMEZEIHwgTUFDXzEwMDAwRkQ7XG4rXHRcdGVsc2UgaWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uID09IFJUTF9HSUdBX01BQ19WRVJfNzApXG4rXHRcdFx0dHAtXHUwMDNlcGh5bGlua19jb25maWcubWFjX2NhcGFiaWxpdGllcyB8PSBNQUNfMTAwMEZEIHxcbitcdFx0XHRcdFx0XHRcdCAgICAgICBNQUNfMjUwMEZEIHwgTUFDXzUwMDBGRDtcbitcdFx0ZWxzZSBpZiAodHAtXHUwMDNlbWFjX3ZlcnNpb24gXHUwMDNlPSBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRCB8IE1BQ18yNTAwRkQ7XG4rXHRcdGVsc2VcbitcdFx0XHRpZiAodHAtXHUwMDNlc3VwcG9ydHNfZ21paSlcbitcdFx0XHRcdHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLm1hY19jYXBhYmlsaXRpZXMgfD0gTUFDXzEwMDBGRDtcbitcbitcdFx0aWYgKHRwLVx1MDAzZW1hY192ZXJzaW9uIFx1MDAzYyBSVExfR0lHQV9NQUNfVkVSXzYxKVxuK1x0XHRcdHBoeV9tb2RlID0gdHAtXHUwMDNlc3VwcG9ydHNfZ21paSA/IFBIWV9JTlRFUkZBQ0VfTU9ERV9HTUlJIDpcbitcdFx0XHRcdCAgIFBIWV9JTlRFUkZBQ0VfTU9ERV9NSUk7XG4rXHRcdGVsc2VcbitcdFx0XHRwaHlfbW9kZSA9IFBIWV9JTlRFUkZBQ0VfTU9ERV9JTlRFUk5BTDtcbitcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRfX3NldF9iaXQocGh5X21vZGUsIHRwLVx1MDAzZXBoeWxpbmtfY29uZmlnLnN1cHBvcnRlZF9pbnRlcmZhY2VzKTtcbitcdHBsID0gcGh5bGlua19jcmVhdGUoXHUwMDI2dHAtXHUwMDNlcGh5bGlua19jb25maWcsIHRwX3RvX2Rldih0cCktXHUwMDNlZndub2RlLFxuK1x0XHRcdCAgICBwaHlfbW9kZSwgXHUwMDI2cnRsX3BoeWxpbmtfbWFjX29wcyk7XG4rXHRpZiAoSVNfRVJSKHBsKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIocGwpO1xuK1xuK1x0dHAtXHUwMDNlcGh5bGluayA9IHBsO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvICpjaGlwO1xuQEAgLTU2NjcsNiArNjAzNiw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0XHRcdFx0ICAgICBleHRfeGlkX3N0ciwgeGlkKTtcbiBcdHRwLVx1MDAzZW1hY192ZXJzaW9uID0gY2hpcC1cdTAwM2VtYWNfdmVyc2lvbjtcbiBcdHRwLVx1MDAzZWZ3X25hbWUgPSBjaGlwLVx1MDAzZWZ3X25hbWU7XG4rXHR0cC1cdTAwM2VzcGVlZCA9IFNQRUVEX1VOS05PV047XG4gXG4gXHQvKiBEaXNhYmxlIEFTUE0gTDEgYXMgdGhhdCBjYXVzZSByYW5kb20gZGV2aWNlIHN0b3Agd29ya2luZ1xuIFx0ICogcHJvYmxlbXMgYXMgd2VsbCBhcyBmdWxsIHN5c3RlbSBoYW5ncyBmb3Igc29tZSBQQ0llIGRldmljZXMgdXNlcnMuXG5AQCAtNTY3OSwxMiArNjA0OSw3IEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFx0fVxuIFx0dHAtXHUwMDNlYXNwbV9tYW5hZ2VhYmxlID0gIXJjO1xuIFxuLVx0aWYgKHJ0bF9pc184MTI1KHRwKSkge1xuLVx0XHR1MTYgZGF0YSA9IHI4MTY4X21hY19vY3BfcmVhZCh0cCwgMHhkMDA2KTtcbi1cbi1cdFx0aWYgKChkYXRhIFx1MDAyNiAweGZmKSA9PSAweDA3KVxuLVx0XHRcdHRwLVx1MDAzZXNmcF9tb2RlID0gdHJ1ZTtcbi1cdH1cbitcdHRwLVx1MDAzZXNmcF9tb2RlID0gcnRsX2dldF9zZnBfbW9kZSh0cCk7XG4gXG4gXHR0cC1cdTAwM2VkYXNoX3R5cGUgPSBydGxfZ2V0X2Rhc2hfdHlwZSh0cCk7XG4gXHR0cC1cdTAwM2VkYXNoX2VuYWJsZWQgPSBydGxfZGFzaF9pc19lbmFibGVkKHRwKTtcbkBAIC01Nzg4LDEzICs2MTUzLDIzIEBAIHN0YXRpYyBpbnQgcnRsX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIHRwKTtcbiBcbi1cdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRyYyA9IHJ0bF9pbml0X3BoeWxpbmsodHApO1xuIFx0aWYgKHJjKVxuIFx0XHRyZXR1cm4gcmM7XG4gXG4rXHRpZiAodHAtXHUwMDNlc2ZwX21vZGUgPT0gUlRMX1NGUF9OT05FKSB7XG4rXHRcdHJjID0gcjgxNjlfbWRpb19yZWdpc3Rlcih0cCk7XG4rXHRcdGlmIChyYykge1xuK1x0XHRcdHBoeWxpbmtfZGVzdHJveSh0cC1cdTAwM2VwaHlsaW5rKTtcbitcdFx0XHRyZXR1cm4gcmM7XG4rXHRcdH1cbitcdH1cbitcbiBcdHJjID0gcmVnaXN0ZXJfbmV0ZGV2KGRldik7XG4tXHRpZiAocmMpXG4rXHRpZiAocmMpIHtcbitcdFx0cGh5bGlua19kZXN0cm95KHRwLVx1MDAzZXBoeWxpbmspO1xuIFx0XHRyZXR1cm4gcmM7XG4rXHR9XG4gXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfUjgxNjlfTEVEUykpIHtcbiBcdFx0aWYgKHJ0bF9pc184MTI1KHRwKSlcbkBAIC01ODE3LDcgKzYxOTIsNyBAQCBzdGF0aWMgaW50IHJ0bF9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcbiBcdFx0cnRsODE2OF9kcml2ZXJfc3RhcnQodHApO1xuIFx0fVxuIFxuLVx0aWYgKHBjaV9kZXZfcnVuX3dha2UocGRldikpXG4rXHRpZiAocGNpX2Rldl9ydW5fd2FrZShwZGV2KSBcdTAwMjZcdTAwMjYgdHAtXHUwMDNlc2ZwX21vZGUgIT0gUlRMX1NGUF84MTI3X0FURilcbiBcdFx0cG1fcnVudGltZV9wdXRfc3luYyhcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4gXHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjQzLjMyNzE0NDAzWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTM1OTExNzI4OTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqUmVhY2hpbmcgdGhlIGByODE2OWAgUGF0Y2ggaW4gYSBWaXJ0dWFsaXplZCBFbnZpcm9ubWVudCoqXG5cbk9rYXksIHNvIHdlIGhhdmUgdGhpcyBwYXRjaCBmb3IgdGhlIGByODE2OWAgZHJpdmVyLCB3aGljaCBpcyBhIFJlYWx0ZWsgRXRoZXJuZXQgZHJpdmVyLiBJdCdzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLCBzd2l0Y2hpbmcgaXQgdG8gdXNlIHRoZSBgcGh5bGlua2AgQVBJLiBJdCdzIGFkZGluZyBzb21lIG5ldyBmdW5jdGlvbnMgYW5kIHN1cHBvcnRpbmcgZGlmZmVyZW50IFNGUCBtb2RlcywgYmFzaWNhbGx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBvdmVyaGF1bC4gTXkgaW1tZWRpYXRlIGNvbmNlcm4gaXMsIGNhbiB3ZSAqYWN0dWFsbHkqIHRlc3QgdGhpcyByZWxpYWJseT8gU3BlY2lmaWNhbGx5LCBjYW4gd2UgcmVhY2ggaXQgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD9cblxuU2luY2UgaXQncyBhIFBDSSBkcml2ZXIsIHRoYXQgbWVhbnMgaXQncyBoYXJkd2FyZS1kZXBlbmRlbnQsIGF0IGxlYXN0IGluIGEgdHJhZGl0aW9uYWwgc2Vuc2UuIFRoZSBxdWVzdGlvbiBiZWNvbWVzLCBjYW4gd2UgZW11bGF0ZSB0aGlzIG9yIGluamVjdCB0aGlzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgbGlrZSBRRU1VPyBTeXprYWxsZXIgY2FuIGZ1enogUENJIGRldmljZXMsIGJ1dCBpcyBpdCBkZWVwIGVub3VnaCB0byByZWFsbHkgaGl0IHRoZSBjb2RlIHBhdGhzIGluIHRoaXMgZHJpdmVyLCBlc3BlY2lhbGx5IHdpdGhvdXQgYSBzcGVjaWZpYyBlbXVsYXRvcj9cblxuTXkgaW5pdGlhbCB0aG91Z2h0IHdhcywgXCJIZXksIFFFTVUgaGFzIG5ldHdvcmsgZGV2aWNlcywgbWF5YmUgaXQgaGFzIGBydGw4MTY5YCFcIiAgSSBpbW1lZGlhdGVseSBzdGFydGVkIGNoZWNraW5nLiBJIHJlbWVtYmVyZWQgaXQgaGFkIHRoaW5ncyBsaWtlIHRoZSBgcnRsODEzOWAgKDEwLzEwMCkgYW5kIGBlMTAwMGAsIGV0Yy4gVGhlbiwgSSBoYWQgdG8gc3RvcCBhbmQgY2xhcmlmeSwgZG9lcyBRRU1VIHJlYWxseSBoYXZlIGBydGw4MTY5YD8gSSBsb29rZWQgYW5kIGNvdWxkbid0IGZpbmQgYSBkaXJlY3QgYHJ0bDgxNjlgIGluIFFFTVUncyBkZXZpY2UgbGlzdC4gSG93ZXZlciwgSSBrbm93IHN5emthbGxlciBoYXMgc29tZSBiYXNpYyBQQ0kgZnV6emluZyBzdXBwb3J0LiBJdCBzb3VuZHMgbGlrZSBpZiBRRU1VICpkaWQqIGVtdWxhdGUgaXQsIGl0IHdvdWxkIGJlIGVhc3ksIGJ1dCBpZiBub3QsIGlzIHRoaXMgY29kZSBwYXRoIGltcG9zc2libGUgdG8gcmVhY2ggaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudD8gSSBuZWVkIHRvIGtub3cgaWYgd2UgY2FuIGluc3RhbnRpYXRlIGl0LCBvciBpZiBpdCdzIGxpa2UgYSBVU0IgZ2FkZ2V0IG9yIGEgc29mdHdhcmUgZGV2aWNlLlxuXG5JIHN0YXJ0ZWQgdGhpbmtpbmcgYWJvdXQgUENJIElEcyBhbmQgd2hldGhlciB0aGV5IG1hdGNoZWQgYW55dGhpbmcgaW4gUUVNVSdzIGVtdWxhdGlvbi4gRXZlbiBpZiBRRU1VIGRvZXNuJ3QgaGF2ZSBpdCBkaXJlY3RseSwgc3l6a2FsbGVyJ3MgYHZmaW9gIG9yIGdlbmVyaWMgUENJIGZ1enppbmcgKm1pZ2h0KiByZWFjaCBpdCBpZiB3ZSBjYW4gZ2V0IHRoZSBkZXZpY2UgaW5zdGFudGlhdGVkIHNvbWVob3cuIEJ1dCBiYXNlZCBvbiB0aGUgcHJvbXB0J3MgcnVsZXMsIGl0IHNvdW5kcyBsaWtlIGlmIGl0J3MgYSBoYXJkd2FyZS1zcGVjaWZpYyBQQ0kgZHJpdmVyIGFuZCB0aGVyZSdzIG5vIHNvZnR3YXJlIGVtdWxhdG9yIGZvciBpdCwgaXQgbWlnaHQgYmUgdW5yZWFjaGFibGUuXG5cbkkgd2FzIHRoaW5raW5nIEkgY2FuIHByb2JlIGZvciBpdCBpbiBRRU1VLiBUaGVuLCBJIGhhZCB0aGUgaWRlYSB0byB1c2UgYGdyZXBwZXJgIHRvIHNlZSBpZiB0aGVyZSdzIGFueSBQQ0kgSUQgZm9yIGByODE2OWAgdGhhdCBtYXRjaGVzIGEga25vd24gUUVNVSBkZXZpY2UsIG9yIGlmIHRoZXJlJ3MgYSB3YXkgdG8gdHJpZ2dlciBpdC4gVGhlbiBJIHRob3VnaHQgYWJvdXQgYHN5el9rdm1fc2V0dXBfY3B1YCwgZXRjLiB0byBzZWUgaWYgaXQgbWFrZXMgYSBkaWZmZXJlbmNlLCBidXQgSSBuZWVkIHRvIGtub3cgaWYgUUVNVSBjYW4gZW11bGF0ZSB0aGUgZGV2aWNlLlxuXG5MZXQgbWUgc2VhcmNoIHRoZSBrZXJuZWwgZm9yIGByODE2OWAgUENJIElEcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyNjUsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDIzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjc6NTYuOTE4MzIwMzk2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjg4NDg2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJSVEw4MTY5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz04ND1jb25maWcgUjgxNjlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy05NC1cXHQgIHRoZSBmb2xsb3dpbmcgZmFtaWxpZXM6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjk1OlxcdCAgUlRMODE2OSBHaWdhYml0IEV0aGVybmV0XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTk2LVxcdCAgUlRMODE2OCBHaWdhYml0IEV0aGVybmV0XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYz0xMTU9c3RhdGljIGNvbnN0IHN0cnVjdCBydGxfY2hpcF9pbmZvIHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTIyMi1cXHQvKiA4MTEwIGZhbWlseS4gKi9cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzoyMjM6XFx0eyAweGZjOCwgMHg5ODAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wNiwgXFxcIlJUTDgxNjlzYy84MTEwc2NcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6MjI0OlxcdHsgMHhmYzgsIDB4MTgwLFxcdFJUTF9HSUdBX01BQ19WRVJfMDUsIFxcXCJSVEw4MTY5c2MvODExMHNjXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNTpcXHR7IDB4ZmM4LCAweDEwMCxcXHRSVExfR0lHQV9NQUNfVkVSXzA0LCBcXFwiUlRMODE2OXNiLzgxMTBzYlxcXCIgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy0yMjYtXFx0eyAweGZjOCwgMHgwNDAsXFx0UlRMX0dJR0FfTUFDX1ZFUl8wMywgXFxcIlJUTDgxMTBzXFxcIiB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jOjIyNzpcXHR7IDB4ZmM4LCAweDAwOCxcXHRSVExfR0lHQV9NQUNfVkVSXzAyLCBcXFwiUlRMODE2OXNcXFwiIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtMjI4LVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM9NTY5MD1zdGF0aWMgaW50IHJ0bF9qdW1ib19tYXgoc3RydWN0IHJ0bDgxNjlfcHJpdmF0ZSAqdHApXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01Njk2LVxcdHN3aXRjaCAodHAtXFx1MDAzZW1hY192ZXJzaW9uKSB7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTY5NzpcXHQvKiBSVEw4MTY5ICovXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTY5OC1cXHRjYXNlIFJUTF9HSUdBX01BQ19WRVJfMDIgLi4uIFJUTF9HSUdBX01BQ19WRVJfMDY6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI3OjU3LjAzNTIxNTc4NVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEzODUzOTM1MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlYWNoaW5nIHRoZSBgcnRsODE2OWAgRHJpdmVyIHdpdGggU3l6a2FsbGVyKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIGlzLCBjYW4gd2UgYWN0dWFsbHkgcmVhY2ggdGhpcyBgcnRsODE2OWAgZHJpdmVyIHdpdGggdGhlIGV4aXN0aW5nIHN5emthbGxlciBzZXR1cCwgZ2l2ZW4gdGhhdCBpdCdzIGEgbmV0d29yayBkcml2ZXIgYW5kIHRoZSBwcm9tcHQgaXMgdGFsa2luZyBhYm91dCB1bnJlYWNoYWJsZSBjb2RlIHBhdGhzPyBGaXJzdCB0aG91Z2h0IGlzLCBkb2VzIHN5emthbGxlciBoYXZlIHNvbWUga2luZCBvZiB2aXJ0dWFsIGhhcmR3YXJlIGZvciBgcnRsODE2OWA/IEkga25vdyBzeXprYWxsZXIgaGFzIGBzeXpfcGNpX2RldmljZWAsIHdoaWNoIGNhbiBpbmplY3QgUENJIGRldmljZXMgd2l0aCBhcmJpdHJhcnkgSURzLiBCdXQsIGluaXRpYWxseSwgSSB3YXNuJ3Qgc3VyZSBpZiBpdCBmdWxseSBlbXVsYXRlZCB0aGUgTU1JTy9QSU8gc3BhY2Ug4oCTIHNlZW1zIGxpa2UgaXQgY291bGQganVzdCByZXR1cm4gcmFuZG9tIGRhdGEgZm9yIHJlYWRzLlxuXG5XYWl0LCB0aGF0J3Mgd3JvbmcuIFN5emthbGxlciAqZG9lcyogZnV6eiBQQ0kgZHJpdmVycyEgSXQgZW11bGF0ZXMgdGhlIFBDSSBjb25maWcgc3BhY2UgYW5kIE1NSU8vUElPIHJlYWRzIGFuZCBjYW4gdXNlIHNwZWNpZmljIGZ1enppbmcgdGVjaG5pcXVlcyBmb3IgcmVhZHMvd3JpdGVzLiBIbW0sIGJ1dCB3aWxsIHRoaXMgZnV6emluZyBhY3R1YWxseSBkaWcgZGVlcCBlbm91Z2ggaW50byBgcjgxNjlfbWFpbi5jYD8gR29vZCBxdWVzdGlvbi4gSSBrbm93IHRoYXQgYHZmaW9gIG9yIGdlbmVyaWMgYHBjaWAgZnV6emluZyBpbiBzeXprYWxsZXIgc2hvdWxkIGJlIGFibGUgdG8gcHJvYmUgUENJIGRyaXZlcnMuIFNvLCBJIG5lZWQgdG8gY29uc2lkZXIgd2hldGhlciB0aGlzIHNwZWNpZmljIHBhdGNoIGlzIHdvcnRoIHRoZSBmdXp6aW5nIGVmZm9ydC5cblxuUmlnaHQsIHRoZSBwYXRjaCBpcyBhIG1ham9yIHJlZmFjdG9yaW5nIHRvIHVzZSBgcGh5bGlua2AuIElmIHRoZSBQQ0kgZHJpdmVycyBhcmUgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGZ1enppbmcsIHRoZW4geWVzLiBXZSBuZWVkIHRvIGNoZWNrIGlmIGBDT05GSUdfUjgxNjlgIGlzIGV2ZW4gZW5hYmxlZCBpbiB0aGUgc3l6a2FsbGVyIGNvbmZpZ3VyYXRpb24uIFVzdWFsbHksIHN5emthbGxlciBlbmFibGVzIGEgbG90IG9mIG5ldHdvcmsgZHJpdmVycyBmb3IgdGhpcyBleGFjdCB0eXBlIG9mIFBDSSBmdXp6aW5nLiBMZXQncyBtYWtlIHN1cmUgdGhlcmUgYXJlbid0IGFueSB3ZWlyZCBjb25maWcgc2V0dGluZ3MuIFllcCwgYENPTkZJR19SODE2OWAgaXMgdGhlIG1haW4gb25lLlxuXG5Pa2F5LCBiYWNrIHRvIHRoZSBwcm9tcHQuIEl0IHNheXMgXCJpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLCBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXCIgTm93LCBpcyB0aGUgc3l6a2FsbGVyIFBDSSBmdXp6ZXIgY29uc2lkZXJlZCBcInNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlXCI/IEkgdGhpbmsgaXQgaXMsIGJlY2F1c2Ugc3l6a2FsbGVyIGRvZXMgaGF2ZSBgc3l6X2dlbl9wY2lgIGFuZCBgc3l6X3BjaV9kZXZpY2VgIHdoaWNoIGVmZmVjdGl2ZWx5IGVtdWxhdGUgUENJIGRldmljZXMgYW5kIGZ1enogdGhlaXIgZHJpdmVycy5cblxuSWYgdGhpcyBpcyBhIHJlYWwgaGFyZHdhcmUgZHJpdmVyLCBhbmQgdGhlcmUncyBubyBRRU1VIGRldmljZSwgY291bGQgaXQgZXZlbiBiZSByZWFjaGVkPyBTeXprYWxsZXIncyBgc3l6X2dlbl9wY2lgIG9yIGBzeXpfcGNpX2RldmljZWAgY2FuIHRyaWdnZXIgdGhlIGBwcm9iZWAgZnVuY3Rpb24gb2YgYW55IFBDSSBkcml2ZXIgc2ltcGx5IGJ5IHByb3ZpZGluZyB0aGUgbWF0Y2hpbmcgUENJIElELiBUaGVuIHRoZSBkcml2ZXIgd2lsbCBtYXAgdGhlIE1NSU8gcmVnaW9ucywgYW5kIHdoZW4gdGhlIGRyaXZlciBhdHRlbXB0cyB0byByZWFkIGZyb20gdGhlc2UgcmVnaW9ucywgdGhlIGZ1enplciBwcm92aWRlcyB0aGUgcmFuZG9tIGRhdGEuIFRoaXMsIGluIGVzc2VuY2UsIGxldHMgdXMgZnV6eiB0aGUgZHJpdmVyJ3MgaW5pdGlhbGl6YXRpb24gYW5kIGludGVycnVwdCBoYW5kbGluZy4gQnV0IGFnYWluLCBpcyBpdCB0cnVseSBcImltcG9zc2libGUgdG8gcmVhY2hcIj9cblxuTGV0J3Mgc2VlIGlmIGByODE2OWAgaXMgY29tbW9ubHkgZnV6emVkLiBBY3R1YWxseSwgSSByZW1lbWJlciBtYW55IGhhcmR3YXJlIGRyaXZlcnMgYXJlIGNvbnNpZGVyZWQgXCJ1bnJlYWNoYWJsZVwiIGlmIHRoZXkgcmVxdWlyZSAqYWN0dWFsKiBoYXJkd2FyZSBhbmQgdGhlcmUncyBubyBlbXVsYXRvci4gQnV0IHRoaXMgUENJIGZ1enplciAqaXMqIGFuIGVtdWxhdG9yLCBvZiBzb3J0cy4gTm93LCBsb29raW5nIGF0IHRoZSB3b3JkaW5nIG9mIHRoZSBwcm9tcHQgYWdhaW4uLi4gaXQncyBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIGFuZCBldmVuICpzb2Z0d2FyZSotZW11bGF0ZWQgaGFyZHdhcmUuIFN5emthbGxlcidzIFBDSSBmdXp6ZXIgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBQQ0kgZ2FkZ2V0LiBTbywgeWVzLCBpdCBjb3VudHMhXG5cbk9rYXksIEknbGwgYXNzdW1lIHRoYXQgaXQgaXMgcmVhY2hhYmxlLCBhbmQgdGhlIHBhdGNoIGlzIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBgcGh5bGlua2AgaW50ZWdyYXRpb24uIE15IGZvY3VzIHN5bWJvbHMgc2hvdWxkIGluY2x1ZGU6IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9tYWNfbGlua19kb3duYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGxfbWFjX2VuYWJsZV90eF9scGlgLCBgcnRsX3BoeWxpbmtfbWFjX29wc2AsIGFuZCBgcjgxNjlfcGNzX29wc2AuIEkgc2hvdWxkIHRyeSB0byBmaW5kIHRoZSBleGFjdCBmdW5jdGlvbiBuYW1lcyB0aGF0IHdlcmUgYWRkZWQgb3IgbW9kaWZpZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjM0LCJPdXRwdXRUb2tlbnMiOjc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjEwLjg4OTE1Njg3NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzU3NjgyNTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IHBoeWxpbmtfcGNzIFxcXFwqKSBydGxbYS16QS1aMC05X10qX3Bjc19bYS16QS1aMC05X10qXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jPTU3ODk9c3RhdGljIHUxNiBydGw4MTY5X3Nkc19yZWFkKHN0cnVjdCBydGw4MTY5X3ByaXZhdGUgKnRwLCB1MTYgc2RzX3JlZylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4MDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgwMzpzdGF0aWMgdm9pZCBydGw4MTY5X3Bjc19nZXRfc3RhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgwNC1cXHRcXHRcXHRcXHQgIHVuc2lnbmVkIGludCBuZWdfbW9kZSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvcjgxNjlfbWFpbi5jLTU4MzEtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmM6NTgzMjpzdGF0aWMgaW50IHJ0bDgxNjlfcGNzX2NvbmZpZyhzdHJ1Y3QgcGh5bGlua19wY3MgKnBjcywgdW5zaWduZWQgaW50IG1vZGUsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTgzMy1cXHRcXHRcXHQgICAgICBwaHlfaW50ZXJmYWNlX3QgaW50ZXJmYWNlLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg0NC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODQ1OnN0YXRpYyBpbnQgcnRsODE2OV9wY3NfdmFsaWRhdGUoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MsIHVuc2lnbmVkIGxvbmcgKnN1cHBvcnRlZCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYy01ODQ2LVxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBwaHlsaW5rX2xpbmtfc3RhdGUgKnN0YXRlKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1MC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL3I4MTY5X21haW4uYzo1ODUxOnN0YXRpYyB2b2lkIHJ0bDgxNjlfcGNzX2FuX3Jlc3RhcnQoc3RydWN0IHBoeWxpbmtfcGNzICpwY3MpXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9yODE2OV9tYWluLmMtNTg1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjExLjAyNDkzMzMwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY5OTE3Mjg4MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSVEw4MTY5IFBhdGNoIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBmaXJzdCB0aGluZ3MgZmlyc3QsIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGlzIHBhdGNoIGFjdHVhbGx5ICpkb2VzKi4gTGV0J3MgcHVsbCB1cCB0aGUgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBoYXZlIGJlZW4gdG91Y2hlZCBvciBhZGRlZC4gQWxyaWdodCwgaGVyZSdzIHRoZSBsaXN0OiBgcnRsX2luaXRfcGh5bGlua2AsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX2xpbmtfdXBgLCBgcnRsX21hY19zZWxlY3RfcGNzYCwgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYHJ0bDgxNjlfcGNzX2NvbmZpZ2AsIGBydGw4MTY5X3Bjc192YWxpZGF0ZWAsIGBydGw4MTY5X3Bjc19hbl9yZXN0YXJ0YCwgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgLCBgcnRsX21hY19lbmFibGVfdHhfbHBpYCwgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYCwgYHJ0bF9waHlfaXJxX21hcGAsIGBydGxfcGh5X2lycV9jbGVhbnVwYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfaXNfODExNmFmYCwgYHJ0bF9nZXRfc2ZwX21vZGVgLCBgcnRsODE2OV9pb2N0bGAsIGBydGw4MTY5X253YXlfcmVzZXRgLCBgcnRsODE2OV9nZXRfbGlua19rc2V0dGluZ3NgLCBhbmQgYHJ0bDgxNjlfc2V0X2xpbmtfa3NldHRpbmdzYC4gVGhhdCdzIHF1aXRlIGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY2hhbmdlcy4gSW1tZWRpYXRlbHksIHRoZSBpbmNsdXNpb24gb2YgYHBoeWxpbmtgIGZ1bmN0aW9ucyBqdW1wcyBvdXQuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRlcGVuZGVuY2llcyBhbmQgaG93IHRoaXMgaW50ZWdyYXRlcyBpbnRvIHRoZSBleGlzdGluZyBkcml2ZXIgZnJhbWV3b3JrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIGBDT05GSUdfUjgxNjlgIGlzIHN0aWxsIHRoZSBtYWluIGNvbmZpZ3VyYXRpb24gb3B0aW9uIHRvIGVuYWJsZSB0aGlzLiBCdXQgd2FpdC4uLiBkaWRuJ3QgSSBzZWUgc29tZXRoaW5nIGFib3V0IGBQSFlMSU5LYCBiZWluZyBzZWxlY3RlZCBieSBgUjgxNjlgIG5vdz8gUmlnaHQuIExldCdzIGRvdWJsZSBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGZvciB0aGUgUjgxNjkgZHJpdmVyLCB3aGljaCBzaG91bGQgYmUgaW4gYGRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZ2AgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBsb2dpYyBoZXJlLiBUaGlzIHdpbGwgZGV0ZXJtaW5lIGhvdyBicm9hZGx5IHRoaXMgcGF0Y2ggaW1wYWN0cyBvdGhlciBzeXN0ZW1zIG9yIG1vZHVsZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODUzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDA2OjI4OjE4LjAxNjY2NjIxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTQ0MTY3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUjgxNjlcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZz03ND1jb25maWcgODEzOV9PTERfUlhfUkVTRVRcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy04My1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL0tjb25maWc6ODQ6Y29uZmlnIFI4MTY5XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnLTg1LVxcdHRyaXN0YXRlIFxcXCJSZWFsdGVrIDgxNjkvODE2OC84MTAxLzgxMjUgZXRoZXJuZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDItXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9LY29uZmlnOjEwMzpjb25maWcgUjgxNjlfTEVEU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvS2NvbmZpZy0xMDQtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgY29udHJvbGxpbmcgdGhlIE5JQyBMRURzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODoxOC4xMDIxMjMzNzdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNzAwNjY1Nzg2NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiB0aGUgUjgxNjkgRHJpdmVyIGZvciBGdXp6aW5nKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIFdlJ3JlIGxvb2tpbmcgYXQgZnV6emluZyB0aGUgYFI4MTY5YCBkcml2ZXIsIHNvIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGltcG9ydGFudCBiaXRzLiBGaXJzdCwgYFI4MTY5YCBpcyB0aGUgY29yZSBjb25maWd1cmF0aW9uIG9wdGlvbiwgdGhhdCdzIG9idmlvdXMuIE5vdywgSSBuZWVkIHRvIGNoYXJ0IGEgY291cnNlIGZvciBvdXIgZnV6emluZyB0YXJnZXRzLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbWFrZSBzdXJlIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEkgc2VlIHRoYXQgaXQgaXMgY2FsbGVkIGZyb20gYHJ0bF9pbml0X29uZWAsIHdoaWNoIGlzIHRoZSBQQ0kgcHJvYmUgZnVuY3Rpb24uIFRoYXQgdGVsbHMgbWUgdGhhdCwgYXMgbG9uZyBhcyB3ZSBjYW4gcHJvYmUgdGhlIFBDSSBkZXZpY2UsIGBydGxfaW5pdF9waHlsaW5rYCBpcyByZWFjaGFibGUuIEFuZCB5ZXMsIGBydGxfaW5pdF9vbmVgIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIHZpYSBQQ0kgZnV6emluZy5cblxuTm93LCBsZXQncyBhc3NlbWJsZSBhIGxpc3Qgb2YgZm9jdXMgc3ltYm9scy4gSSB0aGluayB0aGUga2V5IGZ1bmN0aW9ucyB0byB0YXJnZXQgd2lsbCBiZTpcblxuKiAgIGBydGxfaW5pdF9waHlsaW5rYFxuKiAgIGBydGxfbWFjX2xpbmtfZG93bmBcbiogICBgcnRsX21hY19saW5rX3VwYFxuKiAgIGBydGxfbWFjX3NlbGVjdF9wY3NgXG4qICAgYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWBcbiogICBgcnRsODE2OV9wY3NfY29uZmlnYFxuKiAgIGBydGxfbWFjX2VuYWJsZV90eF9scGlgXG4qICAgYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgXG4qICAgYHJ0bDgxNjlfZ2V0X2xwaV9jYXBzYFxuKiAgIGBydGxfcGh5X2lycV9tYXBgXG4qICAgYHJ0bF9waHlfaXJxX2NsZWFudXBgXG4qICAgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmBcbiogICBgcnRsX2dldF9zZnBfbW9kZWBcbiogICBgcnRsODE2OV9pb2N0bGBcbiogICBgcnRsODE2OV9ud2F5X3Jlc2V0YFxuKiAgIGBydGw4MTY5X2dldF9saW5rX2tzZXR0aW5nc2BcbiogICBgcnRsODE2OV9zZXRfbGlua19rc2V0dGluZ3NgXG5cbkxldCdzIHJlZmluZSB0aGF0IGxpc3QgYnkgY3V0dGluZyBvdXQgdW5uZWNlc3NhcnkgY3J1ZnQuXG5cbiogICBgcnRsX2luaXRfcGh5bGlua2BcbiogICBgcnRsX21hY19saW5rX2Rvd25gXG4qICAgYHJ0bF9tYWNfbGlua191cGBcbiogICBgcnRsX21hY19zZWxlY3RfcGNzYFxuKiAgIGBydGw4MTY5X3Bjc19nZXRfc3RhdGVgXG4qICAgYHJ0bDgxNjlfcGNzX2NvbmZpZ2BcbiogICBgcnRsX21hY19lbmFibGVfdHhfbHBpYFxuKiAgIGBydGxfbWFjX2Rpc2FibGVfdHhfbHBpYFxuKiAgIGBydGw4MTY5X2dldF9scGlfY2Fwc2BcbiogICBgcnRsX3BoeV9pcnFfbWFwYFxuKiAgIGBydGxfcGh5X2lycV9jbGVhbnVwYFxuKiAgIGBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gXG4qICAgYHJ0bF9nZXRfc2ZwX21vZGVgXG4qICAgYHJ0bDgxNjlfaW9jdGxgXG5cbk5vdywgbGV0J3MgbWFrZSBzdXJlIHdlJ3ZlIGdvdCBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBjb3ZlcmVkLiBgQ09ORklHX1I4MTY5YCBpcyB0aGUgYmlnIG9uZSwgYnV0IGFyZSB0aGVyZSBhbnkgb3RoZXJzIHdlIG5lZWQ/IGBQSFlMSU5LYCBpcyBzZWxlY3RlZCBieSBgUjgxNjlgLCBzbyB0aGF0J3MgdGFrZW4gY2FyZSBvZi4gRG9lcyB0aGlzIHRoaW5nIHJlcXVpcmUgYENPTkZJR19QQ0lgPyBJdCBkb2VzLCBidXQgbHVja2lseSwgdGhhdCdzIGVuYWJsZWQgYnkgZGVmYXVsdC4gT2theSwgYXJlIHRoZXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgSSdtIG1pc3Npbmc/IEkgc2hvdWxkIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZWAgdG8gY29uZmlybS4gVGhhdCBzaG91bGQgYmUgdGhlIGRlZmluaXRpdmUgc291cmNlIG9mIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzg4NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODozNS4xMDg3ODg5MTNaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMTE1Mzc4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyODE2OVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9yZWFsdGVrL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfODEzOVRPTykgKz0gODEzOXRvby5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo4OnI4MTY5LXkgKz0gcjgxNjlfbWFpbi5vIHI4MTY5X2Zpcm13YXJlLm8gcjgxNjlfcGh5X2NvbmZpZy5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZTo5OnI4MTY5LSQoQ09ORklHX1I4MTY5X0xFRFMpICs9IHI4MTY5X2xlZHMub1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L3JlYWx0ZWsvTWFrZWZpbGU6MTA6b2JqLSQoQ09ORklHX1I4MTY5KSArPSByODE2OS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvcmVhbHRlay9NYWtlZmlsZS0xMS1vYmotJChDT05GSUdfUlRBU0UpICs9IHJ0YXNlL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQwNjoyODozNS41Mjk5NTczODJaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjgyNTgxNzIyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IGBSODE2OWAgRHJpdmVyKipcblxuT2theSwgc28gaXQgbG9va3MgbGlrZSBgUjgxNjlgIGlzIHRoZSBvbmx5IGRyaXZlciBpbXBhY3RlZCBieSB0aGlzIHBhdGNoLiBMZXQncyBkaWcgaW4uIEkndmUgZ290IHRvIHJldmlldyB0aGlzIHBhdGNoIGNhcmVmdWxseS4gSXQgc2VlbXMgbGlrZSBpdCdzIGEgbWlncmF0aW9uLCByZXBsYWNpbmcgZGlyZWN0IGBwaHlkZXZgIGNhbGxzIHdpdGggdGhlIGBwaHlsaW5rYCBBUEkgY2FsbHMsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgY2hhbmdlLiBJdCBhZGRzIGEgYnVuY2ggb2YgbmV3IGZ1bmN0aW9ucyByZWxhdGVkIHRvIHBoeWxpbmsgaW50ZWdyYXRpb246IGBydGxfaW5pdF9waHlsaW5rYCwgYHJ0bF9waHlsaW5rX21hY19vcHNgLCBgcjgxNjlfcGNzX29wc2AsIGBydGxfcGh5X2lycV9kb21haW5fb3BzYCwgYHJ0bF9kaXNhYmxlX2hpZGRlbl9mdW5jdGlvbmAsIGBydGxfZ2V0X3NmcF9tb2RlYCwgYHJ0bDgxNjlfc2RzX3JlYWRgLCBhbmQgc2V2ZXJhbCBgcnRsODE2OV9wY3NfKmAgYW5kIGBydGxfbWFjXypgIGZ1bmN0aW9ucywgaW5jbHVkaW5nIExQSSBjb250cm9sLiBJdCBhbHNvIG1vZGlmaWVzIHNvbWUgZXhpc3RpbmcgZnVuY3Rpb25zIGxpa2UgYHJ0bDgxNjlfaW9jdGxgLCBgcnRsODE2OV9ud2F5X3Jlc2V0YCwgYW5kIHRoZSBga3NldHRpbmdzYCBmdW5jdGlvbnMuXG5cbk5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpczogYXJlIHRoZXNlIG5ldyBmdW5jdGlvbnMgcmVhY2hhYmxlPyBMZXQncyB0cmFjZSBpdC4gSXQgc2VlbXMgdGhhdCB0aHJvdWdoIFBDSSBmdXp6aW5nLCBgcnRsX2luaXRfb25lYCBpcyBjYWxsZWQgd2hpY2ggdGhlbiBjYWxscyBgcnRsX2luaXRfcGh5bGlua2AuIEFmdGVyIHRoYXQsIGBwaHlsaW5rX2NyZWF0ZWAgZ2V0cyBjYWxsZWQsIGFuZCBpZiB0aGUgbmV0ZGV2IGlzIHJlZ2lzdGVyZWQsIGBydGxfb3BlbmAgY2FuIGJlIHRyaWdnZXJlZCB2aWEgbmV0bGluay9pb2N0bC4gYHJ0bF9vcGVuYCB0aGVuIGNhbGxzIGByODE2OV9waHlfY29ubmVjdGAsIHdoaWNoIGluIHR1cm4gY2FsbHMgYHBoeWxpbmtfY29ubmVjdF9waHlgIGFuZCBgcGh5bGlua19zdGFydGAuIFRoaXMgd2lsbCBkcml2ZSB0aGUgcGh5bGluayBzdGF0ZSBtYWNoaW5lLCBhbmQgdGhhdCB3aWxsIGNhbGwgYSBsb3Qgb2YgdGhlIG5ldyBmdW5jdGlvbnMgd2UncmUgbG9va2luZyBhdCwgZnVuY3Rpb25zIGxpa2UgYHJ0bF9tYWNfY29uZmlnYCwgYHJ0bF9tYWNfbGlua191cGAsIGBydGxfbWFjX2xpbmtfZG93bmAsIGBydGxfbWFjX3NlbGVjdF9wY3NgLCBgcnRsODE2OV9wY3NfZ2V0X3N0YXRlYCwgYW5kIHNvIG9uLiBBbHNvLCB0aGUgYHJ0bDgxNjlfaW9jdGxgIGlzIHJlYWNoYWJsZSB2aWEgYFNJT0NHTUlJUEhZYCwgd2hpY2ggaXMgZ29vZCB0byBrbm93LiBBbmQgdGhlIGBrc2V0dGluZ3NgIGZ1bmN0aW9ucyBhcmUgcmVhY2hlZCB0aHJvdWdoIGV0aHRvb2wuXG5cbkdpdmVuIHRoZSBwYXRoZmluZGluZywgdGhpcyBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBmb3IgZnV6emluZy5cblxuQWxyaWdodCwgdGltZSB0byBidWlsZCBhIGxpc3Qgb2YgZm9jdXNlZCBzeW1ib2xzLiBMZXQncyBzZWUuLi5cblxuSSd2ZSBpbml0aWFsbHkgaWRlbnRpZmllZCBhIGdvb2QgbGlzdDpcblxuYHJ0bF9pbml0X3BoeWxpbmtgXG5gcnRsX21hY19saW5rX2Rvd25gXG5gcnRsX21hY19saW5rX3VwYFxuYHJ0bF9tYWNfc2VsZWN0X3Bjc2BcbmBydGw4MTY5X3Nkc19yZWFkYFxuYHJ0bDgxNjlfcGNzX2dldF9zdGF0ZWBcbmBydGw4MTY5X3Bjc19jb25maWdgXG5gcnRsX21hY19lbmFibGVfdHhfbHBpYFxuYHJ0bF9tYWNfZGlzYWJsZV90eF9scGlgXG5gcnRsODE2OV9nZXRfbHBpX2NhcHNgXG5gcnRsX3BoeV9pcnFfbWFwYFxuYHJ0bF9waHlfaXJxX2NsZWFudXBgXG5gcnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uYFxuYHJ0bF9nZXRfc2ZwX21vZGVgXG5gcnRsODE2OV9pb2N0bGBcblxuT2theSwgbGV0J3MganVzdCBtYWtlIHN1cmUgd2UgYXJlbid0IHdhc3RpbmcgZnV6emluZyBjeWNsZXMgb24gZGVhZCBjb2RlLiBgcnRsX21hY19jb25maWdgIGlzIGVtcHR5LCBzbyB3ZSBkb24ndCBuZWVkIHRoYXQuIFRoZSBgcnRsODE2OV9wY3NfdmFsaWRhdGVgIGFuZCBgcnRsODE2OV9wY3NfYW5fcmVzdGFydGAgc2VlbSB0byBoYXZlIG5vIGZ1bmN0aW9uYWxpdHksIHNvIHdlIGNhbiBwcm9iYWJseSBvbWl0IHRoZW0gdG9vLiBMZXQncyBrZWVwIGBydGxfaXNfODExNmFmYCBhcyBpdCdzIGEgc21hbGwgaGVscGVyLCBtYXliZSBpdCdsbCBtYWtlIHNvbWUgZnV6emluZy4gVGhlIGBud2F5X3Jlc2V0YCBhbmQgYGtzZXR0aW5nc2AgZnVuY3Rpb25zIGFyZSBqdXN0IHRoaW4gd3JhcHBlcnMsIHNvIHRob3NlIGFyZW4ndCB3b3J0aCB0aGUgZWZmb3J0LlxuXG5TbywgaGVyZSdzIHRoZSAqZmluYWwqIGxpc3Qgb2YgZnVuY3Rpb25zIHRvIGZvY3VzIG9uOlxuXG5gcnRsX2luaXRfcGh5bGlua2BcbmBydGxfbWFjX2xpbmtfZG93bmBcbmBydGxfbWFjX2xpbmtfdXBgXG5gcnRsX21hY19zZWxlY3RfcGNzYFxuYHJ0bDgxNjlfc2RzX3JlYWRgXG5gcnRsODE2OV9wY3NfZ2V0X3N0YXRlYFxuYHJ0bDgxNjlfcGNzX2NvbmZpZ2BcbmBydGxfbWFjX2VuYWJsZV90eF9scGlgXG5gcnRsX21hY19kaXNhYmxlX3R4X2xwaWBcbmBydGw4MTY5X2dldF9scGlfY2Fwc2BcbmBydGxfcGh5X2lycV9tYXBgXG5gcnRsX3BoeV9pcnFfY2xlYW51cGBcbmBydGxfZGlzYWJsZV9oaWRkZW5fZnVuY3Rpb25gXG5gcnRsX2dldF9zZnBfbW9kZWBcbmBydGw4MTY5X2lvY3RsYFxuXG5UaW1lIHRvIHNldCB0aGVzZSByZXN1bHRzIGFuZCBnZXQgdG9cblxuIiwiSW5wdXRUb2tlbnMiOjI1NDQ4LCJPdXRwdXRUb2tlbnMiOjI5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMDY6Mjk6MDMuNzg4MTM1MTE5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyOTk5OTM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9nZXRfbHBpX2NhcHNcIixcbiAgICBcInJ0bF9waHlfaXJxX21hcFwiLFxuICAgIFwicnRsX3BoeV9pcnFfY2xlYW51cFwiLFxuICAgIFwicnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBkaXJlY3QgcGh5ZGV2IGNhbGxzLiBJdCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZ1bmN0aW9ucyBmb3IgcGh5bGluayBNQUMgYW5kIFBDUyBvcGVyYXRpb25zLCBJUlEgZG9tYWluIGhhbmRsaW5nLCBhbmQgU0ZQIG1vZGUgZGV0ZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBmdXp6aW5nIGFuZCBuZXR3b3JrIGludGVyZmFjZSBvcGVyYXRpb25zIChlLmcuLCBldGh0b29sLCBpb2N0bCwgbGluayBzdGF0ZSBjaGFuZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJSODE2OVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJ0bF9pbml0X3BoeWxpbmtcIixcbiAgICBcInJ0bF9tYWNfbGlua19kb3duXCIsXG4gICAgXCJydGxfbWFjX2xpbmtfdXBcIixcbiAgICBcInJ0bF9tYWNfc2VsZWN0X3Bjc1wiLFxuICAgIFwicnRsODE2OV9zZHNfcmVhZFwiLFxuICAgIFwicnRsODE2OV9wY3NfZ2V0X3N0YXRlXCIsXG4gICAgXCJydGw4MTY5X3Bjc19jb25maWdcIixcbiAgICBcInJ0bF9tYWNfZW5hYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsX21hY19kaXNhYmxlX3R4X2xwaVwiLFxuICAgIFwicnRsODE2OV9nZXRfbHBpX2NhcHNcIixcbiAgICBcInJ0bF9waHlfaXJxX21hcFwiLFxuICAgIFwicnRsX3BoeV9pcnFfY2xlYW51cFwiLFxuICAgIFwicnRsX2Rpc2FibGVfaGlkZGVuX2Z1bmN0aW9uXCIsXG4gICAgXCJydGxfZ2V0X3NmcF9tb2RlXCIsXG4gICAgXCJydGw4MTY5X2lvY3RsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWlncmF0ZXMgdGhlIHI4MTY5IG5ldHdvcmsgZHJpdmVyIHRvIHVzZSB0aGUgcGh5bGluayBBUEkgaW5zdGVhZCBvZiBkaXJlY3QgcGh5ZGV2IGNhbGxzLiBJdCBpbnRyb2R1Y2VzIHNldmVyYWwgbmV3IGZ1bmN0aW9ucyBmb3IgcGh5bGluayBNQUMgYW5kIFBDUyBvcGVyYXRpb25zLCBJUlEgZG9tYWluIGhhbmRsaW5nLCBhbmQgU0ZQIG1vZGUgZGV0ZWN0aW9uLiBUaGVzZSBjaGFuZ2VzIGFyZSBmdW5jdGlvbmFsbHkgc2lnbmlmaWNhbnQgYW5kIHJlYWNoYWJsZSB2aWEgUENJIGRldmljZSBmdXp6aW5nIGFuZCBuZXR3b3JrIGludGVyZmFjZSBvcGVyYXRpb25zIChlLmcuLCBldGh0b29sLCBpb2N0bCwgbGluayBzdGF0ZSBjaGFuZ2VzKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[1] Phase: Succeeded StartedAt: 2026-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 06:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 06:29:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2] Phase: Succeeded StartedAt: 2026-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 06:29:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:16 +0000 UTC FinishedAt: 2026-06-29 06:29:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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-workflownq48r/series-workflownq48r-convert-artifact-2807870018/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:37 +0000 UTC FinishedAt: 2026-06-29 06:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:37 +0000 UTC FinishedAt: 2026-06-29 06:58:10 +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:*151c73dd-fd50-4c88-827f-fe4392b3ed46,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-workflownq48r/series-workflownq48r-convert-artifact-2807870018/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": "2b262cf5-17f3-4cfc-967d-c353a6b10e2d", "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-workflownq48r/series-workflownq48r-build-action-2463067392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:29:37 +0000 UTC FinishedAt: 2026-06-29 06:54:27 +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:*151c73dd-fd50-4c88-827f-fe4392b3ed46,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-workflownq48r/series-workflownq48r-convert-artifact-2807870018/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": "2b262cf5-17f3-4cfc-967d-c353a6b10e2d", "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-workflownq48r/series-workflownq48r-build-action-2463067392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:10 +0000 UTC FinishedAt: 2026-06-29 06:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:10 +0000 UTC FinishedAt: 2026-06-29 06:58:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:10 +0000 UTC FinishedAt: 2026-06-29 06:58:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:10 +0000 UTC FinishedAt: 2026-06-29 06:58:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-workflownq48r/series-workflownq48r-convert-artifact-3065059485/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:20 +0000 UTC FinishedAt: 2026-06-29 07:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 06:58:20 +0000 UTC FinishedAt: 2026-06-29 07:00:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b262cf5-17f3-4cfc-967d-c353a6b10e2d,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-workflownq48r/series-workflownq48r-build-action-2463067392/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-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:00:36 +0000 UTC FinishedAt: 2026-06-29 07:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:00:36 +0000 UTC FinishedAt: 2026-06-29 07:00:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:00:36 +0000 UTC FinishedAt: 2026-06-29 07:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:00:36 +0000 UTC FinishedAt: 2026-06-29 07:22:32 +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:*151c73dd-fd50-4c88-827f-fe4392b3ed46,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-workflownq48r/series-workflownq48r-convert-artifact-3065059485/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": "623b9c58-cfff-43fb-ac50-0d262ab975ab", "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-workflownq48r/series-workflownq48r-build-action-32630137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:00:36 +0000 UTC FinishedAt: 2026-06-29 07:22:25 +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:*151c73dd-fd50-4c88-827f-fe4392b3ed46,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-workflownq48r/series-workflownq48r-convert-artifact-3065059485/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": "623b9c58-cfff-43fb-ac50-0d262ab975ab", "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-workflownq48r/series-workflownq48r-build-action-32630137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:22:32 +0000 UTC FinishedAt: 2026-06-29 07:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:22:32 +0000 UTC FinishedAt: 2026-06-29 07:22:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:22:32 +0000 UTC FinishedAt: 2026-06-29 07:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:22:32 +0000 UTC FinishedAt: 2026-06-29 07:24:43 +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:*623b9c58-cfff-43fb-ac50-0d262ab975ab,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-workflownq48r/series-workflownq48r-build-action-32630137/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-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","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:*2b262cf5-17f3-4cfc-967d-c353a6b10e2d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*623b9c58-cfff-43fb-ac50-0d262ab975ab,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-workflownq48r/series-workflownq48r-build-action-2463067392/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-workflownq48r/series-workflownq48r-build-action-32630137/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:25:20 +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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","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-workflownq48r/series-workflownq48r-convert-artifact-821748258/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:24:53 +0000 UTC FinishedAt: 2026-06-29 07:24:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:25:27 +0000 UTC FinishedAt: 2026-06-29 07:26:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflownq48r[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","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":["rtl_init_phylink","rtl_mac_link_down","rtl_mac_link_up","rtl_mac_select_pcs","rtl8169_sds_read","rtl8169_pcs_get_state","rtl8169_pcs_config","rtl_mac_enable_tx_lpi","rtl_mac_disable_tx_lpi","rtl8169_get_lpi_caps","rtl_phy_irq_map","rtl_phy_irq_cleanup","rtl_disable_hidden_function","rtl_get_sfp_mode","rtl8169_ioctl"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["R8169"],"series_id":"5c5152fa-125a-45ce-9c45-2ea1bbd1443d","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-06-29 07:25:27 +0000 UTC FinishedAt: 2026-06-29 07:26:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*2b262cf5-17f3-4cfc-967d-c353a6b10e2d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*623b9c58-cfff-43fb-ac50-0d262ab975ab,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-workflownq48r/series-workflownq48r-build-action-2463067392/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-workflownq48r/series-workflownq48r-build-action-32630137/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-workflownq48r/series-workflownq48r-convert-artifact-821748258/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,}