Name: series-workflowscgfb Phase: Failed StartedAt: 2026-07-01 13:28:13 +0000 UTC FinishedAt: 2026-07-01 13:41:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscgfb[0] Phase: Succeeded StartedAt: 2026-07-01 13:28:13 +0000 UTC FinishedAt: 2026-07-01 13:40:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscgfb[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 13:28:13 +0000 UTC FinishedAt: 2026-07-01 13:40:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li42MDlhNWVhNjdmYjc0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHR1MzIgY3VyX2xlbiwgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgaSwgc3JjX3BvcnQ7XG4mIzQzO1x0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4mIzQzO1x0aWYgKHNyY19wb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHNyY19wb3J0O1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxuJiM0MztcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbiYjNDM7XHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcbiYjNDM7XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSyxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoLVx1MDAzZXNvYy1cdTAwM2VudW1fcHBlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuJiM0MztcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuJiM0MztcbiYjNDM7XHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbiYjNDM7XHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICYjNDM7MjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqY3VyX3FkbWEsICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHRpbnQgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdXJfcWRtYSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRldi1cdTAwM2Vxb3Nfc3RhdHMsIDAsIHNpemVvZihkZXYtXHUwMDNlcW9zX3N0YXRzKSk7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA0OCw3ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSAmIzQzOzIyNDUsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMTk4LDYgJiM0MzsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNDcsNiAmIzQzOzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzA5LDYgJiM0MzsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzMjQsNiAmIzQzOzIzODcsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQwMywxNyAmIzQzOzI0NjcsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0MjEsMTIgJiM0MzsyNDg3LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjQ5MCwxNyAmIzQzOzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjc1NiwxNiAmIzQzOzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IFRSVENNX1BFQUtfTU9ERTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbiYjNDM7XHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCxcbiBcdFx0XHRcdFx0XHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcbiBcdFx0XHRcdFx0XHQgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MDEsMTEgJiM0MzsyODc0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLVx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cdTAwM2VleHRhY2ssXG4gXHRcdFx0XHQgICBcJiMzNDtxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCYjMzQ7KTtcbkBAIC0yODQxLDcgJiM0MzsyOTE1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSxcbiBcdFx0XHRcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXG4ge1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuQEAgLTMwMTYsMTAgJiM0MzszMDkwLDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBxZG1hLVx1MDAzZXFvc19jaGFubmVsX21hcCk7XG4gXHRjbGVhcl9iaXQocXVldWUsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCk7XG4gXG5AQCAtMzA0NSw2ICYjNDM7MzEyMCw5NSBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdG5ldGRldl93YXJuKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuJiM0MztcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4mIzQzO1x0XHQvKiBIVyBRb1MgaXMgYWx3YXlzIHN1cHBvcnRlZCBieSBHRE0xIGFuZCBHRE0yICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0d2FuX2RldiA9IGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoZXRoKTtcbiYjNDM7XHRpZiAod2FuX2Rldikge1xuJiM0MztcdFx0aWYgKCh3YW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxuJiM0MztcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbiYjNDM7XHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO2Vycm9yX2Rpc2FibGVfd2FuOlxuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbiYjNDM7ZXJyb3JfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTMwNTMsNiAmIzQzOzMyMTcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKVxuIFx0XHRhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShuZXRkZXYsIHEpO1xuIFxuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfUU9TO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMDcyLDI0ICYjNDM7MzIzOCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgVENfSFRCX0NSRUFURTpcbiYjNDM7XHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfUU9TO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGQ3ZmY4YzUyMDBlMjBjLi5hMzE0MzMwZmNkNDhlMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbkBAIC01MzUsMTkgJiM0Mzs1MzUsMjEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbiYjNDM7ZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcbiYjNDM7XHRBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLFxuJiM0MztcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFxuIFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbi1cdC8qIHFvcyBzdGF0cyBjb3VudGVycyAqL1xuLVx0dTY0IGNwdV90eF9wYWNrZXRzO1xuLVx0dTY0IGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdHN0cnVjdCB7XG4mIzQzO1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0XHR1MzIgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xuIFxuIFx0dTMyIGZsYWdzO1xuIFx0aW50IG5icTtcbkBAIC02NTksNyAmIzQzOzY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4mIzQzO1x0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfV0FOKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNjc2LDYgJiM0Mzs2NzgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgJiM0MzsxNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthaXJvaGFfZXRoLmhcJiMzNDtcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbiYjNDM7ICogY29uZmlndXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzYsNiAmIzQzOzM3Niw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgJiM0MzsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4mIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXHQweDI5ZDRcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA5MzJiM2EzZGYyZTU3Ny4uNjA5YTVlYTY3ZmI3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTI5LDcgJiM0Mzs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xODM3LDEzICYjNDM7MTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwogCXUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAJZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpCiAJCWFpcm9oYV9mZV9zZXQocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtJmd0O2lkKSwKIAkJCSAgICAgIEdETV9TVEFHX0VOX01BU0spOwpAQCAtMTkwMyw3ICYjNDM7MTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCWFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTsKQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICgtLXBvcnQtJmd0O3VzZXJzKQogCQlhaXJvaGFfc2V0X3BvcnRfbXR1KGRldi0mZ3Q7ZXRoLCBwb3J0KTsKIAllbHNlCi0JCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsCiYjNDM7CQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiAJcmV0dXJuIDA7CkBAIC0xOTk4LDYgJiM0MzsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaSwgc3JjX3BvcnQ7CiYjNDM7CXUzMiBwc2VfcG9ydDsKJiM0MzsKJiM0MzsJc3JjX3BvcnQgPSBldGgtJmd0O3NvYy0mZ3Q7b3BzLmdldF9zcG9ydChkZXYtJmd0O3BvcnQsIGRldi0mZ3Q7bmJxKTsKJiM0MzsJaWYgKHNyY19wb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBzcmNfcG9ydDsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwKJiM0MzsJCQlSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0ICZndDsmZ3Q7IGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLAomIzQzOwkJCVNQX0NQT1JUX01BU0soc3JjX3BvcnQgJmFtcDsgU1BfQ1BPUlRfREZUX01BU0spKTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCUxQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spOwomIzQzOwlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCSA6IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQkgICAgcHNlX3BvcnQpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBldGgtJmd0O3NvYy0mZ3Q7bnVtX3BwZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQlERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovCiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTRfSURYICZhbXA7JmFtcDsgYWlyb2hhX2lzXzc1ODEoZXRoKSkgewomIzQzOwkJdTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi0mZ3Q7bmJxKTsKJiM0MzsKJiM0MzsJCWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzaywKJiM0MzsJCQkgICAgICBGQ19NQVA2X0RFRl9WQUxVRSAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICoKIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKQEAgLTIwMjQsMTUgJiM0MzsyMDcxLDI2IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCWludCBwcGVfaWQ7CiAKIAkvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovCi0JZGV2LSZndDtxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKLQluZXRkZXYtJmd0O2lycSA9IGRldi0mZ3Q7cWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJcWRtYSA9ICZhbXA7ZXRoLSZndDtxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07CiYjNDM7CWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7cWRtYSwgcWRtYSk7CiYjNDM7CW5ldGRldi0mZ3Q7aXJxID0gcWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwogCWFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7CiYjNDM7CiYjNDM7CWlmICghY3VyX3FkbWEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1lbXNldChkZXYtJmd0O3Fvc19zdGF0cywgMCwgc2l6ZW9mKGRldi0mZ3Q7cW9zX3N0YXRzKSk7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIH0KIAogc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTIwNDgsNyAmIzQzOzIxMDYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIEFJUk9IQV9HRE0yX0lEWDoKIAkJLyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi8KLQkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjsKJiM0MzsJCWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMTg3LDkgJiM0MzsyMjQ1LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKIAl1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuOwogCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IGFpcm9oYV9xdWV1ZSAqcTsKIAlMSVNUX0hFQUQodHhfbGlzdCk7CkBAIC0yMTk4LDYgJiM0MzsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUxNiBpbmRleDsKIAl1OCBmcG9ydDsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LSZndDtxZG1hKTsKIAlxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAl0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpOwogCkBAIC0yMjQ3LDYgJiM0MzsyMzA3LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCXEtJmd0O3R4cV9zdG9wcGVkID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtxLSZndDtsb2NrKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0yMzA5LDYgJiM0MzsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCUZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKQEAgLTIzMjQsNiAmIzQzOzIzODcsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiBlcnJvcjoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCW5ldGRldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTI0MDMsMTcgJiM0MzsyNDY3LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTlVNX1FPU19RVUVVRVM7IGkmIzQzOyYjNDM7KQotCQlhaXJvaGFfcWRtYV9jbGVhcihkZXYtJmd0O3FkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLAogCQkJCSAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBuX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7CiAJCXUzMiBzdGF0dXM7CiAJCWludCBlcnI7CiAKLQkJYWlyb2hhX3FkbWFfd3IoZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRywKJiM0MzsJCWFpcm9oYV9xZG1hX3dyKHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAogCQkJICAgICAgIFRXUlJfUldfQ01EX01BU0sgfAogCQkJICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX1FVRVVFX0lEWF9NQVNLLCBpKSB8CkBAIC0yNDIxLDEyICYjNDM7MjQ4NywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsCiAJCQkJCXN0YXR1cyAmYW1wOyBUV1JSX1JXX0NNRF9ET05FLAogCQkJCQlVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsCi0JCQkJCXRydWUsIGRldi0mZ3Q7cWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwomIzQzOwkJCQkJdHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlhaXJvaGFfcWRtYV9ybXcoZGV2LSZndDtxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAomIzQzOwlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCAmZ3Q7Jmd0OyAzKSwKIAkJCUNIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwKIAkJCV9fZmllbGRfcHJlcChDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksIG1vZGUpKTsKIApAQCAtMjQ5MCwxNyAmIzQzOzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLAogCQkJCQlzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKJiM0MzsJdTY0IHR4X3BhY2tldHM7CiAKLQl1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7Ci0JdTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKLQkJCQkJICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7Ci0JdTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtJmd0O2NwdV90eF9wYWNrZXRzKSAmIzQzOwotCQkJIChmd2RfdHhfcGFja2V0cyAtIGRldi0mZ3Q7ZndkX3R4X3BhY2tldHMpOwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7CiYjNDM7CWZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKJiM0MzsJCQkJCVJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7CiYjNDM7CXR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpICYjNDM7CiYjNDM7CQkgICAgICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICBkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7CiAKIAlfYnN0YXRzX3VwZGF0ZShvcHQtJmd0O3N0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7Ci0JZGV2LSZndDtjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwotCWRldi0mZ3Q7ZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0czsKJiM0MzsJZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0czsKJiM0MzsJZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0czsKIAogCXJldHVybiAwOwogfQpAQCAtMjc1NiwxNiAmIzQzOzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgdTMyIGJ1Y2tldF9zaXplKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpLCBlcnI7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLAogCQkJCQkJICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksCiAJCQkJCQkgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCwKIAkJCQkJCQkgUkVHX0VHUkVTU19UUlRDTV9DRkcsCiAJCQkJCQkJIGksIHJhdGUsIGJ1Y2tldF9zaXplKTsKIAkJaWYgKGVycikKQEAgLTI4MDEsMTEgJiM0MzsyODc0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJdTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtJmd0O2NsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CiAJaW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJLyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5CiAJICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suCiAJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKG9wdC0mZ3Q7ZXh0YWNrLAogCQkJCSAgICYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZSYjMzQ7KTsKQEAgLTI4NDEsNyAmIzQzOzI5MTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwKIAkJCQkgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSwKIAkJCQkgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHFkbWEtJmd0O3FfcngpOyBpJiM0MzsmIzQzOykgewpAQCAtMzAxNiwxMCAmIzQzOzMwOTAsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORzsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCWFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWNsZWFyX2JpdChxdWV1ZSwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKTsKIAljbGVhcl9iaXQocXVldWUsIGRldi0mZ3Q7cW9zX3NxX2JtYXApOwogCkBAIC0zMDQ1LDYgJiM0MzszMTIwLDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X3dhcm4obmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwomIzQzOwlhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAoKHdhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9ERVZfRl9RT1MpIHx8CiYjNDM7CQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJvcl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwllcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfZGlzYWJsZV93YW47CiYjNDM7CiYjNDM7CWVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwNTMsNiAmIzQzOzMyMTcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJZGV2LSZndDtmbGFncyAmYW1wOz0gfkFJUk9IQV9ERVZfRl9RT1M7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNzIsMjQgJiM0MzszMjM4LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCBkN2ZmOGM1MjAwZTIwYy4uYTMxNDMzMGZjZDQ4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNTM1LDE5ICYjNDM7NTM1LDIxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJREVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7CiB9OwogCi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHsKLQlBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSwKJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3MgewomIzQzOwlBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLAomIzQzOwlBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLAogfTsKIAogc3RydWN0IGFpcm9oYV9nZG1fZGV2IHsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZXRoICpldGg7CiAKIAlERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpOwotCS8qIHFvcyBzdGF0cyBjb3VudGVycyAqLwotCXU2NCBjcHVfdHhfcGFja2V0czsKLQl1NjQgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl1MzIgY3B1X3R4X3BhY2tldHM7CiYjNDM7CQl1MzIgZndkX3R4X3BhY2tldHM7CiYjNDM7CX0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTsKIAogCXUzMiBmbGFnczsKIAlpbnQgbmJxOwpAQCAtNjU5LDcgJiM0Mzs2NjEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfREVWX0ZfV0FOKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC02NzYsNiAmIzQzOzY3OCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTE1LDcgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJiMzNDthaXJvaGFfcmVncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWlyb2hhX2V0aC5oJiMzNDsKIAotc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnQKJiM0MzsgKiBjb25maWd1cmF0aW9uLgomIzQzOyAqLwomIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0gewpAQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSkKIAogdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCXU4IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiAJdTMyIGZlX2NwdV9wb3J0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEAKIAogI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNgkJMHgyMjk4CiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pCUdFTk1BU0soNCAmIzQzOyAoKF9uKSAmbHQ7Jmx0OyAzKSwgKChfbikgJmx0OyZsdDsgMykpCiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRQkJMHgxYjFhMTkxOAogCiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVAkweDI5ZDQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgYWlyb2hhYCBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIGBkZXYtJmd0O3FkbWFgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gVGhleSYjMzk7cmUgdXNpbmcgdGhlIHN0YW5kYXJkIFJDVSBwcmltaXRpdmVzOiBgcmN1X2FjY2Vzc19wb2ludGVyYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4gR29vZCBwcmFjdGljZS4gSSBhbHNvIHNlZSBhZGRpdGlvbnMgb2YgZnVuY3Rpb25zIGxpa2UgYGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGFuZCBgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0YC4gVGhlc2UgbGlrZWx5IHJlbGF0ZSB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucy4gVGhlIHBhdGNoIHRoZW4gdHdlYWtzIFFvUyBjb25maWd1cmF0aW9uIGFuZCBIVEIgc2V0dXAgaW4gYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLCBhbmQgYWRkcyBhIGBmbG93X29mZmxvYWRfbXV0ZXhgIHRvIHByb3RlY3QgYGRldi0mZ3Q7cWRtYWAgYW5kIHJlbGF0ZWQgZmxhZ3MuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGRyaXZlcuKAmXMgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbGx5IGFkZGluZyBvciBtb2RpZnlpbmcgUXVhbGl0eSBvZiBTZXJ2aWNlIGZlYXR1cmVzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRhcmdldHMgQWlyb2hhIEVONzU4MSBTb0NzLiBUaG9zZSBhcmUgZW1iZWRkZWQgc3lzdGVtcy4KClNvLCB0aGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGluIFFFTVU/IFRoZXNlIFNvQy1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXJzIGFyZSBvZnRlbiBhIHBhaW4uIFRoZXkgdXN1YWxseSB3b24mIzM5O3QgcHJvYmUgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIGVtdWxhdG9yIGZvciB0aGUgU29DLCB3aGljaCBpcyBhIHJhcmUgb2NjdXJyZW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQmIzM5O3MgZ29pbmcgdG8gcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgb3Igc29tZXRoaW5nIHRoYXQgY291bGQgYmUgZW11bGF0ZWQuIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHByb2JlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBmZWFzaWJpbGl0eSBvZiBpbnZlc3RpZ2F0aW5nIHRoZSBjaGFuZ2VzIGluIG15IG93biBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfLipkcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkwMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkxMC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlcioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQsIGFuZCBzaW5jZSBJJiMzOTttIGFzc3VtaW5nIFFFTVUgaXMgb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB3ZSBjYW4gcHJvYmUgaXQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgZHJpdmVyIGdldHMgaW5zdGFudGlhdGVkLiBJcyBpdCBoYW5kbGVkIGJ5IHNvbWUgZ2VuZXJpYyBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBjb2RlLCBvciBkb2VzIGl0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIHRyZWU/IFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRpY3RhdGUgbXkgcHJvYmluZyBzdHJhdGVneSBpbiBRRU1VLiBEZXRlcm1pbmluZyB0aGUgaW5zdGFudGlhdGlvbiBtZXRob2QgaXMgY3J1Y2lhbCB0byBlZmZpY2llbnQgYW5kIGVmZmVjdGl2ZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5jb21wYXRpYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTg6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2YW43NTgzX3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM4OTktXHR7IC8qIHNlbnRpbmVsICovIH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbnB1X21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3OTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsZW43NTgxLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY4MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsYW43NTgzLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZhbjc1ODNfbnB1X3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY4MS1cdHsgLyogc2VudGluZWwgKi8gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gU3l6a2FsbGVyIGdldCBhdCB0aGlzPyBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHVzaW5nIHRoZSBkZXZpY2UgdHJlZSAoYG9mX2RldmljZV9pZGApIGlzIGEgZ29vZCBzdGFydC4gSSBrbm93IFN5emthbGxlciBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgc3l6X2Rldl9pcHY0X3NldHVwYCBvciBldmVuIGJ5IG1vdW50aW5nIGFuIGltYWdlIHdpdGggYSBjdXN0b20gRFRCLiBCdXQgZ2VuZXJhbGx5LCBTeXprYWxsZXIgZG9lc24mIzM5O3QganVzdCByYW5kb21seSBoaXQgcGxhdGZvcm0gZHJpdmVycyB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSB0YXJnZXRlZCBvciBwYXJ0IG9mIGEgZ2VuZXJpYyBzdWJzeXN0ZW0uCgpXYWl0LCBkaWQgSSBtaXNzIHNvbWV0aGluZz8gRG9lcyBTeXprYWxsZXIgaGF2ZSBhIHdheSB0byBnZW5lcmF0ZSBhIGZha2UgZGV2aWNlIHRyZWUgb3IgY2FuIHdlIHVzZSBgc3l6X2dlbl9wbGF0Zm9ybV9kZXZpY2VgPyBObywgaXQgZG9lc24mIzM5O3QgaGF2ZSBhICpnZW5lcmFsKiBtZWNoYW5pc20gZm9yIHByb2JpbmcgYWxsIHBsYXRmb3JtIGRyaXZlcnMuIEJ1dCwgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRyaXZlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSBpbnN0YW50aWF0ZWQuCgpCdXQgdGhlbiB0aGVyZSBpcyB0aGF0IG5vdGUgYWJvdXQgaW5hY2Nlc3NpYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSBsaWtlIFVTQiBnYWRnZXRzIGFuZCBtYWM4MDIxMV9od3NpbS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MsIHNvIGl0IGlzIGdvaW5nIHRvIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzLCBjbG9ja3MsIHJlc2V0cywgZXRjLiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBibG9ja2VyLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRyaXZlciBpcyB1c2luZyBgZGV2bV9pb3JlbWFwX3Jlc291cmNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSWYgaXQgZG9lcywgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbiYjMzk7dCBiYWNrZWQgYnkgUkFNIG9yIHRoZSBlbXVsYXRvciwgdGhhdCB3b3VsZCBiZSBhIGNsZWFyIGZhaWwsIHdvdWxkbiYjMzk7dCBpdD8gVGhhdCB3b3VsZCBiZSBhIHNpbXBsZSB3YXkgdG8gZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvcmVtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTUxMj1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjE1MjQ6XHRxZG1hLVx1MDAzZXJlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1MjUtXHRpZiAoSVNfRVJSKHFkbWEtXHUwMDNlcmVncykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zNTM4PXN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zNTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozNTYxOlx0ZXRoLVx1MDAzZWZlX3JlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsIFwmIzM0O2ZlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzU2Mi1cdGlmIChJU19FUlIoZXRoLVx1MDAzZWZlX3JlZ3MpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjQ1PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1NjpcdGFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTctXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NDMwPXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDUwOlx0bnB1LVx1MDAzZXN0YXRzID0gZGV2bV9pb3JlbWFwKG5wdS1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1MS1cdFx0XHRcdCAgcHBlX2RhdGEtXHUwMDNlc3RhdHNfaW5mby5ucHVfc3RhdHNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Mz1zdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzAyOlx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVx0aWYgKElTX0VSUihiYXNlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWxpemF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCYjMzk7cyB1c2luZyBgZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZWAuIFRoYXQgc2NyZWFtcyAmIzM0O3BoeXNpY2FsIG1lbW9yeSBtYXBwaW5nLCYjMzQ7IGRvZXNuJiMzOTt0IGl0PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgU29DLCBwcm9iaW5nIHRoaXMgZHJpdmVyIGlzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJvbWIgb3V0LiBFdmVuIGlmIHdlIHNvbWVob3cgbWFuYWdlIHRvIHRyaWNrIHRoZSBzeXN0ZW0gaW50byB0aGlua2luZyB0aGUgZGV2aWNlIHRyZWUgbm9kZSBleGlzdHMsIGFjY2Vzc2luZyB0aGF0IG1hcHBlZCBtZW1vcnkgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgZmF1bHRzLCBnYXJiYWdlIGRhdGEgKGFsbCB6ZXJvcyBvciBvbmVzKSwgYW5kIGEgcHJvYmFibGUgZWFybHkgZXhpdCBmcm9tIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIG1heWJlIGl0JiMzOTtzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgcmVzZXQgb3IgcmVhZGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIElELCBlaXRoZXIgd2F5LCBpdCYjMzk7bGwgZmFpbC4KClRoZSBrZXkgbm93IGlzIHRvIGRpZyBpbnRvIHRoZSBgYWlyb2hhX3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKndoZXJlKiB0aGlzIGRyaXZlciBtaWdodCBiZSBtYWtpbmcgdGhvc2UgZmF0YWwgaGFyZHdhcmUgcmVhZHMuIElmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cywgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgbGlrZWxpaG9vZCBvZiBzdWNjZXNzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgd29ya2Fyb3VuZHMgKG9yIGNvbmNsdWRlIHRoYXQgdGhpcyBpcyBhIGRlYWQgZW5kIGZvciB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IHNpZ25pZmljYW50IGVtdWxhdGlvbikuIExldCYjMzk7cyBzZWUgd2hhdCBgYWlyb2hhX3Byb2JlYCBpcyBhY3R1YWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9wb2xsX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9NDAzPXN0YXRpYyBpbnQgYWlyb2hhX2ZlX21jX3ZsYW5fY2xlYXIoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQxNS1cdFx0YWlyb2hhX2ZlX3dyKGV0aCwgUkVHX01DX1ZMQU5fQ0ZHLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MTY6XHRcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MTctXHRcdFx0XHRcdHZhbCBcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyOS1cdFx0XHRhaXJvaGFfZmVfd3IoZXRoLCBSRUdfTUNfVkxBTl9DRkcsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQzMDpcdFx0XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfZmVfcnIsIHZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMxLVx0XHRcdFx0XHRcdHZhbCBcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTExNTE9c3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfdHhfY2xlYW51cChzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xMTU3LVx0XHRcdCAgR0xPQkFMX0NGR19UWF9ETUFfRU5fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjExNTg6XHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTE1OS1cdFx0XHQgICAgICAhKHN0YXR1cyBcdTAwMjYgR0xPQkFMX0NGR19UWF9ETUFfQlVTWV9NQVNLKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTEyMjM9c3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X2hmd2RfcXVldWVzKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTEyODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjEyODc6XHRyZXR1cm4gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTI4OC1cdFx0XHRcdCAhKHN0YXR1cyBcdTAwMjYgTE1HUl9JTklUX1NUQVJUKSwgVVNFQ19QRVJfTVNFQyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTE1NDg9c3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTU1Ny1cdFx0XHRcdCAgR0xPQkFMX0NGR19SWF9ETUFfRU5fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjE1NTg6XHRcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNTU5LVx0XHRcdFx0ICAgICAgIShzdGF0dXMgXHUwMDI2IEdMT0JBTF9DRkdfUlhfRE1BX0JVU1lfTUFTSyksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNDY1PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODYtXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9WQUxVRV9NQVNLLCB3ZWlnaHRzW2ldKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjI0ODc6XHRcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODgtXHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI2MDM9c3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfcmxfcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgcXVldWVfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjEyLVx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RSVENNX0NGR19QQVJBTShhZGRyKSwgY29uZmlnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYxMzpcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjE0LVx0XHRcdCAgICAgIHZhbCBcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNjI2PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3JsX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IHF1ZXVlX2lkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjYzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYzOTpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjQwLVx0XHRcdFx0IHZhbCBcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNzIyPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3RydGNtX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IGNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzMzLVx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RSVENNX0NGR19QQVJBTShhZGRyKSwgY29uZmlnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjczNDpcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzM1LVx0XHRcdCAgICAgIHZhbCBcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mjc0Nz1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90cnRjbV9wYXJhbShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBjaGFubmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjc2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mjc2MTpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzYyLVx0XHRcdFx0IHZhbCBcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MTYzPXN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTg1Olx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXHUwMDNlcmVnbWFwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xODYtXHRcdFx0XHRcdCAgICAgIFJFR19DUl9NQlEwX0NUUkwoMykgJiM0Mzsgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjYxPWFpcm9oYV9wcGVfZm9lX2dldF9lbnRyeV9sb2NrZWQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy02NzYtXHRcdFx0ICAgICBQUEVfU1JBTV9DVFJMX1JFUV9NQVNLKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Njc3Olx0XHRpZiAocmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKGFpcm9oYV9mZV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy02NzgtXHRcdFx0XHRcdCAgICAgdmFsIFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NzIxPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfY29tbWl0X3NyYW1fZW50cnkoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjczNjpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dF9hdG9taWMoYWlyb2hhX2ZlX3JyLCB2YWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTczNy1cdFx0XHRcdFx0dmFsIFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTM4Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfd2FpdF9mb3JfbnB1X2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5NTpcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLCB2YWwsIFVTRUNfUEVSX01TRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTYtXHRcdFx0XHQxMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwgZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQwMS1cdGlmIChhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTQwMjpcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsIHZhbCwgVVNFQ19QRVJfTVNFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQwMy1cdFx0XHRcdFx0MTAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsIGV0aCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPUZhbHNlOiBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVzLCBJJiMzOTttIHNlZWluZyBhIGJ1bmNoIG9mIGByZWFkX3BvbGxfdGltZW91dGAgY2FsbHMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAsIHRob3NlIGFyZSBqdXN0IGdvaW5nIHRvIHRpbWVvdXQgYW5kIGZhaWwg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBXYWl0IGEgc2Vjb25kLCBjb3VsZCB0aGlzIGRyaXZlciBiZSBnZXR0aW5nIHNvbWUga2luZCBvZiBtb2NrIGRldmljZSB0cmVhdG1lbnQgZnJvbSBzeXprYWxsZXI/IEJ1dCwgbm8sIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgbW9jayBmb3IgdGhpcyBzcGVjaWZpYyBBaXJvaGEgZXRoZXJuZXQuCgpBbHJpZ2h0LCBidXQgSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGNvbmZpcm0gdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGJyb2FkLCBnZW5lcmljIGNvZGUuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbiBgYWlyb2hhX2V0aC5jYCwgYGFpcm9oYV9ldGguaGAsIGBhaXJvaGFfcHBlLmNgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBUaGF0IG1ha2VzIHRoaXMgaGFyZHdhcmUtc3BlY2lmaWMsIHJpZ2h0PyBFeGFjdGx5LgoKQ29uc2lkZXJpbmcgdGhpcyBpcyBhbiBBaXJvaGEgRU43NTgxIFNvQyBldGhlcm5ldCBkcml2ZXIsIHRoYXQgY29kZSB3b24mIzM5O3QgcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBvciBhIHNwZWNpZmljIFFFTVUgbWFjaGluZSBtb2RlbCB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBzeXprYWxsZXIgaW5zdGFuY2VzIG9uIHg4Nl82NCBvciBhcm02NCBRRU1VL0dDRSBkb24mIzM5O3QgaGF2ZSB0aGlzLCBzbyB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7CgpUaGF0JiMzOTtzIGl0IHRoZW4uIFRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggdGhpcyBBaXJvaGEgZHJpdmVyLiBJdCBuZWVkcyBhIHNwZWNpYWwgUUVNVSBtYWNoaW5lIG1vZGVsLCBvciB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgQWlyb2hhIGV0aGVybmV0IGluIHRoZSBrZXJuZWwsIGJ1dCBhc3N1bWluZyB0aGVyZSBpc24mIzM5O3QsIHRoaXMgaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcgd2l0aCBjdXJyZW50IGluZnJhc3RydWN0dXJlLiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoyMzpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMjQtc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsYWNyaXRlY2gvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDoKCioqRXhhbWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgS2NvbmZpZyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHksIHJpZ2h0PyBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGFuZCBlbnN1cmluZyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IHNldHRpbmdzLiBUaW1lIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozOlx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo1Olx0aGVscFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NjpcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjg6aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMDpjb25maWcgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjExOlx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMjpcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTM6XHRzZWxlY3QgUkVHTUFQX01NSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE0Olx0aGVscFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTU6XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE2Olx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxNzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE4OmNvbmZpZyBORVRfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxOTpcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjE6XHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjM6XHRoZWxwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyNDpcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI1Olx0ICBBaXJvaGEgU29DIGZhbWlseS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI2OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjg6XHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI5Olx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXHUwMDI2XHUwMDI2IE5FVF9BSVJPSEFfTlBVXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMTpcdGhlbHBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMyOlx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjM0OmVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk4NAoJCQkJCQkJb3V0cHV0OiAxMDgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBwYXRjaCYjMzk7cyBlZmZlY3RpdmVuZXNzIGhpbmdlcyBlbnRpcmVseSBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTm93LCBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiBidWlsZCB0aGlzIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZC4gSG93ZXZlciwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZ29vZCBuZXdzIGVuZHMuIFRoZSByZWFsIHN0aWNraW5nIHBvaW50IGlzIHRoYXQgYENPTVBJTEVfVEVTVGAgaXNuJiMzOTt0IGVub3VnaDsgd2UgbmVlZCB0aGUgYWN0dWFsIEFpcm9oYSBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgc2V0dXAgdGhhdCBwcmVjaXNlbHkgZW11bGF0ZXMgdGhlIGBBUkNIX0FJUk9IQWAgYXJjaGl0ZWN0dXJlLiBVbmZvcnR1bmF0ZWx5LCBhcyB3ZSBrbm93LCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lhbGl6ZWQgUUVNVSBjb25maWd1cmF0aW9uIGZvciBvdXIgc3RhbmRhcmQgZnV6emluZyBydW5zLgoKU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGlzIGRlYWQgaW4gdGhlIHdhdGVyIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhdCBsZWFzdCBpbiBvdXIgY3VycmVudCBzZXR1cC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgdGhlIFFFTVUgY29uZmlndXJhdGlvbnMgd2UgYXJlIHVzaW5nLiBJdCBpcyBtb2RpZnlpbmcgYSBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIgKEFpcm9oYSBTb0MpLCBhbmQgd2UgaGF2ZSBubyBhYmlsaXR5IHRvIGVmZmVjdGl2ZWx5IHByb2JlIG9yIHJlYWNoIHRoYXQgZHJpdmVyIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIG1vZGlmaWVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBtZWFuaW5nIGl0JiMzOTtzIGltcG9zc2libGUgdG8gZWZmaWNpZW50bHkgdGVzdCBpbiBHQ0Ugb3IgUUVNVSB1c2luZyBvdXIgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMuIFdlIGNhbiYjMzk7dCBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjb2RlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gV2Ugc2hvdWxkIG5vdCB3YXN0ZSBvdXIgY3ljbGVzIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzg6MzQuODUyNzAxODY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MDQ1Njg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozODozNC44NTI3MTIzOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTgzMTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzNGViMjJjYTQwZTJiNjBmYTc1YmQxNjY2MDY0OTA5OWI4Y2QxNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMzozODozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li42MDlhNWVhNjdmYjc0MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MjksNyArOTI5LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTgzNywxMyArMTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MDMsNyArMTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTkxMSw3ICsxOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LVxcdTAwM2VldGgsIHBvcnQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE5OTgsNiArMTk5OCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjAyNCwxNSArMjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4gXFx0aW50IHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlcWRtYSwgcWRtYSk7XFxuK1xcdG5ldGRldi1cXHUwMDNlaXJxID0gcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG4gXFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcXG4rXFxuK1xcdGlmICghY3VyX3FkbWEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1lbXNldChkZXYtXFx1MDAzZXFvc19zdGF0cywgMCwgc2l6ZW9mKGRldi1cXHUwMDNlcW9zX3N0YXRzKSk7XFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5AQCAtMjA0OCw3ICsyMTA2LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgQUlST0hBX0dETTJfSURYOlxcbiBcXHRcXHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xcbi1cXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xcbitcXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjE4Nyw5ICsyMjQ1LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbiBcXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcXG4gXFx0TElTVF9IRUFEKHR4X2xpc3QpO1xcbkBAIC0yMTk4LDYgKzIyNTYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHUxNiBpbmRleDtcXG4gXFx0dTggZnBvcnQ7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZG1hKTtcXG4gXFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuIFxcdHRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7XFxuIFxcbkBAIC0yMjQ3LDYgKzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcXG4gXFx0XFx0cS1cXHUwMDNldHhxX3N0b3BwZWQgPSB0cnVlO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC0yMzA5LDYgKzIzNzEsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdEZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7XFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuQEAgLTIzMjQsNiArMjM4Nyw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyb3I6XFxuIFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG5AQCAtMjQwMywxNyArMjQ2NywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxcbi1cXHRcXHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXFx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuIFxcdFxcdFxcdFxcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX3dlaWdodHM7IGkrKykge1xcbiBcXHRcXHR1MzIgc3RhdHVzO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4tXFx0XFx0YWlyb2hhX3FkbWFfd3IoZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXFxuIFxcdFxcdFxcdCAgICAgICBUV1JSX1JXX0NNRF9NQVNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XFxuIFxcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcXG5AQCAtMjQyMSwxMiArMjQ4NywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXFxuIFxcdFxcdFxcdFxcdFxcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcXG4tXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XFxuK1xcdFxcdFxcdFxcdFxcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0YWlyb2hhX3FkbWFfcm13KGRldi1cXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4rXFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXFx1MDAzZVxcdTAwM2UgMyksXFxuIFxcdFxcdFxcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xcbiBcXG5AQCAtMjQ5MCwxNyArMjU1NiwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4rXFx0dTY0IHR4X3BhY2tldHM7XFxuIFxcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuLVxcdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbi1cXHRcXHRcXHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyk7XFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdHR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSArXFxuK1xcdFxcdCAgICAgKHUzMikoZndkX3R4X3BhY2tldHMgLVxcbitcXHRcXHRcXHQgICBkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7XFxuIFxcbiBcXHRfYnN0YXRzX3VwZGF0ZShvcHQtXFx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XFxuLVxcdGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcXG4tXFx0ZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc1NiwxNiArMjgyNywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCB1MzIgYnVja2V0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMjgwMSwxMSArMjg3NCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG4gXFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XFxuIFxcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxcbiBcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVxcXCIpO1xcbkBAIC0yODQxLDcgKzI5MTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG5AQCAtMzAxNiwxMCArMzA5MCwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCk7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCk7XFxuIFxcbkBAIC0zMDQ1LDYgKzMxMjAsOTUgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcXG4rXFx0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xcbitcXG4rXFx0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9QUEUxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG4rXFx0XFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcXG4rXFxuK1xcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XFxuK1xcdGlmICh3YW5fZGV2KSB7XFxuK1xcdFxcdGlmICgod2FuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxcbitcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbitcXHR9XFxuK1xcbitcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XFxuK1xcbitcXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRcXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XFxuK1xcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rZXJyb3JfZGlzYWJsZV93YW46XFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rZXJyb3JfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMzA1Myw2ICszMjE3LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcXG4gXFx0XFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcXG4gXFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzA3MiwyNCArMzIzOCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzd2l0Y2ggKG9wdC1cXHUwMDNlY29tbWFuZCkge1xcbi1cXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuK1xcdGNhc2UgVENfSFRCX0NSRUFURToge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXFx1MDAzZWV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgVENfSFRCX0RFU1RST1k6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpO1xcbiBcXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDpcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbmluZGV4IGQ3ZmY4YzUyMDBlMjBjLi5hMzE0MzMwZmNkNDhlMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbkBAIC01MzUsMTkgKzUzNSwyMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xcbiBcXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcXG4gfTtcXG4gXFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xcbi1cXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcXG4rZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcXG4rXFx0QUlST0hBX0RFVl9GX1dBTiA9IEJJVCgwKSxcXG4rXFx0QUlST0hBX0RFVl9GX1FPUyA9IEJJVCgxKSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xcbiBcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcXG4tXFx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXFxuLVxcdHU2NCBjcHVfdHhfcGFja2V0cztcXG4tXFx0dTY0IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1MzIgY3B1X3R4X3BhY2tldHM7XFxuK1xcdFxcdHUzMiBmd2RfdHhfcGFja2V0cztcXG4rXFx0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xcbiBcXG4gXFx0dTMyIGZsYWdzO1xcbiBcXHRpbnQgbmJxO1xcbkBAIC02NTksNyArNjYxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfREVWX0ZfV0FOKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuQEAgLTY3Niw2ICs2NzgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIFxcbitleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcXG4rYWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVxcdTAwM2VxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcXG4rfVxcbitcXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XFxuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XFxuIHZvaWQgYWlyb2hhX3BwZV9jaGVja19za2Ioc3RydWN0IGFpcm9oYV9wcGVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuQEAgLTE1LDcgKzE1LDEwIEBAXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfcmVncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX2V0aC5oXFxcIlxcbiBcXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xcbisvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0XFxuKyAqIGNvbmZpZ3VyYXRpb24uXFxuKyAqL1xcbitERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHtcXG5AQCAtODYsOCArODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxcbiBcXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuLVxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4gXFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWzBdO1xcbiBcXHR1MzIgZmVfY3B1X3BvcnQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuaW5kZXggNDM2ZjNjODc3OWMxMDIuLjRlMTdkZmJjZjJiODhhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG5AQCAtMzc2LDYgKzM3Niw3IEBAXFxuIFxcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XFx0XFx0MHgyMjk4XFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcXHRHRU5NQVNLKDQgKyAoKF9uKSBcXHUwMDNjXFx1MDAzYyAzKSwgKChfbikgXFx1MDAzY1xcdTAwM2MgMykpXFxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcXHRcXHQweDFiMWExOTE4XFxuIFxcbiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVFxcdDB4MjlkNFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzg6MzUuNzI5NTUzNzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDYyNzcwODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggOTMyYjNhM2RmMmU1NzcuLjYwOWE1ZWE2N2ZiNzQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0aWYgKCFkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXFkbWEgIT0gcWRtYSlcbitcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgKzE4MzcsMTQgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdGVyciA9IGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyArMTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXHRhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCBmYWxzZSk7XG5AQCAtMTkxMSw3ICsxOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmICgtLXBvcnQtXHUwMDNldXNlcnMpXG4gXHRcdGFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LVx1MDAzZWV0aCwgcG9ydCk7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbitcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiArMTk5OCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4rXHRpbnQgaSwgc3JjX3BvcnQ7XG4rXHR1MzIgcHNlX3BvcnQ7XG4rXG4rXHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4rXHRpZiAoc3JjX3BvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzcmNfcG9ydDtcbitcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsXG4rXHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4rXHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbitcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbitcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdExQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spO1xuK1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuK1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGgtXHUwMDNlc29jLVx1MDAzZW51bV9wcGU7IGkrKylcbitcdFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuK1xuK1x0LyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovXG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbitcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuK1xuK1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4rXHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjAyNCwxNSArMjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiBcdGludCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2VxZG1hLCBxZG1hKTtcbitcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdGlmICghY3VyX3FkbWEpXG4rXHRcdHJldHVybjtcbitcbitcdG1lbXNldChkZXYtXHUwMDNlcW9zX3N0YXRzLCAwLCBzaXplb2YoZGV2LVx1MDAzZXFvc19zdGF0cykpO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDQ4LDcgKzIxMDYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgQUlST0hBX0dETTJfSURYOlxuIFx0XHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xuLVx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XG4rXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSArMjI0NSw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjE5OCw2ICsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjQ3LDYgKzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjMwOSw2ICsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjMyNCw2ICsyMzg3LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MDMsMTcgKzI0NjcsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDIxLDEyICsyNDg3LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI0OTAsMTcgKzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbitcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuLVx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbi1cdFx0XHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuK1x0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuK1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuK1x0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cbitcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSArXG4rXHRcdCAgICAgKHUzMikoZndkX3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3NTYsMTYgKzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MDEsMTEgKzI4NzQsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCIpO1xuQEAgLTI4NDEsNyArMjkxNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbkBAIC0zMDE2LDEwICszMDkwLDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNDUsNiArMzEyMCw5NSBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbitcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXG5cIiwgZXJyKTtcbitcbitcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK1xuK1x0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAoKHdhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9RT1MpIHx8XG4rXHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwiKTtcbitcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbitcdFx0fVxuK1x0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuK1x0fVxuK1xuK1x0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHR1MzIgcHNlX3BvcnQ7XG4rXG4rXHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4rXHRcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4rXHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XG4rXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4rZXJyb3JfZGlzYWJsZV93YW46XG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitlcnJvcl91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTMwNTMsNiArMzIxNyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1FPUztcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMDcyLDI0ICszMjM4LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitzdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcbiB7XG4gXHRzd2l0Y2ggKG9wdC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4rXHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcbitcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1FPUztcbiBcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBkN2ZmOGM1MjAwZTIwYy4uYTMxNDMzMGZjZDQ4ZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTM1LDE5ICs1MzUsMjEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuK1x0QUlST0hBX0RFVl9GX1dBTiA9IEJJVCgwKSxcbitcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4rXHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbitcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbiBcdHUzMiBmbGFncztcbiBcdGludCBuYnE7XG5AQCAtNjU5LDcgKzY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4rXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbkBAIC02NzYsNiArNjc4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBcbitleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqXG4rYWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVx1MDAzZXFkbWEsXG4rXHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4rXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KSk7XG4rfVxuK1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgKzE1LDEwIEBAXG4gI2luY2x1ZGUgXCJhaXJvaGFfcmVncy5oXCJcbiAjaW5jbHVkZSBcImFpcm9oYV9ldGguaFwiXG4gXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbisgKiBjb25maWd1cmF0aW9uLlxuKyAqL1xuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzYsNiArMzc2LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCArICgoX24pIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDNjXHUwMDNjIDMpKVxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXHQweDI5ZDRcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjM1LjcyOTU1NzQ3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDcxMzEzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBhaXJvaGFgIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBwcm90ZWN0aW9uIGZvciBgZGV2LVx1MDAzZXFkbWFgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gVGhleSdyZSB1c2luZyB0aGUgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfYWNjZXNzX3BvaW50ZXJgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLiBHb29kIHByYWN0aWNlLiBJIGFsc28gc2VlIGFkZGl0aW9ucyBvZiBmdW5jdGlvbnMgbGlrZSBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0YCwgYW5kIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLiBUaGVzZSBsaWtlbHkgcmVsYXRlIHRvIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggdGhlbiB0d2Vha3MgUW9TIGNvbmZpZ3VyYXRpb24gYW5kIEhUQiBzZXR1cCBpbiBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAsIGFuZCBhZGRzIGEgYGZsb3dfb2ZmbG9hZF9tdXRleGAgdG8gcHJvdGVjdCBgZGV2LVx1MDAzZXFkbWFgIGFuZCByZWxhdGVkIGZsYWdzLlxuXG5GdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGRyaXZlcuKAmXMgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbGx5IGFkZGluZyBvciBtb2RpZnlpbmcgUXVhbGl0eSBvZiBTZXJ2aWNlIGZlYXR1cmVzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRhcmdldHMgQWlyb2hhIEVONzU4MSBTb0NzLiBUaG9zZSBhcmUgZW1iZWRkZWQgc3lzdGVtcy5cblxuU28sIHRoZSBiaWcgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgaW4gUUVNVT8gVGhlc2UgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlcnMgYXJlIG9mdGVuIGEgcGFpbi4gVGhleSB1c3VhbGx5IHdvbid0IHByb2JlIHVubGVzcyB0aGVyZSdzIGEgZGVkaWNhdGVkIGVtdWxhdG9yIGZvciB0aGUgU29DLCB3aGljaCBpcyBhIHJhcmUgb2NjdXJyZW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIGdvaW5nIHRvIHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUsIG9yIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSBpdCdzIGEgUENJIGRyaXZlciBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBlbXVsYXRlZC4gSSdsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0J3MgcHJvYmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGZlYXNpYmlsaXR5IG9mIGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gbXkgb3duIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjQyLjgzNjY5MjY0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg1ODc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlXy4qZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTAzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgxMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjQzLjM5NTI4OTIzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDYwOTA0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgc2luY2UgSSdtIGFzc3VtaW5nIFFFTVUgaXMgb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQsIGxldCdzIGV4cGxvcmUgdGhhdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHdlIGNhbiBwcm9iZSBpdC4gVGhlIGtleSBxdWVzdGlvbiBpcyBob3cgdGhpcyBkcml2ZXIgZ2V0cyBpbnN0YW50aWF0ZWQuIElzIGl0IGhhbmRsZWQgYnkgc29tZSBnZW5lcmljIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uIGNvZGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIHRoZSBkZXZpY2UgdHJlZT8gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGljdGF0ZSBteSBwcm9iaW5nIHN0cmF0ZWd5IGluIFFFTVUuIERldGVybWluaW5nIHRoZSBpbnN0YW50aWF0aW9uIG1ldGhvZCBpcyBjcnVjaWFsIHRvIGVmZmljaWVudCBhbmQgZWZmZWN0aXZlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjE2Ljg1NjIwNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NzU0NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY29tcGF0aWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzg5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLWV0aFxcXCIsIC5kYXRhID0gXFx1MDAyNmVuNzU4MV9zb2NfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzg5ODpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2YW43NTgzX3NvY19kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zODk5LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX25wdV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njc5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuNzU4MS1ucHVcXFwiLCAuZGF0YSA9IFxcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2ODA6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLW5wdVxcXCIsIC5kYXRhID0gXFx1MDAyNmFuNzU4M19ucHVfc29jX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY4MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MTcuNDQyOTY4NjYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMzY2NzMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlcidzIEZ1enphYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGhvdyBlYXNpbHkgY2FuIFN5emthbGxlciBnZXQgYXQgdGhpcz8gVGhlIGZhY3QgdGhhdCBpdCdzIHVzaW5nIHRoZSBkZXZpY2UgdHJlZSAoYG9mX2RldmljZV9pZGApIGlzIGEgZ29vZCBzdGFydC4gSSBrbm93IFN5emthbGxlciBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgc3l6X2Rldl9pcHY0X3NldHVwYCBvciBldmVuIGJ5IG1vdW50aW5nIGFuIGltYWdlIHdpdGggYSBjdXN0b20gRFRCLiBCdXQgZ2VuZXJhbGx5LCBTeXprYWxsZXIgZG9lc24ndCBqdXN0IHJhbmRvbWx5IGhpdCBwbGF0Zm9ybSBkcml2ZXJzIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IHRhcmdldGVkIG9yIHBhcnQgb2YgYSBnZW5lcmljIHN1YnN5c3RlbS5cblxuV2FpdCwgZGlkIEkgbWlzcyBzb21ldGhpbmc/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSB3YXkgdG8gZ2VuZXJhdGUgYSBmYWtlIGRldmljZSB0cmVlIG9yIGNhbiB3ZSB1c2UgYHN5el9nZW5fcGxhdGZvcm1fZGV2aWNlYD8gTm8sIGl0IGRvZXNuJ3QgaGF2ZSBhICpnZW5lcmFsKiBtZWNoYW5pc20gZm9yIHByb2JpbmcgYWxsIHBsYXRmb3JtIGRyaXZlcnMuIEJ1dCwgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRyaXZlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSBpbnN0YW50aWF0ZWQuXG5cbkJ1dCB0aGVuIHRoZXJlIGlzIHRoYXQgbm90ZSBhYm91dCBpbmFjY2Vzc2libGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldHMgYW5kIG1hYzgwMjExX2h3c2ltLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQywgc28gaXQgaXMgZ29pbmcgdG8gbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMsIGNsb2NrcywgcmVzZXRzLCBldGMuLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgaXMgZGVmaW5pdGVseSBhIGJsb2NrZXIuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGlzIGRyaXZlciBpcyB1c2luZyBgZGV2bV9pb3JlbWFwX3Jlc291cmNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSWYgaXQgZG9lcywgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbid0IGJhY2tlZCBieSBSQU0gb3IgdGhlIGVtdWxhdG9yLCB0aGF0IHdvdWxkIGJlIGEgY2xlYXIgZmFpbCwgd291bGRuJ3QgaXQ/IFRoYXQgd291bGQgYmUgYSBzaW1wbGUgd2F5IHRvIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MjQuMTY2NjM5Nzc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODg5NTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb3JlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xNTEyPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNTIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTUyNDpcXHRxZG1hLVxcdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTUyNS1cXHRpZiAoSVNfRVJSKHFkbWEtXFx1MDAzZXJlZ3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zNTM4PXN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM1NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozNTYxOlxcdGV0aC1cXHUwMDNlZmVfcmVncyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9ieW5hbWUocGRldiwgXFxcImZlXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zNTYyLVxcdGlmIChJU19FUlIoZXRoLVxcdTAwM2VmZV9yZWdzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjQ1PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1NjpcXHRhZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1Ny1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz00MzA9c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NTA6XFx0bnB1LVxcdTAwM2VzdGF0cyA9IGRldm1faW9yZW1hcChucHUtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1MS1cXHRcXHRcXHRcXHQgIHBwZV9kYXRhLVxcdTAwM2VzdGF0c19pbmZvLm5wdV9zdGF0c19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02OTM9c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcwMjpcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVxcdGlmIChJU19FUlIoYmFzZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjI0LjQyNTU0NDg1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTQ2MTkwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGl0J3MgdXNpbmcgYGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9ieW5hbWVgLiBUaGF0IHNjcmVhbXMgXCJwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyxcIiBkb2Vzbid0IGl0PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgU29DLCBwcm9iaW5nIHRoaXMgZHJpdmVyIGlzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJvbWIgb3V0LiBFdmVuIGlmIHdlIHNvbWVob3cgbWFuYWdlIHRvIHRyaWNrIHRoZSBzeXN0ZW0gaW50byB0aGlua2luZyB0aGUgZGV2aWNlIHRyZWUgbm9kZSBleGlzdHMsIGFjY2Vzc2luZyB0aGF0IG1hcHBlZCBtZW1vcnkgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBXZSdyZSBsb29raW5nIGF0IHBvdGVudGlhbCBmYXVsdHMsIGdhcmJhZ2UgZGF0YSAoYWxsIHplcm9zIG9yIG9uZXMpLCBhbmQgYSBwcm9iYWJsZSBlYXJseSBleGl0IGZyb20gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgbWF5YmUgaXQncyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIHJlc2V0IG9yIHJlYWRpbmcgYSBzcGVjaWZpYyBoYXJkd2FyZSBJRCwgZWl0aGVyIHdheSwgaXQnbGwgZmFpbC5cblxuVGhlIGtleSBub3cgaXMgdG8gZGlnIGludG8gdGhlIGBhaXJvaGFfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoaXMgZHJpdmVyIG1pZ2h0IGJlIG1ha2luZyB0aG9zZSBmYXRhbCBoYXJkd2FyZSByZWFkcy4gSWYgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBsaWtlbGlob29kIG9mIHN1Y2Nlc3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB3b3JrYXJvdW5kcyAob3IgY29uY2x1ZGUgdGhhdCB0aGlzIGlzIGEgZGVhZCBlbmQgZm9yIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgc2lnbmlmaWNhbnQgZW11bGF0aW9uKS4gTGV0J3Mgc2VlIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjMxLjEyMDE2ODc1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTU2NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfcG9sbF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MDM9c3RhdGljIGludCBhaXJvaGFfZmVfbWNfdmxhbl9jbGVhcihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MTUtXFx0XFx0YWlyb2hhX2ZlX3dyKGV0aCwgUkVHX01DX1ZMQU5fQ0ZHLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDE2OlxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDE3LVxcdFxcdFxcdFxcdFxcdHZhbCBcXHUwMDI2IE1DX1ZMQU5fQ0ZHX0NNRF9ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyOS1cXHRcXHRcXHRhaXJvaGFfZmVfd3IoZXRoLCBSRUdfTUNfVkxBTl9DRkcsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MzA6XFx0XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MzEtXFx0XFx0XFx0XFx0XFx0XFx0dmFsIFxcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTE1MT1zdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV90eF9jbGVhbnVwKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTE1Ny1cXHRcXHRcXHQgIEdMT0JBTF9DRkdfVFhfRE1BX0VOX01BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTE1ODpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTExNTktXFx0XFx0XFx0ICAgICAgIShzdGF0dXMgXFx1MDAyNiBHTE9CQUxfQ0ZHX1RYX0RNQV9CVVNZX01BU0spLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xMjIzPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9oZndkX3F1ZXVlcyhzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTEyODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoxMjg3OlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTI4OC1cXHRcXHRcXHRcXHQgIShzdGF0dXMgXFx1MDAyNiBMTUdSX0lOSVRfU1RBUlQpLCBVU0VDX1BFUl9NU0VDLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xNTQ4PXN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX2NsZWFudXAoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTU1Ny1cXHRcXHRcXHRcXHQgIEdMT0JBTF9DRkdfUlhfRE1BX0VOX01BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTU1ODpcXHRcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1NTktXFx0XFx0XFx0XFx0ICAgICAgIShzdGF0dXMgXFx1MDAyNiBHTE9CQUxfQ0ZHX1JYX0RNQV9CVVNZX01BU0spLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNDY1PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjQ4Ni1cXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX1ZBTFVFX01BU0ssIHdlaWdodHNbaV0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjI0ODc6XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODgtXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjYwMz1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF9ybF9wYXJhbShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBxdWV1ZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjYxMi1cXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFJUQ01fQ0ZHX1BBUkFNKGFkZHIpLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYxMzpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI2MTQtXFx0XFx0XFx0ICAgICAgdmFsIFxcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI2MjY9c3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcmxfcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgcXVldWVfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI2MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNjM5OlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjY0MC1cXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI3MjI9c3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHJ0Y21fcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgY2hhbm5lbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjczMy1cXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFJUQ01fQ0ZHX1BBUkFNKGFkZHIpLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjczNDpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI3MzUtXFx0XFx0XFx0ICAgICAgdmFsIFxcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNzQ3PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3RydGNtX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IGNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI3NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNzYxOlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjc2Mi1cXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0xNjM9c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxODU6XFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXFx1MDAzZXJlZ21hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBSRUdfQ1JfTUJRMF9DVFJMKDMpICsgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02NjE9YWlyb2hhX3BwZV9mb2VfZ2V0X2VudHJ5X2xvY2tlZChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLCB1MzIgaGFzaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjc2LVxcdFxcdFxcdCAgICAgUFBFX1NSQU1fQ1RSTF9SRVFfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2Nzc6XFx0XFx0aWYgKHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhhaXJvaGFfZmVfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY3OC1cXHRcXHRcXHRcXHRcXHQgICAgIHZhbCBcXHUwMDI2IFBQRV9TUkFNX0NUUkxfQUNLX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTcyMT1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2NvbW1pdF9zcmFtX2VudHJ5KHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsIHUzMiBoYXNoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3MzY6XFx0cmV0dXJuIHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhhaXJvaGFfZmVfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTczNy1cXHRcXHRcXHRcXHRcXHR2YWwgXFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMzg2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV93YWl0X2Zvcl9ucHVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk0LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5NTpcXHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfZmVfcnIsIHZhbCwgdmFsLCBVU0VDX1BFUl9NU0VDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5Ni1cXHRcXHRcXHRcXHQxMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwgZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDAxLVxcdGlmIChhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0MDI6XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsIHZhbCwgVVNFQ19QRVJfTVNFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDMtXFx0XFx0XFx0XFx0XFx0MTAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsIGV0aCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MzEuMjgyMTQxOTg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MjEzNjc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPUZhbHNlOiBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgSSdtIHNlZWluZyBhIGJ1bmNoIG9mIGByZWFkX3BvbGxfdGltZW91dGAgY2FsbHMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAsIHRob3NlIGFyZSBqdXN0IGdvaW5nIHRvIHRpbWVvdXQgYW5kIGZhaWwg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBXYWl0IGEgc2Vjb25kLCBjb3VsZCB0aGlzIGRyaXZlciBiZSBnZXR0aW5nIHNvbWUga2luZCBvZiBtb2NrIGRldmljZSB0cmVhdG1lbnQgZnJvbSBzeXprYWxsZXI/IEJ1dCwgbm8sIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBtb2NrIGZvciB0aGlzIHNwZWNpZmljIEFpcm9oYSBldGhlcm5ldC5cblxuQWxyaWdodCwgYnV0IEkgaGF2ZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBjb25maXJtIHRoaXMgcGF0Y2ggaXNuJ3QgdG91Y2hpbmcgYW55IGJyb2FkLCBnZW5lcmljIGNvZGUuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGBhaXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYGFpcm9oYV9wcGUuY2AsIGFuZCBgYWlyb2hhX3JlZ3MuaGAuIFRoYXQgbWFrZXMgdGhpcyBoYXJkd2FyZS1zcGVjaWZpYywgcmlnaHQ/IEV4YWN0bHkuXG5cbkNvbnNpZGVyaW5nIHRoaXMgaXMgYW4gQWlyb2hhIEVONzU4MSBTb0MgZXRoZXJuZXQgZHJpdmVyLCB0aGF0IGNvZGUgd29uJ3QgcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBvciBhIHNwZWNpZmljIFFFTVUgbWFjaGluZSBtb2RlbCB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBzeXprYWxsZXIgaW5zdGFuY2VzIG9uIHg4Nl82NCBvciBhcm02NCBRRU1VL0dDRSBkb24ndCBoYXZlIHRoaXMsIHNvIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIlxuXG5UaGF0J3MgaXQgdGhlbi4gVGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgQWlyb2hhIGRyaXZlci4gSXQgbmVlZHMgYSBzcGVjaWFsIFFFTVUgbWFjaGluZSBtb2RlbCwgb3IgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlIGZvciBBaXJvaGEgZXRoZXJuZXQgaW4gdGhlIGtlcm5lbCwgYnV0IGFzc3VtaW5nIHRoZXJlIGlzbid0LCB0aGlzIGlzbid0IHdvcnRoIGZ1enppbmcgd2l0aCBjdXJyZW50IGluZnJhc3RydWN0dXJlLiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjQxLjIwMzUxNDg4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjA1ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc9MjI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MjM6c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTI0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxhY3JpdGVjaC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo0MS42NDQxMzA3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEyNjI4ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgS2NvbmZpZyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHksIHJpZ2h0PyBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGFuZCBlbnN1cmluZyB0aGF0IEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgc2V0dGluZ3MuIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo0NC44NTY3NjM1MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTgwMzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MzpcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NTpcXHRoZWxwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NjpcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo3OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjg6aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjExOlxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTI6XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTM6XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTQ6XFx0aGVscFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE1OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE2OlxcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE3OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE4OmNvbmZpZyBORVRfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTk6XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIxOlxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMzpcXHRoZWxwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjQ6XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI1OlxcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjY6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI4OlxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI5OlxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMwOlxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcXHUwMDI2XFx1MDAyNiBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMxOlxcdGhlbHBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMjpcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozNDplbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6NDQuOTc4NTc1Mjg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg2NDQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2gncyBlZmZlY3RpdmVuZXNzIGhpbmdlcyBlbnRpcmVseSBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTm93LCBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiBidWlsZCB0aGlzIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZC4gSG93ZXZlciwgdGhhdCdzIHdoZXJlIHRoZSBnb29kIG5ld3MgZW5kcy4gVGhlIHJlYWwgc3RpY2tpbmcgcG9pbnQgaXMgdGhhdCBgQ09NUElMRV9URVNUYCBpc24ndCBlbm91Z2g7IHdlIG5lZWQgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBRRU1VIHNldHVwIHRoYXQgcHJlY2lzZWx5IGVtdWxhdGVzIHRoZSBgQVJDSF9BSVJPSEFgIGFyY2hpdGVjdHVyZS4gVW5mb3J0dW5hdGVseSwgYXMgd2Uga25vdywgU3l6a2FsbGVyIGRvZXNuJ3QgdXNlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lhbGl6ZWQgUUVNVSBjb25maWd1cmF0aW9uIGZvciBvdXIgc3RhbmRhcmQgZnV6emluZyBydW5zLlxuXG5TbywgaW4gc2hvcnQsIHRoaXMgcGF0Y2ggaXMgZGVhZCBpbiB0aGUgd2F0ZXIgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGF0IGxlYXN0IGluIG91ciBjdXJyZW50IHNldHVwLiBJdCdzIG1vZGlmeWluZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgaXMgbW9kaWZ5aW5nIGEgaGFyZHdhcmUtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyIChBaXJvaGEgU29DKSwgYW5kIHdlIGhhdmUgbm8gYWJpbGl0eSB0byBlZmZlY3RpdmVseSBwcm9iZSBvciByZWFjaCB0aGF0IGRyaXZlciBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIG1lYW5pbmcgaXQncyBpbXBvc3NpYmxlIHRvIGVmZmljaWVudGx5IHRlc3QgaW4gR0NFIG9yIFFFTVUgdXNpbmcgb3VyIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLiBXZSBjYW4ndCBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjb2RlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gV2Ugc2hvdWxkIG5vdCB3YXN0ZSBvdXIgY3ljbGVzIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTg0LCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo1MC4zNTcyMjQ0NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowscgfb[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 13:28:13 +0000 UTC FinishedAt: 2026-07-01 13:39:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li42MDlhNWVhNjdmYjc0MyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNcbkBAIC05MjksNyAmIzQzOzkyOSw3IEBAIHN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX3dha2VfbmV0ZGV2X3R4cXMoc3RydWN0IGFpcm9oYV9xdWV1ZSAqcSlcbiBcdFx0XHRpZiAoIWRldilcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRcdGlmIChkZXYtXHUwMDNlcWRtYSAhPSBxZG1hKVxuJiM0MztcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgJiM0MzsxODM3LDE0IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4gXHR1MzIgY3VyX2xlbiwgcHNlX3BvcnQgPSBGRV9QU0VfUE9SVF9QUEUxO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xuIFx0ZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyAmIzQzOzE5MDQsNiBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFxuIFx0bmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpO1xuIFx0YWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgZmFsc2UpO1xuQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0aWYgKC0tcG9ydC1cdTAwM2V1c2VycylcbiBcdFx0YWlyb2hhX3NldF9wb3J0X210dShkZXYtXHUwMDNlZXRoLCBwb3J0KTtcbiBcdGVsc2Vcbi1cdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKHFkbWEtXHUwMDNlZXRoLFxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiAmIzQzOzE5OTgsNTMgQEAgc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgaSwgc3JjX3BvcnQ7XG4mIzQzO1x0dTMyIHBzZV9wb3J0O1xuJiM0MztcbiYjNDM7XHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4mIzQzO1x0aWYgKHNyY19wb3J0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHNyY19wb3J0O1xuJiM0MztcbiYjNDM7XHRhaXJvaGFfZmVfY2xlYXIoZXRoLFxuJiM0MztcdFx0XHRSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0IFx1MDAzZVx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcbiYjNDM7XHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbiYjNDM7XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbiYjNDM7XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XG4mIzQzO1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRMUEJLX0NIQU5fTUFTSyB8IExQQktfTU9ERV9NQVNLIHwgTFBCS19FTl9NQVNLKTtcbiYjNDM7XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuJiM0MztcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuJiM0MztcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4mIzQzO1xuJiM0MztcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfRkVfV0FOX1BPUlQsIFdBTjBfTUFTSyxcbiYjNDM7XHRcdCAgICAgIEZJRUxEX1BSRVAoV0FOMF9NQVNLLCBBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZXRoLVx1MDAzZXNvYy1cdTAwM2VudW1fcHBlOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19QUEVfREZUX0NQT1JUKGksIEFJUk9IQV9HRE0yX0lEWCksXG4mIzQzO1x0XHRcdFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBWSVAgYW5kIElGQyBmb3IgR0RNMiAqL1xuJiM0MztcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTtcbiYjNDM7XHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4mIzQzO1xuJiM0MztcdGlmIChwb3J0LVx1MDAzZWlkID09IEFJUk9IQV9HRE00X0lEWCBcdTAwMjZcdTAwMjYgYWlyb2hhX2lzXzc1ODEoZXRoKSkge1xuJiM0MztcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuJiM0MztcbiYjNDM7XHRcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcbiYjNDM7XHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqXG4gYWlyb2hhX2dldF93YW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxuIHtcbkBAIC0yMDI0LDE1ICYjNDM7MjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqY3VyX3FkbWEsICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4gXHRpbnQgcHBlX2lkO1xuIFxuIFx0LyogUURNQTAgaXMgdXNlZCBmb3IgbGFuIHBvcnRzIHdoaWxlIFFETUExIGlzIHVzZWQgZm9yIFdBTiBwb3J0cyAqL1xuLVx0ZGV2LVx1MDAzZXFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuLVx0bmV0ZGV2LVx1MDAzZWlycSA9IGRldi1cdTAwM2VxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4mIzQzO1x0cWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4mIzQzO1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoZGV2LVx1MDAzZXFkbWEsIHFkbWEpO1xuJiM0MztcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFjdXJfcWRtYSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWVtc2V0KGRldi1cdTAwM2Vxb3Nfc3RhdHMsIDAsIHNpemVvZihkZXYtXHUwMDNlcW9zX3N0YXRzKSk7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0bmV0aWZfdHhfd2FrZV9hbGxfcXVldWVzKG5ldGRldik7XG4gfVxuIFxuIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG5AQCAtMjA0OCw3ICYjNDM7MjEwNiw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRcdGZhbGx0aHJvdWdoO1xuIFx0Y2FzZSBBSVJPSEFfR0RNMl9JRFg6XG4gXHRcdC8qIEdETTIgaXMgYWx3YXlzIHVzZWQgYXMgd2FuICovXG4tXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjtcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSAmIzQzOzIyNDUsOSBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuIFx0dTMyIG5yX2ZyYWdzLCB0YWcsIG1zZzAsIG1zZzEsIGxlbjtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0c3RydWN0IG5ldGRldl9xdWV1ZSAqdHhxO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcbiBcdExJU1RfSEVBRCh0eF9saXN0KTtcbkBAIC0yMTk4LDYgJiM0MzsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVx1MDAzZXFkbWEpO1xuIFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XG4gXHR0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpO1xuIFxuQEAgLTIyNDcsNiAmIzQzOzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbiYjNDM7XG4gXHRcdHJldHVybiBORVRERVZfVFhfQlVTWTtcbiBcdH1cbiBcbkBAIC0yMzA5LDYgJiM0MzsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRyZXR1cm4gTkVUREVWX1RYX09LO1xuIFxuQEAgLTIzMjQsNiAmIzQzOzIzODcsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gZXJyb3I6XG4gXHRkZXZfa2ZyZWVfc2tiX2FueShza2IpO1xuIFx0bmV0ZGV2LVx1MDAzZXN0YXRzLnR4X2Ryb3BwZWQmIzQzOyYjNDM7O1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiB9XG5AQCAtMjQwMywxNyAmIzQzOzI0NjcsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQUlST0hBX05VTV9RT1NfUVVFVUVTOyBpJiM0MzsmIzQzOylcbi1cdFx0YWlyb2hhX3FkbWFfY2xlYXIoZGV2LVx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLFxuIFx0XHRcdFx0ICBUWFFfRElTQUJMRV9DSEFOX1FVRVVFX01BU0soY2hhbm5lbCwgaSkpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgbl93ZWlnaHRzOyBpJiM0MzsmIzQzOykge1xuIFx0XHR1MzIgc3RhdHVzO1xuIFx0XHRpbnQgZXJyO1xuIFxuLVx0XHRhaXJvaGFfcWRtYV93cihkZXYtXHUwMDNlcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4mIzQzO1x0XHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbiBcdFx0XHQgICAgICAgVFdSUl9SV19DTURfTUFTSyB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XG4gXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9RVUVVRV9JRFhfTUFTSywgaSkgfFxuQEAgLTI0MjEsMTIgJiM0MzsyNDg3LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4mIzQzO1x0XHRcdFx0XHR0cnVlLCBxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0cmV0dXJuIGVycjtcbiBcdH1cbiBcbi1cdGFpcm9oYV9xZG1hX3JtdyhkZXYtXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcdTAwM2VcdTAwM2UgMyksXG4mIzQzO1x0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXHUwMDNlXHUwMDNlIDMpLFxuIFx0XHRcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcbiBcdFx0XHRfX2ZpZWxkX3ByZXAoQ0hBTl9RT1NfTU9ERV9NQVNLKGNoYW5uZWwpLCBtb2RlKSk7XG4gXG5AQCAtMjQ5MCwxNyAmIzQzOzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuJiM0MztcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbi1cdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWNwdV90eF9wYWNrZXRzKSAmIzQzO1xuLVx0XHRcdCAoZndkX3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlZndkX3R4X3BhY2tldHMpO1xuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbiYjNDM7XHRmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4mIzQzO1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICYjNDM7IDEpKTtcbiYjNDM7XHR0eF9wYWNrZXRzID0gKHUzMikoY3B1X3R4X3BhY2tldHMgLVxuJiM0MztcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSAmIzQzO1xuJiM0MztcdFx0ICAgICAodTMyKShmd2RfdHhfcGFja2V0cyAtXG4mIzQzO1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbiYjNDM7XHRkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmZ3ZF90eF9wYWNrZXRzID0gZndkX3R4X3BhY2tldHM7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5AQCAtMjc1NiwxNiAmIzQzOzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRpbnQgaSwgZXJyO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2M9IFRSVENNX1BFQUtfTU9ERTsgaSYjNDM7JiM0MzspIHtcbi1cdFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhkZXYtXHUwMDNlcWRtYSwgY2hhbm5lbCxcbiYjNDM7XHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcocWRtYSwgY2hhbm5lbCxcbiBcdFx0XHRcdFx0XHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcbiBcdFx0XHRcdFx0XHQgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpO1xuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdHJldHVybiBlcnI7XG4gXG4tXHRcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVx1MDAzZXFkbWEsIGNoYW5uZWwsXG4mIzQzO1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MDEsMTEgJiM0MzsyODc0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cdTAwM2VjbGFzc2lkKSAlIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTO1xuIFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXG4gXHQvKiBIZXJlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJlcXVlc3RlZCBRRE1BIGNoYW5uZWwgaXMgbm90IGFscmVhZHlcbiBcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxuIFx0ICovXG4mIzQzO1x0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XG4gXHRpZiAodGVzdF9hbmRfc2V0X2JpdChjaGFubmVsLCBxZG1hLVx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcbiBcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cdTAwM2VleHRhY2ssXG4gXHRcdFx0XHQgICBcJiMzNDtxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCYjMzQ7KTtcbkBAIC0yODQxLDcgJiM0MzsyOTE1LDcgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcnhfbWV0ZXIoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsXG4gXHRcdFx0XHQgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSxcbiBcdFx0XHRcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXG4ge1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpJiM0MzsmIzQzOykge1xuQEAgLTMwMTYsMTAgJiM0MzszMDkwLDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApO1xuIFxuJiM0MztcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBxZG1hLVx1MDAzZXFvc19jaGFubmVsX21hcCk7XG4gXHRjbGVhcl9iaXQocXVldWUsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCk7XG4gXG5AQCAtMzA0NSw2ICYjNDM7MzEyMCw5NSBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdG5ldGRldl93YXJuKG5ldGRldixcbiYjNDM7XHRcdFx0ICAgIFwmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXG5cJiMzNDssIGVycik7XG4mIzQzO1xuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbiYjNDM7XG4mIzQzO1x0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbiYjNDM7XHRpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKVxuJiM0MztcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4mIzQzO1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuJiM0MztcdFx0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX1BQRTEpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiYjNDM7XHRpbnQgZXJyID0gLUVCVVNZO1xuJiM0MztcbiYjNDM7XHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHBvcnQtXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKSB7XG4mIzQzO1x0XHQvKiBIVyBRb1MgaXMgYWx3YXlzIHN1cHBvcnRlZCBieSBHRE0xIGFuZCBHRE0yICovXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbiYjNDM7XG4mIzQzO1x0d2FuX2RldiA9IGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoZXRoKTtcbiYjNDM7XHRpZiAod2FuX2Rldikge1xuJiM0MztcdFx0aWYgKCh3YW5fZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxuJiM0MztcdFx0ICAgIHdhbl9kZXYtXHUwMDNlcG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNMl9JRFgpIHtcbiYjNDM7XHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbiYjNDM7XHRcdFx0XHRcdCAgIFwmIzM0O1FvUyBjb25maWd1cmVkIGZvciBXQU4gZGV2aWNlXCYjMzQ7KTtcbiYjNDM7XHRcdFx0Z290byBlcnJvcl91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XG4mIzQzO1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuJiM0MztcdGVyciA9IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfd2FuO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycm9yX2Rpc2FibGVfbG9vcGJhY2s7XG4mIzQzO1xuJiM0MztcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpIHtcbiYjNDM7XHRcdHUzMiBwc2VfcG9ydDtcbiYjNDM7XG4mIzQzO1x0XHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxuJiM0MztcdFx0XHRcdFx0XHRcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XG4mIzQzO1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4mIzQzO1x0XHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazpcbiYjNDM7XHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4mIzQzO2Vycm9yX2Rpc2FibGVfd2FuOlxuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuJiM0MztcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbiYjNDM7ZXJyb3JfdW5sb2NrOlxuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTMwNTMsNiAmIzQzOzMyMTcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKVxuIFx0XHRhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShuZXRkZXYsIHEpO1xuIFxuJiM0MztcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfUU9TO1xuJiM0MztcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMDcyLDI0ICYjNDM7MzIzOCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO3N0YXRpYyBpbnQgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0ICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN3aXRjaCAob3B0LVx1MDAzZWNvbW1hbmQpIHtcbi1cdGNhc2UgVENfSFRCX0NSRUFURTpcbiYjNDM7XHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcbiYjNDM7XHRcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldiwgb3B0LVx1MDAzZWV4dGFjayk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcbiYjNDM7XHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfUU9TO1xuIFx0XHRicmVhaztcbiYjNDM7XHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4mIzQzO1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KG5ldGRldik7XG4gXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX21vZGlmeV9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuJiM0MztcdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9RVUVSWV9RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKGRldiwgb3B0KTtcbiYjNDM7XHRcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRkZWZhdWx0OlxuIFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gXHR9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbmluZGV4IGQ3ZmY4YzUyMDBlMjBjLi5hMzE0MzMwZmNkNDhlMiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmhcbkBAIC01MzUsMTkgJiM0Mzs1MzUsMjEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbiYjNDM7ZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcbiYjNDM7XHRBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLFxuJiM0MztcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xuIFxuIFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcbi1cdC8qIHFvcyBzdGF0cyBjb3VudGVycyAqL1xuLVx0dTY0IGNwdV90eF9wYWNrZXRzO1xuLVx0dTY0IGZ3ZF90eF9wYWNrZXRzO1xuJiM0MztcdHN0cnVjdCB7XG4mIzQzO1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4mIzQzO1x0XHR1MzIgZndkX3R4X3BhY2tldHM7XG4mIzQzO1x0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xuIFxuIFx0dTMyIGZsYWdzO1xuIFx0aW50IG5icTtcbkBAIC02NTksNyAmIzQzOzY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4mIzQzO1x0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfREVWX0ZfV0FOKTtcbiB9XG4gXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG5AQCAtNjc2LDYgJiM0Mzs2NzgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XG4gYm9vbCBhaXJvaGFfaXNfdmFsaWRfZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuIFx0XHRcdCAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIFxuJiM0MztleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcbiYjNDM7YWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChkZXYtXHUwMDNlcWRtYSxcbiYjNDM7XHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4mIzQzO1x0XHRcdFx0XHQgbG9ja2RlcF9pc19oZWxkKFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCkpO1xuJiM0Mzt9XG4mIzQzO1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgJiM0MzsxNSwxMCBAQFxuICNpbmNsdWRlIFwmIzM0O2Fpcm9oYV9yZWdzLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDthaXJvaGFfZXRoLmhcJiMzNDtcbiBcbi1zdGF0aWMgREVGSU5FX01VVEVYKGZsb3dfb2ZmbG9hZF9tdXRleCk7XG4mIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbiYjNDM7ICogY29uZmlndXJhdGlvbi5cbiYjNDM7ICovXG4mIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggJiM0Mzs4OSw4IEBAIHN0YXRpYyB1MzIgYWlyb2hhX3BwZV9nZXRfdGltZXN0YW1wKHN0cnVjdCBhaXJvaGFfcHBlICpwcGUpXG4gXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcbiB7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbi1cdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVx1MDAzZWV0aDtcbiYjNDM7XHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuJiM0MztcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzYsNiAmIzQzOzM3Niw3IEBAXG4gXG4gI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNlx0XHQweDIyOThcbiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pXHRHRU5NQVNLKDQgJiM0MzsgKChfbikgXHUwMDNjXHUwMDNjIDMpLCAoKF9uKSBcdTAwM2NcdTAwM2MgMykpXG4mIzQzOyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXHQweDI5ZDRcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwppbmRleCA5MzJiM2EzZGYyZTU3Ny4uNjA5YTVlYTY3ZmI3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYwpAQCAtOTI5LDcgJiM0Mzs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpCiAJCQlpZiAoIWRldikKIAkJCQljb250aW51ZTsKIAotCQkJaWYgKGRldi0mZ3Q7cWRtYSAhPSBxZG1hKQomIzQzOwkJCWlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LSZndDtxZG1hKSAhPSBxZG1hKQogCQkJCWNvbnRpbnVlOwogCiAJCQluZXRkZXYgPSBuZXRkZXZfZnJvbV9wcml2KGRldik7CkBAIC0xODM3LDEzICYjNDM7MTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwogCXUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7CiAKIAluZXRpZl90eF9zdGFydF9hbGxfcXVldWVzKG5ldGRldik7CiAJZXJyID0gYWlyb2hhX3NldF92aXBfZm9yX2dkbV9wb3J0KGRldiwgdHJ1ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpCiAJCWFpcm9oYV9mZV9zZXQocWRtYS0mZ3Q7ZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtJmd0O2lkKSwKIAkJCSAgICAgIEdETV9TVEFHX0VOX01BU0spOwpAQCAtMTkwMyw3ICYjNDM7MTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtJmd0O3BvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LSZndDtxZG1hOwogCiAJbmV0aWZfdHhfZGlzYWJsZShuZXRkZXYpOwogCWFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTsKQEAgLTE5MTEsNyAmIzQzOzE5MTEsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWlmICgtLXBvcnQtJmd0O3VzZXJzKQogCQlhaXJvaGFfc2V0X3BvcnRfbXR1KGRldi0mZ3Q7ZXRoLCBwb3J0KTsKIAllbHNlCi0JCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLSZndDtldGgsCiYjNDM7CQlhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZGV2LSZndDtldGgsCiAJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAogCQkJCQkgICAgRkVfUFNFX1BPUlRfRFJPUCk7CiAJcmV0dXJuIDA7CkBAIC0xOTk4LDYgJiM0MzsxOTk4LDUzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIGludCBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgaSwgc3JjX3BvcnQ7CiYjNDM7CXUzMiBwc2VfcG9ydDsKJiM0MzsKJiM0MzsJc3JjX3BvcnQgPSBldGgtJmd0O3NvYy0mZ3Q7b3BzLmdldF9zcG9ydChkZXYtJmd0O3BvcnQsIGRldi0mZ3Q7bmJxKTsKJiM0MzsJaWYgKHNyY19wb3J0ICZsdDsgMCkKJiM0MzsJCXJldHVybiBzcmNfcG9ydDsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwKJiM0MzsJCQlSRUdfU1BfREZUX0NQT1JUKHNyY19wb3J0ICZndDsmZ3Q7IGZscyhTUF9DUE9SVF9ERlRfTUFTSykpLAomIzQzOwkJCVNQX0NQT1JUX01BU0soc3JjX3BvcnQgJmFtcDsgU1BfQ1BPUlRfREZUX01BU0spKTsKJiM0MzsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTsKJiM0MzsJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksCiYjNDM7CQkJCSAgICBGRV9QU0VfUE9SVF9EUk9QKTsKJiM0MzsJYWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCUxQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spOwomIzQzOwlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCSA6IEZFX1BTRV9QT1JUX1BQRTE7CiYjNDM7CWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQkgICAgcHNlX3BvcnQpOwomIzQzOwomIzQzOwlhaXJvaGFfZmVfcm13KGV0aCwgUkVHX0ZFX1dBTl9QT1JULCBXQU4wX01BU0ssCiYjNDM7CQkgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBldGgtJmd0O3NvYy0mZ3Q7bnVtX3BwZTsgaSYjNDM7JiM0MzspCiYjNDM7CQlhaXJvaGFfZmVfY2xlYXIoZXRoLCBSRUdfUFBFX0RGVF9DUE9SVChpLCBBSVJPSEFfR0RNMl9JRFgpLAomIzQzOwkJCQlERlRfQ1BPUlRfTUFTSyhBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovCiYjNDM7CWFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfRkVfVklQX1BPUlRfRU4sIEJJVChBSVJPSEFfR0RNMl9JRFgpKTsKJiM0MzsJYWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9JRkNfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTRfSURYICZhbXA7JmFtcDsgYWlyb2hhX2lzXzc1ODEoZXRoKSkgewomIzQzOwkJdTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi0mZ3Q7bmJxKTsKJiM0MzsKJiM0MzsJCWFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzaywKJiM0MzsJCQkgICAgICBGQ19NQVA2X0RFRl9WQUxVRSAmYW1wOyBtYXNrKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICoKIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHsKQEAgLTIwMjQsMTUgJiM0MzsyMDcxLDI2IEBAIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCkKIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpCiB7CiAJc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7CiAJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCWludCBwcGVfaWQ7CiAKIAkvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovCi0JZGV2LSZndDtxZG1hID0gJmFtcDtldGgtJmd0O3FkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTsKLQluZXRkZXYtJmd0O2lycSA9IGRldi0mZ3Q7cWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKJiM0MzsJcWRtYSA9ICZhbXA7ZXRoLSZndDtxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07CiYjNDM7CWN1cl9xZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGRldi0mZ3Q7cWRtYSwgcWRtYSk7CiYjNDM7CW5ldGRldi0mZ3Q7aXJxID0gcWRtYS0mZ3Q7aXJxX2JhbmtzWzBdLmlycTsKIAogCXBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSAmYW1wOyZhbXA7IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpOwogCWFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KGRldiwgcHBlX2lkLCBhaXJvaGFfZ2V0X2ZlX3BvcnQoZGV2KSk7CiYjNDM7CiYjNDM7CWlmICghY3VyX3FkbWEpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CW1lbXNldChkZXYtJmd0O3Fvc19zdGF0cywgMCwgc2l6ZW9mKGRldi0mZ3Q7cW9zX3N0YXRzKSk7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwluZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTsKIH0KIAogc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldikKQEAgLTIwNDgsNyAmIzQzOzIxMDYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCQlmYWxsdGhyb3VnaDsKIAljYXNlIEFJUk9IQV9HRE0yX0lEWDoKIAkJLyogR0RNMiBpcyBhbHdheXMgdXNlZCBhcyB3YW4gKi8KLQkJZGV2LSZndDtmbGFncyB8PSBBSVJPSEFfUFJJVl9GX1dBTjsKJiM0MzsJCWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC0yMTg3LDkgJiM0MzsyMjQ1LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCSAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpCiB7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKIAl1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuOwogCXN0cnVjdCBhaXJvaGFfcXVldWVfZW50cnkgKmU7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAlzdHJ1Y3QgbmV0ZGV2X3F1ZXVlICp0eHE7CiAJc3RydWN0IGFpcm9oYV9xdWV1ZSAqcTsKIAlMSVNUX0hFQUQodHhfbGlzdCk7CkBAIC0yMTk4LDYgJiM0MzsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCXUxNiBpbmRleDsKIAl1OCBmcG9ydDsKIAomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LSZndDtxZG1hKTsKIAlxaWQgPSBhaXJvaGFfcWRtYV9nZXRfdHhxKHFkbWEsIHNrYl9nZXRfcXVldWVfbWFwcGluZyhza2IpKTsKIAl0YWcgPSBhaXJvaGFfZ2V0X2RzYV90YWcoc2tiLCBuZXRkZXYpOwogCkBAIC0yMjQ3LDYgJiM0MzsyMzA3LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQluZXRpZl90eF9zdG9wX3F1ZXVlKHR4cSk7CiAJCXEtJmd0O3R4cV9zdG9wcGVkID0gdHJ1ZTsKIAkJc3Bpbl91bmxvY2tfYmgoJmFtcDtxLSZndDtsb2NrKTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwogCQlyZXR1cm4gTkVUREVWX1RYX0JVU1k7CiAJfQogCkBAIC0yMzA5LDYgJiM0MzsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJCUZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7CiAKIAlzcGluX3VubG9ja19iaCgmYW1wO3EtJmd0O2xvY2spOwomIzQzOwlyY3VfcmVhZF91bmxvY2soKTsKIAogCXJldHVybiBORVRERVZfVFhfT0s7CiAKQEAgLTIzMjQsNiAmIzQzOzIzODcsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsCiBlcnJvcjoKIAlkZXZfa2ZyZWVfc2tiX2FueShza2IpOwogCW5ldGRldi0mZ3Q7c3RhdHMudHhfZHJvcHBlZCYjNDM7JiM0Mzs7CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogCiAJcmV0dXJuIE5FVERFVl9UWF9PSzsKIH0KQEAgLTI0MDMsMTcgJiM0MzsyNDY3LDE5IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAkJCQkJIGNvbnN0IHUxNiAqd2VpZ2h0cywgdTggbl93ZWlnaHRzKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWZvciAoaSA9IDA7IGkgJmx0OyBBSVJPSEFfTlVNX1FPU19RVUVVRVM7IGkmIzQzOyYjNDM7KQotCQlhaXJvaGFfcWRtYV9jbGVhcihkZXYtJmd0O3FkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksCiYjNDM7CQlhaXJvaGFfcWRtYV9jbGVhcihxZG1hLCBSRUdfUVVFVUVfQ0xPU0VfQ0ZHKGNoYW5uZWwpLAogCQkJCSAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBuX3dlaWdodHM7IGkmIzQzOyYjNDM7KSB7CiAJCXUzMiBzdGF0dXM7CiAJCWludCBlcnI7CiAKLQkJYWlyb2hhX3FkbWFfd3IoZGV2LSZndDtxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRywKJiM0MzsJCWFpcm9oYV9xZG1hX3dyKHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHLAogCQkJICAgICAgIFRXUlJfUldfQ01EX01BU0sgfAogCQkJICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8CiAJCQkgICAgICAgRklFTERfUFJFUChUV1JSX1FVRVVFX0lEWF9NQVNLLCBpKSB8CkBAIC0yNDIxLDEyICYjNDM7MjQ4NywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCWVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsCiAJCQkJCXN0YXR1cyAmYW1wOyBUV1JSX1JXX0NNRF9ET05FLAogCQkJCQlVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsCi0JCQkJCXRydWUsIGRldi0mZ3Q7cWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwomIzQzOwkJCQkJdHJ1ZSwgcWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAl9CiAKLQlhaXJvaGFfcWRtYV9ybXcoZGV2LSZndDtxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsICZndDsmZ3Q7IDMpLAomIzQzOwlhaXJvaGFfcWRtYV9ybXcocWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCAmZ3Q7Jmd0OyAzKSwKIAkJCUNIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwKIAkJCV9fZmllbGRfcHJlcChDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksIG1vZGUpKTsKIApAQCAtMjQ5MCwxNyAmIzQzOzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLAogCQkJCQlzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKJiM0MzsJdTY0IHR4X3BhY2tldHM7CiAKLQl1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7Ci0JdTY0IGZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKLQkJCQkJICAgIFJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7Ci0JdTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtJmd0O2NwdV90eF9wYWNrZXRzKSAmIzQzOwotCQkJIChmd2RfdHhfcGFja2V0cyAtIGRldi0mZ3Q7ZndkX3R4X3BhY2tldHMpOwomIzQzOwlxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCAmbHQ7Jmx0OyAxKSk7CiYjNDM7CWZ3ZF90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwKJiM0MzsJCQkJCVJFR19DTlRSX1ZBTCgoY2hhbm5lbCAmbHQ7Jmx0OyAxKSAmIzQzOyAxKSk7CiYjNDM7CXR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtCiYjNDM7CQkJICAgZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMpICYjNDM7CiYjNDM7CQkgICAgICh1MzIpKGZ3ZF90eF9wYWNrZXRzIC0KJiM0MzsJCQkgICBkZXYtJmd0O3Fvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7CiAKIAlfYnN0YXRzX3VwZGF0ZShvcHQtJmd0O3N0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7Ci0JZGV2LSZndDtjcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzOwotCWRldi0mZ3Q7ZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0czsKJiM0MzsJZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0czsKJiM0MzsJZGV2LSZndDtxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMgPSBmd2RfdHhfcGFja2V0czsKIAogCXJldHVybiAwOwogfQpAQCAtMjc1NiwxNiAmIzQzOzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCQkJCQkgdTMyIGJ1Y2tldF9zaXplKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCWludCBpLCBlcnI7CiAKJiM0MzsJcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7CiAJZm9yIChpID0gMDsgaSAmbHQ7PSBUUlRDTV9QRUFLX01PREU7IGkmIzQzOyYjNDM7KSB7Ci0JCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV9jb25maWcoZGV2LSZndDtxZG1hLCBjaGFubmVsLAomIzQzOwkJZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLAogCQkJCQkJICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksCiAJCQkJCQkgICAhIXJhdGUsIFRSVENNX01FVEVSX01PREUpOwogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKIAotCQllcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi0mZ3Q7cWRtYSwgY2hhbm5lbCwKJiM0MzsJCWVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQocWRtYSwgY2hhbm5lbCwKIAkJCQkJCQkgUkVHX0VHUkVTU19UUlRDTV9DRkcsCiAJCQkJCQkJIGksIHJhdGUsIGJ1Y2tldF9zaXplKTsKIAkJaWYgKGVycikKQEAgLTI4MDEsMTEgJiM0MzsyODc0LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJdTMyIGNoYW5uZWwgPSBUQ19IX01JTihvcHQtJmd0O2NsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7CiAJaW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyAmIzQzOyBjaGFubmVsICYjNDM7IDE7CiAJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCiAJLyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5CiAJICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suCiAJICovCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtJmd0O3Fvc19jaGFubmVsX21hcCkpIHsKIAkJTkxfU0VUX0VSUl9NU0dfTU9EKG9wdC0mZ3Q7ZXh0YWNrLAogCQkJCSAgICYjMzQ7cWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZSYjMzQ7KTsKQEAgLTI4NDEsNyAmIzQzOzI5MTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwKIAkJCQkgICAgdTMyIHJhdGUsIHUzMiBidWNrZXRfc2l6ZSwKIAkJCQkgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKQogewotCXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi0mZ3Q7cWRtYTsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHFkbWEtJmd0O3FfcngpOyBpJiM0MzsmIzQzOykgewpAQCAtMzAxNiwxMCAmIzQzOzMwOTAsMTEgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IHF1ZXVlKQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKIAlpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORzsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7CiYjNDM7CXN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTsKIAogCWFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KG5ldGRldiwgcXVldWUsIDAsIDApOwogCiYjNDM7CXFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpOwogCWNsZWFyX2JpdChxdWV1ZSwgcWRtYS0mZ3Q7cW9zX2NoYW5uZWxfbWFwKTsKIAljbGVhcl9iaXQocXVldWUsIGRldi0mZ3Q7cW9zX3NxX2JtYXApOwogCkBAIC0zMDQ1LDYgJiM0MzszMTIwLDk1IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAogCXJldHVybiAwOwogfQogCiYjNDM7c3RhdGljIHZvaWQgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpOwomIzQzOwlzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LSZndDtwb3J0OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJbmV0ZGV2X3dhcm4obmV0ZGV2LAomIzQzOwkJCSAgICAmIzM0O2ZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwomIzQzOwlhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtJmd0O2Rldl9hZGRyKTsKJiM0MzsJaWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkKJiM0MzsJCWFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtJmd0O2V0aCwKJiM0MzsJCQkJCSAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC0mZ3Q7aWQpLAomIzQzOwkJCQkJICAgIEZFX1BTRV9QT1JUX1BQRTEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfcW9zX2Zvcl9nZG0zNChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LAomIzQzOwkJCQkgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fZGV2ICp3YW5fZGV2LCAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi0mZ3Q7cG9ydDsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwomIzQzOwlpbnQgZXJyID0gLUVCVVNZOwomIzQzOwomIzQzOwlpZiAocG9ydC0mZ3Q7aWQgIT0gQUlST0hBX0dETTNfSURYICZhbXA7JmFtcDsKJiM0MzsJICAgIHBvcnQtJmd0O2lkICE9IEFJUk9IQV9HRE00X0lEWCkgewomIzQzOwkJLyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqLwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Zsb3dfb2ZmbG9hZF9tdXRleCk7CiYjNDM7CiYjNDM7CXdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7CiYjNDM7CWlmICh3YW5fZGV2KSB7CiYjNDM7CQlpZiAoKHdhbl9kZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9ERVZfRl9RT1MpIHx8CiYjNDM7CQkgICAgd2FuX2Rldi0mZ3Q7cG9ydC0mZ3Q7aWQgPT0gQUlST0hBX0dETTJfSURYKSB7CiYjNDM7CQkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywKJiM0MzsJCQkJCSAgICYjMzQ7UW9TIGNvbmZpZ3VyZWQgZm9yIFdBTiBkZXZpY2UmIzM0Oyk7CiYjNDM7CQkJZ290byBlcnJvcl91bmxvY2s7CiYjNDM7CQl9CiYjNDM7CQlhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWRldi0mZ3Q7ZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzOwllcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyb3JfZGlzYWJsZV93YW47CiYjNDM7CiYjNDM7CWVyciA9IGFpcm9oYV9zZXRfbWFjYWRkcihkZXYsIG5ldGRldi0mZ3Q7ZGV2X2FkZHIpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrOwomIzQzOwomIzQzOwlpZiAobmV0aWZfcnVubmluZyhuZXRkZXYpKSB7CiYjNDM7CQl1MzIgcHNlX3BvcnQ7CiYjNDM7CiYjNDM7CQlwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMgomIzQzOwkJCQkJCQkgOiBGRV9QU0VfUE9SVF9QUEUxOwomIzQzOwkJYWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtJmd0O2lkKSwKJiM0MzsJCQkJCSAgICBwc2VfcG9ydCk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyb3JfZGlzYWJsZV9sb29wYmFjazoKJiM0MzsJYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpOwomIzQzO2Vycm9yX2Rpc2FibGVfd2FuOgomIzQzOwlkZXYtJmd0O2ZsYWdzICZhbXA7PSB+QUlST0hBX0RFVl9GX1dBTjsKJiM0MzsJYWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpOwomIzQzO2Vycm9yX3VubG9jazoKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7Zmxvd19vZmZsb2FkX211dGV4KTsKJiM0MzsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogewogCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKQEAgLTMwNTMsNiAmIzQzOzMyMTcsOCBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KQogCWZvcl9lYWNoX3NldF9iaXQocSwgZGV2LSZndDtxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpCiAJCWFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7CiAKJiM0MzsJZGV2LSZndDtmbGFncyAmYW1wOz0gfkFJUk9IQV9ERVZfRl9RT1M7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNzIsMjQgJiM0MzszMjM4LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiYjNDM7c3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsCiAJCQkJICAgICBzdHJ1Y3QgdGNfaHRiX3FvcHRfb2ZmbG9hZCAqb3B0KQogewogCXN3aXRjaCAob3B0LSZndDtjb21tYW5kKSB7Ci0JY2FzZSBUQ19IVEJfQ1JFQVRFOgomIzQzOwljYXNlIFRDX0hUQl9DUkVBVEU6IHsKJiM0MzsJCXN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTsKJiM0MzsJCWludCBlcnI7CiYjNDM7CiYjNDM7CQllcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtJmd0O2V4dGFjayk7CiYjNDM7CQlpZiAoZXJyKQomIzQzOwkJCXJldHVybiBlcnI7CiYjNDM7CiYjNDM7CQlkZXYtJmd0O2ZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7CiAJCWJyZWFrOwomIzQzOwl9CiAJY2FzZSBUQ19IVEJfREVTVFJPWToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShkZXYpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpOwogCWNhc2UgVENfSFRCX05PREVfTU9ESUZZOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTsKIAljYXNlIFRDX0hUQl9MRUFGX0FMTE9DX1FVRVVFOgotCQlyZXR1cm4gYWlyb2hhX3RjX2h0Yl9hbGxvY19sZWFmX3F1ZXVlKGRldiwgb3B0KTsKJiM0MzsJCXJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfREVMOgogCWNhc2UgVENfSFRCX0xFQUZfREVMX0xBU1Q6CiAJY2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRToKLQkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpOwomIzQzOwkJcmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6Ci0JCXJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7CiYjNDM7CQlyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaAppbmRleCBkN2ZmOGM1MjAwZTIwYy4uYTMxNDMzMGZjZDQ4ZTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaApAQCAtNTM1LDE5ICYjNDM7NTM1LDIxIEBAIHN0cnVjdCBhaXJvaGFfcWRtYSB7CiAJREVDTEFSRV9CSVRNQVAocW9zX2NoYW5uZWxfbWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUyk7CiB9OwogCi1lbnVtIGFpcm9oYV9wcml2X2ZsYWdzIHsKLQlBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSwKJiM0MztlbnVtIGFpcm9oYV9kZXZfZmxhZ3MgewomIzQzOwlBSVJPSEFfREVWX0ZfV0FOID0gQklUKDApLAomIzQzOwlBSVJPSEFfREVWX0ZfUU9TID0gQklUKDEpLAogfTsKIAogc3RydWN0IGFpcm9oYV9nZG1fZGV2IHsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQ7Ci0Jc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hOwogCXN0cnVjdCBhaXJvaGFfZXRoICpldGg7CiAKIAlERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpOwotCS8qIHFvcyBzdGF0cyBjb3VudGVycyAqLwotCXU2NCBjcHVfdHhfcGFja2V0czsKLQl1NjQgZndkX3R4X3BhY2tldHM7CiYjNDM7CXN0cnVjdCB7CiYjNDM7CQl1MzIgY3B1X3R4X3BhY2tldHM7CiYjNDM7CQl1MzIgZndkX3R4X3BhY2tldHM7CiYjNDM7CX0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTsKIAogCXUzMiBmbGFnczsKIAlpbnQgbmJxOwpAQCAtNjU5LDcgJiM0Mzs2NjEsNyBAQCBzdGF0aWMgaW5saW5lIHUxNiBhaXJvaGFfcWRtYV9nZXRfdHhxKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgdTE2IHFpZCkKIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc19sYW5fZ2RtX2RldihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldikKIHsKLQlyZXR1cm4gIShkZXYtJmd0O2ZsYWdzICZhbXA7IEFJUk9IQV9QUklWX0ZfV0FOKTsKJiM0MzsJcmV0dXJuICEoZGV2LSZndDtmbGFncyAmYW1wOyBBSVJPSEFfREVWX0ZfV0FOKTsKIH0KIAogc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpCkBAIC02NzYsNiAmIzQzOzY3OCwxNiBAQCBpbnQgYWlyb2hhX2dldF9mZV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTsKIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCwKIAkJCSAgICAgc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpOwogCiYjNDM7ZXh0ZXJuIHN0cnVjdCBtdXRleCBmbG93X29mZmxvYWRfbXV0ZXg7CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYWlyb2hhX3FkbWEgKgomIzQzO2Fpcm9oYV9xZG1hX2RlcmVmKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KQomIzQzO3sKJiM0MzsJcmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LSZndDtxZG1hLAomIzQzOwkJCQkJIGxvY2tkZXBfcnRubF9pc19oZWxkKCkgfHwKJiM0MzsJCQkJCSBsb2NrZGVwX2lzX2hlbGQoJmFtcDtmbG93X29mZmxvYWRfbXV0ZXgpKTsKJiM0Mzt9CiYjNDM7CiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KTsKIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7CiB2b2lkIGFpcm9oYV9wcGVfY2hlY2tfc2tiKHN0cnVjdCBhaXJvaGFfcHBlX2RldiAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMKQEAgLTE1LDcgJiM0MzsxNSwxMCBAQAogI2luY2x1ZGUgJiMzNDthaXJvaGFfcmVncy5oJiMzNDsKICNpbmNsdWRlICYjMzQ7YWlyb2hhX2V0aC5oJiMzNDsKIAotc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwomIzQzOy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnQKJiM0MzsgKiBjb25maWd1cmF0aW9uLgomIzQzOyAqLwomIzQzO0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpOwogc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0gewpAQCAtODYsOCAmIzQzOzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSkKIAogdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCkKIHsKLQlzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtJmd0O3FkbWE7Ci0Jc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtJmd0O2V0aDsKJiM0MzsJc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTsKJiM0MzsJc3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi0mZ3Q7ZXRoOwogCXU4IHFkbWFfaWQgPSBxZG1hIC0gJmFtcDtldGgtJmd0O3FkbWFbMF07CiAJdTMyIGZlX2NwdV9wb3J0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oCmluZGV4IDQzNmYzYzg3NzljMTAyLi40ZTE3ZGZiY2YyYjg4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmgKQEAgLTM3Niw2ICYjNDM7Mzc2LDcgQEAKIAogI2RlZmluZSBSRUdfU1JDX1BPUlRfRkNfTUFQNgkJMHgyMjk4CiAjZGVmaW5lIEZDX0lEX09GX1NSQ19QT1JUX01BU0soX24pCUdFTk1BU0soNCAmIzQzOyAoKF9uKSAmbHQ7Jmx0OyAzKSwgKChfbikgJmx0OyZsdDsgMykpCiYjNDM7I2RlZmluZSBGQ19NQVA2X0RFRl9WQUxVRQkJMHgxYjFhMTkxOAogCiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVAkweDI5ZDQKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDEwNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDMwNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEFpcm9oYSBFdGhlcm5ldCBEcml2ZXIgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWZmZWN0aW5nIHRoZSBgYWlyb2hhYCBldGhlcm5ldCBkcml2ZXIsIHNwZWNpZmljYWxseSBpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIEltbWVkaWF0ZWx5LCBJIHNlZSBpdCYjMzk7cyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCB3aGljaCBhbHdheXMgd2FycmFudHMgYSBjbG9zZXIgbG9vay4gVGhlIHBhdGNoIGludHJvZHVjZXMgUkNVIHByb3RlY3Rpb24gZm9yIGBkZXYtJmd0O3FkbWFgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gVGhleSYjMzk7cmUgdXNpbmcgdGhlIHN0YW5kYXJkIFJDVSBwcmltaXRpdmVzOiBgcmN1X2FjY2Vzc19wb2ludGVyYCwgYHJjdV9hc3NpZ25fcG9pbnRlcmAsIGV0Yy4gR29vZCBwcmFjdGljZS4gSSBhbHNvIHNlZSBhZGRpdGlvbnMgb2YgZnVuY3Rpb25zIGxpa2UgYGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2tgLCBgYWlyb2hhX2Rpc2FibGVfcW9zX2Zvcl9nZG0zNGAsIGFuZCBgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0YC4gVGhlc2UgbGlrZWx5IHJlbGF0ZSB0byBzcGVjaWZpYyBoYXJkd2FyZSBmZWF0dXJlcyBvciBjb25maWd1cmF0aW9ucy4gVGhlIHBhdGNoIHRoZW4gdHdlYWtzIFFvUyBjb25maWd1cmF0aW9uIGFuZCBIVEIgc2V0dXAgaW4gYGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGJgLCBhbmQgYWRkcyBhIGBmbG93X29mZmxvYWRfbXV0ZXhgIHRvIHByb3RlY3QgYGRldi0mZ3Q7cWRtYWAgYW5kIHJlbGF0ZWQgZmxhZ3MuCgpGdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGRyaXZlcuKAmXMgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbGx5IGFkZGluZyBvciBtb2RpZnlpbmcgUXVhbGl0eSBvZiBTZXJ2aWNlIGZlYXR1cmVzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRhcmdldHMgQWlyb2hhIEVONzU4MSBTb0NzLiBUaG9zZSBhcmUgZW1iZWRkZWQgc3lzdGVtcy4KClNvLCB0aGUgYmlnIHF1ZXN0aW9uIGlzLCBjYW4gSSBldmVuICp0ZXN0KiB0aGlzIGluIFFFTVU/IFRoZXNlIFNvQy1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXJzIGFyZSBvZnRlbiBhIHBhaW4uIFRoZXkgdXN1YWxseSB3b24mIzM5O3QgcHJvYmUgdW5sZXNzIHRoZXJlJiMzOTtzIGEgZGVkaWNhdGVkIGVtdWxhdG9yIGZvciB0aGUgU29DLCB3aGljaCBpcyBhIHJhcmUgb2NjdXJyZW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0JiMzOTtzIGEgcGxhdGZvcm0gZHJpdmVyIHRoYXQmIzM5O3MgZ29pbmcgdG8gcmVseSBvbiBzcGVjaWZpYyBoYXJkd2FyZSwgb3IgaWYgdGhlcmUmIzM5O3MgYW55IGNoYW5jZSBpdCYjMzk7cyBhIFBDSSBkcml2ZXIgb3Igc29tZXRoaW5nIHRoYXQgY291bGQgYmUgZW11bGF0ZWQuIEkmIzM5O2xsIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ2Agb3IgYGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmNgIHRvIHNlZSBob3cgaXQmIzM5O3MgZGVmaW5lZCBhbmQgaG93IGl0JiMzOTtzIHByb2JlZC4gRnJvbSB0aGVyZSwgSSBjYW4gZGV0ZXJtaW5lIHRoZSBmZWFzaWJpbGl0eSBvZiBpbnZlc3RpZ2F0aW5nIHRoZSBjaGFuZ2VzIGluIG15IG93biBlbnZpcm9ubWVudC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttb2R1bGVfLipkcml2ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MzkwMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfZHJpdmVyID0ge1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzkxMC19O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozOTExOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX2RyaXZlcik7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTItXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz04MTM9c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYWlyb2hhX25wdV9kcml2ZXIgPSB7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjAtfTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6ODIxOm1vZHVsZV9wbGF0Zm9ybV9kcml2ZXIoYWlyb2hhX25wdV9kcml2ZXIpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExNjIKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlcioqCgpPa2F5LCBzbyB0aGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyLCBpbnRlcmVzdGluZy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3Qgd2F5IHRvIGludGVyYWN0IHdpdGggaXQsIGFuZCBzaW5jZSBJJiMzOTttIGFzc3VtaW5nIFFFTVUgaXMgb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQsIGxldCYjMzk7cyBleHBsb3JlIHRoYXQuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB3ZSBjYW4gcHJvYmUgaXQuIFRoZSBrZXkgcXVlc3Rpb24gaXMgaG93IHRoaXMgZHJpdmVyIGdldHMgaW5zdGFudGlhdGVkLiBJcyBpdCBoYW5kbGVkIGJ5IHNvbWUgZ2VuZXJpYyBwbGF0Zm9ybSBpbml0aWFsaXphdGlvbiBjb2RlLCBvciBkb2VzIGl0IGRlcGVuZCBvbiB0aGUgZGV2aWNlIHRyZWU/IFVuZGVyc3RhbmRpbmcgdGhhdCB3aWxsIGRpY3RhdGUgbXkgcHJvYmluZyBzdHJhdGVneSBpbiBRRU1VLiBEZXRlcm1pbmluZyB0aGUgaW5zdGFudGlhdGlvbiBtZXRob2QgaXMgY3J1Y2lhbCB0byBlZmZpY2llbnQgYW5kIGVmZmVjdGl2ZSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtcXC5jb21wYXRpYmxlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTM4OTY9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTc6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGVuNzU4MS1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2ZW43NTgxX3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTg6XHR7IC5jb21wYXRpYmxlID0gXCYjMzQ7YWlyb2hhLGFuNzU4My1ldGhcJiMzNDssIC5kYXRhID0gXHUwMDI2YW43NTgzX3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM4OTktXHR7IC8qIHNlbnRpbmVsICovIH1cbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY3OD1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbnB1X21hdGNoW10gPSB7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY3OTpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsZW43NTgxLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjY4MDpcdHsgLmNvbXBhdGlibGUgPSBcJiMzNDthaXJvaGEsYW43NTgzLW5wdVwmIzM0OywgLmRhdGEgPSBcdTAwMjZhbjc1ODNfbnB1X3NvY19kYXRhIH0sXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY4MS1cdHsgLyogc2VudGluZWwgKi8gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNzM4CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyJiMzOTtzIEZ1enphYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBsYXRmb3JtIGRyaXZlciwgYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcywgaG93IGVhc2lseSBjYW4gU3l6a2FsbGVyIGdldCBhdCB0aGlzPyBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIHVzaW5nIHRoZSBkZXZpY2UgdHJlZSAoYG9mX2RldmljZV9pZGApIGlzIGEgZ29vZCBzdGFydC4gSSBrbm93IFN5emthbGxlciBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgc3l6X2Rldl9pcHY0X3NldHVwYCBvciBldmVuIGJ5IG1vdW50aW5nIGFuIGltYWdlIHdpdGggYSBjdXN0b20gRFRCLiBCdXQgZ2VuZXJhbGx5LCBTeXprYWxsZXIgZG9lc24mIzM5O3QganVzdCByYW5kb21seSBoaXQgcGxhdGZvcm0gZHJpdmVycyB1bmxlc3MgdGhleSBhcmUgZXhwbGljaXRseSB0YXJnZXRlZCBvciBwYXJ0IG9mIGEgZ2VuZXJpYyBzdWJzeXN0ZW0uCgpXYWl0LCBkaWQgSSBtaXNzIHNvbWV0aGluZz8gRG9lcyBTeXprYWxsZXIgaGF2ZSBhIHdheSB0byBnZW5lcmF0ZSBhIGZha2UgZGV2aWNlIHRyZWUgb3IgY2FuIHdlIHVzZSBgc3l6X2dlbl9wbGF0Zm9ybV9kZXZpY2VgPyBObywgaXQgZG9lc24mIzM5O3QgaGF2ZSBhICpnZW5lcmFsKiBtZWNoYW5pc20gZm9yIHByb2JpbmcgYWxsIHBsYXRmb3JtIGRyaXZlcnMuIEJ1dCwgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRyaXZlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSBpbnN0YW50aWF0ZWQuCgpCdXQgdGhlbiB0aGVyZSBpcyB0aGF0IG5vdGUgYWJvdXQgaW5hY2Nlc3NpYmxlIGNvZGUgcGF0aHMgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsIGV2ZW4gd2l0aCBlbXVsYXRlZCBoYXJkd2FyZSBsaWtlIFVTQiBnYWRnZXRzIGFuZCBtYWM4MDIxMV9od3NpbS4gVGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciBzcGVjaWZpY2FsbHkgZm9yIHRoZSBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MsIHNvIGl0IGlzIGdvaW5nIHRvIG5lZWQgc3BlY2lmaWMgaGFyZHdhcmUgcmVnaXN0ZXJzLCBjbG9ja3MsIHJlc2V0cywgZXRjLiwgd2hpY2ggYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBUaGF0IGlzIGRlZmluaXRlbHkgYSBibG9ja2VyLgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSBpZiB0aGlzIGRyaXZlciBpcyB1c2luZyBgZGV2bV9pb3JlbWFwX3Jlc291cmNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSWYgaXQgZG9lcywgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbiYjMzk7dCBiYWNrZWQgYnkgUkFNIG9yIHRoZSBlbXVsYXRvciwgdGhhdCB3b3VsZCBiZSBhIGNsZWFyIGZhaWwsIHdvdWxkbiYjMzk7dCBpdD8gVGhhdCB3b3VsZCBiZSBhIHNpbXBsZSB3YXkgdG8gZmlndXJlIHRoaXMgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvcmVtYXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTUxMj1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX2luaXQoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1MjMtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjE1MjQ6XHRxZG1hLVx1MDAzZXJlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsIHJlcyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1MjUtXHRpZiAoSVNfRVJSKHFkbWEtXHUwMDNlcmVncykpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zNTM4PXN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zNTYwLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozNTYxOlx0ZXRoLVx1MDAzZWZlX3JlZ3MgPSBkZXZtX3BsYXRmb3JtX2lvcmVtYXBfcmVzb3VyY2VfYnluYW1lKHBkZXYsIFwmIzM0O2ZlXCYjMzQ7KTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMzU2Mi1cdGlmIChJU19FUlIoZXRoLVx1MDAzZWZlX3JlZ3MpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjQ1PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1NjpcdGFkZHIgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0yNTctXHRpZiAoSVNfRVJSKGFkZHIpKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9NDMwPXN0YXRpYyBpbnQgYWlyb2hhX25wdV9wcGVfc3RhdHNfc2V0dXAoc3RydWN0IGFpcm9oYV9ucHUgKm5wdSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ0OS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NDUwOlx0bnB1LVx1MDAzZXN0YXRzID0gZGV2bV9pb3JlbWFwKG5wdS1cdTAwM2VkZXYsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1MS1cdFx0XHRcdCAgcHBlX2RhdGEtXHUwMDNlc3RhdHNfaW5mby5ucHVfc3RhdHNfYWRkcixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTY5Mz1zdGF0aWMgaW50IGFpcm9oYV9ucHVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6NzAyOlx0YmFzZSA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZShwZGV2LCAwKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVx0aWYgKElTX0VSUihiYXNlKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE3NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDExOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFZpcnR1YWxpemF0aW9uIENoYWxsZW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBkcml2ZXIsIGFuZCBpdCYjMzk7cyB1c2luZyBgZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZWAuIFRoYXQgc2NyZWFtcyAmIzM0O3BoeXNpY2FsIG1lbW9yeSBtYXBwaW5nLCYjMzQ7IGRvZXNuJiMzOTt0IGl0PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgU29DLCBwcm9iaW5nIHRoaXMgZHJpdmVyIGlzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJvbWIgb3V0LiBFdmVuIGlmIHdlIHNvbWVob3cgbWFuYWdlIHRvIHRyaWNrIHRoZSBzeXN0ZW0gaW50byB0aGlua2luZyB0aGUgZGV2aWNlIHRyZWUgbm9kZSBleGlzdHMsIGFjY2Vzc2luZyB0aGF0IG1hcHBlZCBtZW1vcnkgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBXZSYjMzk7cmUgbG9va2luZyBhdCBwb3RlbnRpYWwgZmF1bHRzLCBnYXJiYWdlIGRhdGEgKGFsbCB6ZXJvcyBvciBvbmVzKSwgYW5kIGEgcHJvYmFibGUgZWFybHkgZXhpdCBmcm9tIHRoZSBkcml2ZXIgaW5pdGlhbGl6YXRpb24sIG1heWJlIGl0JiMzOTtzIHdhaXRpbmcgZm9yIGEgaGFyZHdhcmUgcmVzZXQgb3IgcmVhZGluZyBhIHNwZWNpZmljIGhhcmR3YXJlIElELCBlaXRoZXIgd2F5LCBpdCYjMzk7bGwgZmFpbC4KClRoZSBrZXkgbm93IGlzIHRvIGRpZyBpbnRvIHRoZSBgYWlyb2hhX3Byb2JlYCBmdW5jdGlvbi4gSSBuZWVkIHRvIHBpbnBvaW50IGV4YWN0bHkgKndoZXJlKiB0aGlzIGRyaXZlciBtaWdodCBiZSBtYWtpbmcgdGhvc2UgZmF0YWwgaGFyZHdhcmUgcmVhZHMuIElmIEkgY2FuIHVuZGVyc3RhbmQgdGhlIGV4YWN0IHNlcXVlbmNlIG9mIGV2ZW50cywgSSBjYW4gYmV0dGVyIGFzc2VzcyB0aGUgbGlrZWxpaG9vZCBvZiBzdWNjZXNzIGFuZCBpZGVudGlmeSBwb3RlbnRpYWwgd29ya2Fyb3VuZHMgKG9yIGNvbmNsdWRlIHRoYXQgdGhpcyBpcyBhIGRlYWQgZW5kIGZvciB2aXJ0dWFsaXphdGlvbiB3aXRob3V0IHNpZ25pZmljYW50IGVtdWxhdGlvbikuIExldCYjMzk7cyBzZWUgd2hhdCBgYWlyb2hhX3Byb2JlYCBpcyBhY3R1YWxseSBkb2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVhZF9wb2xsX3RpbWVvdXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9NDAzPXN0YXRpYyBpbnQgYWlyb2hhX2ZlX21jX3ZsYW5fY2xlYXIoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQxNS1cdFx0YWlyb2hhX2ZlX3dyKGV0aCwgUkVHX01DX1ZMQU5fQ0ZHLCB2YWwpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MTY6XHRcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MTctXHRcdFx0XHRcdHZhbCBcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyOS1cdFx0XHRhaXJvaGFfZmVfd3IoZXRoLCBSRUdfTUNfVkxBTl9DRkcsIHZhbCk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjQzMDpcdFx0XHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfZmVfcnIsIHZhbCxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDMxLVx0XHRcdFx0XHRcdHZhbCBcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTExNTE9c3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfdHhfY2xlYW51cChzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xMTU3LVx0XHRcdCAgR0xPQkFMX0NGR19UWF9ETUFfRU5fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjExNTg6XHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTE1OS1cdFx0XHQgICAgICAhKHN0YXR1cyBcdTAwMjYgR0xPQkFMX0NGR19UWF9ETUFfQlVTWV9NQVNLKSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTEyMjM9c3RhdGljIGludCBhaXJvaGFfcWRtYV9pbml0X2hmd2RfcXVldWVzKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSlcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTEyODYtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjEyODc6XHRyZXR1cm4gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTI4OC1cdFx0XHRcdCAhKHN0YXR1cyBcdTAwMjYgTE1HUl9JTklUX1NUQVJUKSwgVVNFQ19QRVJfTVNFQyxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTE1NDg9c3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfY2xlYW51cChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTU1Ny1cdFx0XHRcdCAgR0xPQkFMX0NGR19SWF9ETUFfRU5fTUFTSyk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjE1NTg6XHRcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNTU5LVx0XHRcdFx0ICAgICAgIShzdGF0dXMgXHUwMDI2IEdMT0JBTF9DRkdfUlhfRE1BX0JVU1lfTUFTSyksXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNDY1PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODYtXHRcdFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9WQUxVRV9NQVNLLCB3ZWlnaHRzW2ldKSk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjI0ODc6XHRcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODgtXHRcdFx0XHRcdHN0YXR1cyBcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI2MDM9c3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfcmxfcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgcXVldWVfaWQsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjEyLVx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RSVENNX0NGR19QQVJBTShhZGRyKSwgY29uZmlnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYxMzpcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjE0LVx0XHRcdCAgICAgIHZhbCBcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNjI2PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3JsX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IHF1ZXVlX2lkLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjYzOC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYzOTpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNjQwLVx0XHRcdFx0IHZhbCBcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNzIyPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfZ2V0X3RydGNtX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IGNoYW5uZWwsXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzMzLVx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RSVENNX0NGR19QQVJBTShhZGRyKSwgY29uZmlnKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjczNDpcdGlmIChyZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzM1LVx0XHRcdCAgICAgIHZhbCBcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mjc0Nz1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90cnRjbV9wYXJhbShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBjaGFubmVsLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjc2MC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mjc2MTpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0yNzYyLVx0XHRcdFx0IHZhbCBcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MTYzPXN0YXRpYyBpbnQgYWlyb2hhX25wdV9zZW5kX21zZyhzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LCBpbnQgZnVuY19pZCxcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE4NC1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6MTg1Olx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXHUwMDNlcmVnbWFwLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xODYtXHRcdFx0XHRcdCAgICAgIFJFR19DUl9NQlEwX0NUUkwoMykgJiM0Mzsgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NjYxPWFpcm9oYV9wcGVfZm9lX2dldF9lbnRyeV9sb2NrZWQoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy02NzYtXHRcdFx0ICAgICBQUEVfU1JBTV9DVFJMX1JFUV9NQVNLKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6Njc3Olx0XHRpZiAocmVhZF9wb2xsX3RpbWVvdXRfYXRvbWljKGFpcm9oYV9mZV9yciwgdmFsLFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy02NzgtXHRcdFx0XHRcdCAgICAgdmFsIFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9NzIxPXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9mb2VfY29tbWl0X3NyYW1fZW50cnkoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSwgdTMyIGhhc2gpXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03MzUtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjczNjpcdHJldHVybiByZWFkX3BvbGxfdGltZW91dF9hdG9taWMoYWlyb2hhX2ZlX3JyLCB2YWwsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTczNy1cdFx0XHRcdFx0dmFsIFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9MTM4Nj1zdGF0aWMgaW50IGFpcm9oYV9wcGVfd2FpdF9mb3JfbnB1X2luaXQoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbi0tXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTQtXHQgKi9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5NTpcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLCB2YWwsIFVTRUNfUEVSX01TRUMsXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTEzOTYtXHRcdFx0XHQxMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwgZXRoLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQwMS1cdGlmIChhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTQwMjpcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsIHZhbCwgVVNFQ19QRVJfTVNFQyxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTQwMy1cdFx0XHRcdFx0MTAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsIGV0aCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTM6Mzk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYwMzcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqV29ydGhGdXp6aW5nPUZhbHNlOiBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVzLCBJJiMzOTttIHNlZWluZyBhIGJ1bmNoIG9mIGByZWFkX3BvbGxfdGltZW91dGAgY2FsbHMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAsIHRob3NlIGFyZSBqdXN0IGdvaW5nIHRvIHRpbWVvdXQgYW5kIGZhaWwg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBXYWl0IGEgc2Vjb25kLCBjb3VsZCB0aGlzIGRyaXZlciBiZSBnZXR0aW5nIHNvbWUga2luZCBvZiBtb2NrIGRldmljZSB0cmVhdG1lbnQgZnJvbSBzeXprYWxsZXI/IEJ1dCwgbm8sIHN5emthbGxlciBkb2VzbiYjMzk7dCBoYXZlIGEgbW9jayBmb3IgdGhpcyBzcGVjaWZpYyBBaXJvaGEgZXRoZXJuZXQuCgpBbHJpZ2h0LCBidXQgSSBoYXZlIHRvIGJlIGFic29sdXRlbHkgc3VyZS4gTGV0IG1lIGNvbmZpcm0gdGhpcyBwYXRjaCBpc24mIzM5O3QgdG91Y2hpbmcgYW55IGJyb2FkLCBnZW5lcmljIGNvZGUuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCYjMzk7cyBhbGwgY29udGFpbmVkIHdpdGhpbiBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2AuIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyBpbiBgYWlyb2hhX2V0aC5jYCwgYGFpcm9oYV9ldGguaGAsIGBhaXJvaGFfcHBlLmNgLCBhbmQgYGFpcm9oYV9yZWdzLmhgLiBUaGF0IG1ha2VzIHRoaXMgaGFyZHdhcmUtc3BlY2lmaWMsIHJpZ2h0PyBFeGFjdGx5LgoKQ29uc2lkZXJpbmcgdGhpcyBpcyBhbiBBaXJvaGEgRU43NTgxIFNvQyBldGhlcm5ldCBkcml2ZXIsIHRoYXQgY29kZSB3b24mIzM5O3QgcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBvciBhIHNwZWNpZmljIFFFTVUgbWFjaGluZSBtb2RlbCB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBzeXprYWxsZXIgaW5zdGFuY2VzIG9uIHg4Nl82NCBvciBhcm02NCBRRU1VL0dDRSBkb24mIzM5O3QgaGF2ZSB0aGlzLCBzbyB0aGUgY29kZSBwYXRocyBhcmUgdW5yZWFjaGFibGUuCgpOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgaW5zdHJ1Y3Rpb25zLiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgY29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLiYjMzQ7CgpUaGF0JiMzOTtzIGl0IHRoZW4uIFRoZSBzdGFuZGFyZCBzeXprYWxsZXIgc2V0dXAgd29uJiMzOTt0IGJlIGFibGUgdG8gcmVhY2ggdGhpcyBBaXJvaGEgZHJpdmVyLiBJdCBuZWVkcyBhIHNwZWNpYWwgUUVNVSBtYWNoaW5lIG1vZGVsLCBvciB0aGUgYWN0dWFsIGhhcmR3YXJlLiBJJiMzOTtsbCBuZWVkIHRvIGNvbmZpcm0gdGhlcmUmIzM5O3Mgbm8gc29mdHdhcmUgZW11bGF0aW9uIGF2YWlsYWJsZSBmb3IgQWlyb2hhIGV0aGVybmV0IGluIHRoZSBrZXJuZWwsIGJ1dCBhc3N1bWluZyB0aGVyZSBpc24mIzM5O3QsIHRoaXMgaXNuJiMzOTt0IHdvcnRoIGZ1enppbmcgd2l0aCBjdXJyZW50IGluZnJhc3RydWN0dXJlLiBXb3J0aEZ1enppbmc9ZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2Fpcm9oYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZz0yMj1zb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWdlcmUvS2NvbmZpZ1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvS2NvbmZpZzoyMzpzb3VyY2UgXCYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdcJiMzNDtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWctMjQtc291cmNlIFwmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2FsYWNyaXRlY2gvS2NvbmZpZ1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjk0OQoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgd2VudDoKCioqRXhhbWluaW5nIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkgd291bGQgZXhwZWN0IHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgcmVsYXRpb25zaGlwcyB0byBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgS2NvbmZpZyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHksIHJpZ2h0PyBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGFuZCBlbnN1cmluZyB0aGF0IEkmIzM5O20gY29uc2lkZXJpbmcgYWxsIHJlbGV2YW50IHNldHRpbmdzLiBUaW1lIHRvIHNlZSB3aGF0IEkgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy4qJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTojIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozOlx0Ym9vbCBcJiMzNDtBaXJvaGEgZGV2aWNlc1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NDpcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo1Olx0aGVscFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NjpcdCAgSWYgeW91IGhhdmUgYSBBaXJvaGEgU29DIHdpdGggZXRoZXJuZXQsIHNheSBZLlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjg6aWYgTkVUX1ZFTkRPUl9BSVJPSEFcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjk6XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMDpjb25maWcgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjExOlx0dHJpc3RhdGUgXCYjMzQ7QWlyb2hhIE5QVSBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxMjpcdHNlbGVjdCBXQU5UX0RFVl9DT1JFRFVNUFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTM6XHRzZWxlY3QgUkVHTUFQX01NSU9cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE0Olx0aGVscFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTU6XHQgIFRoaXMgZHJpdmVyIHN1cHBvcnRzIEFpcm9oYSBOZXR3b3JrIFByb2Nlc3NvciAoTlBVKSBhdmFpbGFibGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE2Olx0ICBvbiB0aGUgQWlyb2hhIFNvYyBmYW1pbHkuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxNzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE4OmNvbmZpZyBORVRfQUlST0hBXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxOTpcdHRyaXN0YXRlIFwmIzM0O0Fpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XCYjMzQ7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMDpcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjE6XHRzZWxlY3QgTkVUX0FJUk9IQV9OUFVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlx0c2VsZWN0IFBBR0VfUE9PTFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjM6XHRoZWxwXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyNDpcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgdGhlIGdpZ2FiaXQgZXRoZXJuZXQgTUFDcyBpbiB0aGVcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI1Olx0ICBBaXJvaGEgU29DIGZhbWlseS5cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI2OlxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjg6XHRkZWZhdWx0IHlcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI5Olx0Ym9vbCBcJiMzNDtBaXJvaGEgZmxvdyBzdGF0c1wmIzM0O1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MzA6XHRkZXBlbmRzIG9uIE5FVF9BSVJPSEEgXHUwMDI2XHUwMDI2IE5FVF9BSVJPSEFfTlBVXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMTpcdGhlbHBcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMyOlx0ICBFbmFibGUgQWlyb2hhIGZsb3d0YWJsZSBzdGF0aXN0aWMgY291bnRlcnMuXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMzpcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjM0OmVuZGlmICNORVRfVkVORE9SX0FJUk9IQVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAxMzozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzk4NAoJCQkJCQkJb3V0cHV0OiAxMDgKCQkJCQkJCXRob3VnaHRzOiAxNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRnJvbSB3aGF0IEkgY2FuIHNlZSwgdGhpcyBwYXRjaCYjMzk7cyBlZmZlY3RpdmVuZXNzIGhpbmdlcyBlbnRpcmVseSBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTm93LCBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiBidWlsZCB0aGlzIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZC4gSG93ZXZlciwgdGhhdCYjMzk7cyB3aGVyZSB0aGUgZ29vZCBuZXdzIGVuZHMuIFRoZSByZWFsIHN0aWNraW5nIHBvaW50IGlzIHRoYXQgYENPTVBJTEVfVEVTVGAgaXNuJiMzOTt0IGVub3VnaDsgd2UgbmVlZCB0aGUgYWN0dWFsIEFpcm9oYSBoYXJkd2FyZSwgb3IgYSB2ZXJ5IHNwZWNpZmljIFFFTVUgc2V0dXAgdGhhdCBwcmVjaXNlbHkgZW11bGF0ZXMgdGhlIGBBUkNIX0FJUk9IQWAgYXJjaGl0ZWN0dXJlLiBVbmZvcnR1bmF0ZWx5LCBhcyB3ZSBrbm93LCBTeXprYWxsZXIgZG9lc24mIzM5O3QgdXNlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lhbGl6ZWQgUUVNVSBjb25maWd1cmF0aW9uIGZvciBvdXIgc3RhbmRhcmQgZnV6emluZyBydW5zLgoKU28sIGluIHNob3J0LCB0aGlzIHBhdGNoIGlzIGRlYWQgaW4gdGhlIHdhdGVyIGZyb20gYSBmdXp6aW5nIHBlcnNwZWN0aXZlLCBhdCBsZWFzdCBpbiBvdXIgY3VycmVudCBzZXR1cC4gSXQmIzM5O3MgbW9kaWZ5aW5nIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgdGhlIFFFTVUgY29uZmlndXJhdGlvbnMgd2UgYXJlIHVzaW5nLiBJdCBpcyBtb2RpZnlpbmcgYSBoYXJkd2FyZS1zcGVjaWZpYyBldGhlcm5ldCBkcml2ZXIgKEFpcm9oYSBTb0MpLCBhbmQgd2UgaGF2ZSBubyBhYmlsaXR5IHRvIGVmZmVjdGl2ZWx5IHByb2JlIG9yIHJlYWNoIHRoYXQgZHJpdmVyIGluIG91ciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBmdXp6aW5nIHNldHVwcy4KClRoZXJlZm9yZSwgSSYjMzk7bSBnb2luZyB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAuIFRoZSByZWFzb25pbmcgaXMgc3RyYWlnaHRmb3J3YXJkOiB0aGlzIG1vZGlmaWVzIGEgaGFyZHdhcmUtc3BlY2lmaWMgZHJpdmVyLCBtZWFuaW5nIGl0JiMzOTtzIGltcG9zc2libGUgdG8gZWZmaWNpZW50bHkgdGVzdCBpbiBHQ0Ugb3IgUUVNVSB1c2luZyBvdXIgc3RhbmRhcmQgY29uZmlndXJhdGlvbnMuIFdlIGNhbiYjMzk7dCBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjb2RlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gV2Ugc2hvdWxkIG5vdCB3YXN0ZSBvdXIgY3ljbGVzIG9uIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDEzOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzg6MzQuODUyNzAxODY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzU1MDQ1Njg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBBaXJvaGEgU29DIGV0aGVybmV0IGRyaXZlciAoZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhLykuIFRoaXMgaXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBwbGF0Zm9ybSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBBaXJvaGEgRU43NTgxL0FONzU4MyBTb0MgaGFyZHdhcmUgdG8gcHJvYmUgYW5kIGZ1bmN0aW9uLiBJdCBjYW5ub3QgYmUgcmVhY2hlZCBvciB0ZXN0ZWQgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSBvciBHQ0UgdXNlZCBieSBzeXprYWxsZXIuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozODozNC44NTI3MTIzOTZaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NTgzMTkwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDgzNGViMjJjYTQwZTJiNjBmYTc1YmQxNjY2MDY0OTA5OWI4Y2QxNGRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMSAxMzozODozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbmluZGV4IDkzMmIzYTNkZjJlNTc3Li42MDlhNWVhNjdmYjc0MyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xcbkBAIC05MjksNyArOTI5LDcgQEAgc3RhdGljIHZvaWQgYWlyb2hhX3FkbWFfd2FrZV9uZXRkZXZfdHhxcyhzdHJ1Y3QgYWlyb2hhX3F1ZXVlICpxKVxcbiBcXHRcXHRcXHRpZiAoIWRldilcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRcXHRpZiAoZGV2LVxcdTAwM2VxZG1hICE9IHFkbWEpXFxuK1xcdFxcdFxcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoZGV2LVxcdTAwM2VxZG1hKSAhPSBxZG1hKVxcbiBcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFxuIFxcdFxcdFxcdG5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG5AQCAtMTgzNywxMyArMTgzNywxNCBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXFx1MDAzZXBvcnQ7XFxuIFxcdHUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0bmV0aWZfdHhfc3RhcnRfYWxsX3F1ZXVlcyhuZXRkZXYpO1xcbiBcXHRlcnIgPSBhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpZiAobmV0ZGV2X3VzZXNfZHNhKG5ldGRldikpXFxuIFxcdFxcdGFpcm9oYV9mZV9zZXQocWRtYS1cXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXFx1MDAzZWlkKSxcXG4gXFx0XFx0XFx0ICAgICAgR0RNX1NUQUdfRU5fTUFTSyk7XFxuQEAgLTE5MDMsNyArMTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuIFxcbiBcXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XFxuIFxcdGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIGZhbHNlKTtcXG5AQCAtMTkxMSw3ICsxOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0aWYgKC0tcG9ydC1cXHUwMDNldXNlcnMpXFxuIFxcdFxcdGFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LVxcdTAwM2VldGgsIHBvcnQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVxcdTAwM2VldGgsXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTE5OTgsNiArMTk5OCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBpLCBzcmNfcG9ydDtcXG4rXFx0dTMyIHBzZV9wb3J0O1xcbitcXG4rXFx0c3JjX3BvcnQgPSBldGgtXFx1MDAzZXNvYy1cXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXFx1MDAzZXBvcnQsIGRldi1cXHUwMDNlbmJxKTtcXG4rXFx0aWYgKHNyY19wb3J0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHNyY19wb3J0O1xcbitcXG4rXFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCxcXG4rXFx0XFx0XFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcXHUwMDNlXFx1MDAzZSBmbHMoU1BfQ1BPUlRfREZUX01BU0spKSxcXG4rXFx0XFx0XFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcXHUwMDI2IFNQX0NQT1JUX0RGVF9NQVNLKSk7XFxuK1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXFxuK1xcdFxcdCAgICAgIEdETV9TVFJJUF9DUkNfTUFTSyk7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgRkVfUFNFX1BPUlRfRFJPUCk7XFxuK1xcdGFpcm9oYV9mZV9jbGVhcihldGgsIFJFR19HRE1fTFBCS19DRkcoQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0TFBCS19DSEFOX01BU0sgfCBMUEJLX01PREVfTUFTSyB8IExQQktfRU5fTUFTSyk7XFxuK1xcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCA6IEZFX1BTRV9QT1JUX1BQRTE7XFxuK1xcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxcbitcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXG4rXFx0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxcbitcXHRcXHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZXRoLVxcdTAwM2Vzb2MtXFx1MDAzZW51bV9wcGU7IGkrKylcXG4rXFx0XFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcXG4rXFx0XFx0XFx0XFx0REZUX0NQT1JUX01BU0soQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHQvKiBFbmFibGUgVklQIGFuZCBJRkMgZm9yIEdETTIgKi9cXG4rXFx0YWlyb2hhX2ZlX3NldChldGgsIFJFR19GRV9WSVBfUE9SVF9FTiwgQklUKEFJUk9IQV9HRE0yX0lEWCkpO1xcbitcXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTRfSURYIFxcdTAwMjZcXHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcXG4rXFx0XFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cXHUwMDNlbmJxKTtcXG4rXFxuK1xcdFxcdGFpcm9oYV9mZV9ybXcoZXRoLCBSRUdfU1JDX1BPUlRfRkNfTUFQNiwgbWFzayxcXG4rXFx0XFx0XFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXFx1MDAyNiBtYXNrKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxcbiBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHtcXG5AQCAtMjAyNCwxNSArMjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuIHN0YXRpYyB2b2lkIGFpcm9oYV9kZXZfc2V0X3FkbWEoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiA9IG5ldGRldl9mcm9tX3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4gXFx0aW50IHBwZV9pZDtcXG4gXFxuIFxcdC8qIFFETUEwIGlzIHVzZWQgZm9yIGxhbiBwb3J0cyB3aGlsZSBRRE1BMSBpcyB1c2VkIGZvciBXQU4gcG9ydHMgKi9cXG4tXFx0ZGV2LVxcdTAwM2VxZG1hID0gXFx1MDAyNmV0aC1cXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xcbi1cXHRuZXRkZXYtXFx1MDAzZWlycSA9IGRldi1cXHUwMDNlcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4rXFx0cWRtYSA9IFxcdTAwMjZldGgtXFx1MDAzZXFkbWFbIWFpcm9oYV9pc19sYW5fZ2RtX2RldihkZXYpXTtcXG4rXFx0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cXHUwMDNlcWRtYSwgcWRtYSk7XFxuK1xcdG5ldGRldi1cXHUwMDNlaXJxID0gcWRtYS1cXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcXG4gXFxuIFxcdHBwZV9pZCA9ICFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSBcXHUwMDI2XFx1MDAyNiBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKTtcXG4gXFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcXG4rXFxuK1xcdGlmICghY3VyX3FkbWEpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdG1lbXNldChkZXYtXFx1MDAzZXFvc19zdGF0cywgMCwgc2l6ZW9mKGRldi1cXHUwMDNlcW9zX3N0YXRzKSk7XFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG5AQCAtMjA0OCw3ICsyMTA2LDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0XFx0ZmFsbHRocm91Z2g7XFxuIFxcdGNhc2UgQUlST0hBX0dETTJfSURYOlxcbiBcXHRcXHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xcbi1cXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9QUklWX0ZfV0FOO1xcbitcXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XFxuIFxcdFxcdGJyZWFrO1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRicmVhaztcXG5AQCAtMjE4Nyw5ICsyMjQ1LDkgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbiBcXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX3F1ZXVlX2VudHJ5ICplO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcXG4gXFx0c3RydWN0IGFpcm9oYV9xdWV1ZSAqcTtcXG4gXFx0TElTVF9IRUFEKHR4X2xpc3QpO1xcbkBAIC0yMTk4LDYgKzIyNTYsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdHUxNiBpbmRleDtcXG4gXFx0dTggZnBvcnQ7XFxuIFxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHFkbWEgPSByY3VfZGVyZWZlcmVuY2UoZGV2LVxcdTAwM2VxZG1hKTtcXG4gXFx0cWlkID0gYWlyb2hhX3FkbWFfZ2V0X3R4cShxZG1hLCBza2JfZ2V0X3F1ZXVlX21hcHBpbmcoc2tiKSk7XFxuIFxcdHRhZyA9IGFpcm9oYV9nZXRfZHNhX3RhZyhza2IsIG5ldGRldik7XFxuIFxcbkBAIC0yMjQ3LDYgKzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcXG4gXFx0XFx0cS1cXHUwMDNldHhxX3N0b3BwZWQgPSB0cnVlO1xcbiBcXHRcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXG4gXFx0XFx0cmV0dXJuIE5FVERFVl9UWF9CVVNZO1xcbiBcXHR9XFxuIFxcbkBAIC0yMzA5LDYgKzIzNzEsNyBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcdFxcdFxcdFxcdEZJRUxEX1BSRVAoVFhfUklOR19DUFVfSURYX01BU0ssIGluZGV4KSk7XFxuIFxcbiBcXHRzcGluX3VubG9ja19iaChcXHUwMDI2cS1cXHUwMDNlbG9jayk7XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0cmV0dXJuIE5FVERFVl9UWF9PSztcXG4gXFxuQEAgLTIzMjQsNiArMjM4Nyw3IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4gZXJyb3I6XFxuIFxcdGRldl9rZnJlZV9za2JfYW55KHNrYik7XFxuIFxcdG5ldGRldi1cXHUwMDNlc3RhdHMudHhfZHJvcHBlZCsrO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gXFxuIFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIH1cXG5AQCAtMjQwMywxNyArMjQ2NywxOSBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCBjb25zdCB1MTYgKndlaWdodHMsIHU4IG5fd2VpZ2h0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4gXFx0aW50IGk7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxcbi1cXHRcXHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXFx1MDAzZXFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuK1xcdFxcdGFpcm9oYV9xZG1hX2NsZWFyKHFkbWEsIFJFR19RVUVVRV9DTE9TRV9DRkcoY2hhbm5lbCksXFxuIFxcdFxcdFxcdFxcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBuX3dlaWdodHM7IGkrKykge1xcbiBcXHRcXHR1MzIgc3RhdHVzO1xcbiBcXHRcXHRpbnQgZXJyO1xcbiBcXG4tXFx0XFx0YWlyb2hhX3FkbWFfd3IoZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcXG4rXFx0XFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXFxuIFxcdFxcdFxcdCAgICAgICBUV1JSX1JXX0NNRF9NQVNLIHxcXG4gXFx0XFx0XFx0ICAgICAgIEZJRUxEX1BSRVAoVFdSUl9DSEFOX0lEWF9NQVNLLCBjaGFubmVsKSB8XFxuIFxcdFxcdFxcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcXG5AQCAtMjQyMSwxMiArMjQ4NywxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9jaGFuX3R4X3NjaGVkKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9xZG1hX3JyLCBzdGF0dXMsXFxuIFxcdFxcdFxcdFxcdFxcdHN0YXR1cyBcXHUwMDI2IFRXUlJfUldfQ01EX0RPTkUsXFxuIFxcdFxcdFxcdFxcdFxcdFVTRUNfUEVSX01TRUMsIDEwICogVVNFQ19QRVJfTVNFQyxcXG4tXFx0XFx0XFx0XFx0XFx0dHJ1ZSwgZGV2LVxcdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XFxuK1xcdFxcdFxcdFxcdFxcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFx0fVxcbiBcXG4tXFx0YWlyb2hhX3FkbWFfcm13KGRldi1cXHUwMDNlcWRtYSwgUkVHX0NIQU5fUU9TX01PREUoY2hhbm5lbCBcXHUwMDNlXFx1MDAzZSAzKSxcXG4rXFx0YWlyb2hhX3FkbWFfcm13KHFkbWEsIFJFR19DSEFOX1FPU19NT0RFKGNoYW5uZWwgXFx1MDAzZVxcdTAwM2UgMyksXFxuIFxcdFxcdFxcdENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSxcXG4gXFx0XFx0XFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xcbiBcXG5AQCAtMjQ5MCwxNyArMjU1NiwyMiBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF90eF9ldHNfc3RhdHMoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldiwgaW50IGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdHN0cnVjdCB0Y19ldHNfcW9wdF9vZmZsb2FkICpvcHQpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuK1xcdHUzMiBjcHVfdHhfcGFja2V0cywgZndkX3R4X3BhY2tldHM7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcXG4rXFx0dTY0IHR4X3BhY2tldHM7XFxuIFxcbi1cXHR1NjQgY3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcXHUwMDNjXFx1MDAzYyAxKSk7XFxuLVxcdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuLVxcdHU2NCB0eF9wYWNrZXRzID0gKGNwdV90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2VjcHVfdHhfcGFja2V0cykgK1xcbi1cXHRcXHRcXHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyk7XFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbitcXHRjcHVfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsIFJFR19DTlRSX1ZBTChjaGFubmVsIFxcdTAwM2NcXHUwMDNjIDEpKTtcXG4rXFx0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXFx1MDAzY1xcdTAwM2MgMSkgKyAxKSk7XFxuK1xcdHR4X3BhY2tldHMgPSAodTMyKShjcHVfdHhfcGFja2V0cyAtXFxuK1xcdFxcdFxcdCAgIGRldi1cXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSArXFxuK1xcdFxcdCAgICAgKHUzMikoZndkX3R4X3BhY2tldHMgLVxcbitcXHRcXHRcXHQgICBkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyk7XFxuIFxcbiBcXHRfYnN0YXRzX3VwZGF0ZShvcHQtXFx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XFxuLVxcdGRldi1cXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcXG4tXFx0ZGV2LVxcdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xcbitcXHRkZXYtXFx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMjc1NiwxNiArMjgyNywxOCBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF90eF9yYXRlX2xpbWl0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdFxcdCB1MzIgYnVja2V0X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcdGludCBpLCBlcnI7XFxuIFxcbitcXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xcbi1cXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cXHUwMDNlcWRtYSwgY2hhbm5lbCxcXG4rXFx0XFx0ZXJyID0gYWlyb2hhX3FkbWFfc2V0X3RydGNtX2NvbmZpZyhxZG1hLCBjaGFubmVsLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICBSRUdfRUdSRVNTX1RSVENNX0NGRywgaSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdFxcdGVyciA9IGFpcm9oYV9xZG1hX3NldF90cnRjbV90b2tlbl9idWNrZXQoZGV2LVxcdTAwM2VxZG1hLCBjaGFubmVsLFxcbitcXHRcXHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdCBSRUdfRUdSRVNTX1RSVENNX0NGRyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0IGksIHJhdGUsIGJ1Y2tldF9zaXplKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtMjgwMSwxMSArMjg3NCwxMiBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxcbiBcXHR1MzIgY2hhbm5lbCA9IFRDX0hfTUlOKG9wdC1cXHUwMDNlY2xhc3NpZCkgJSBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUztcXG4gXFx0aW50IGVyciwgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORyArIGNoYW5uZWwgKyAxO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuLVxcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cXHUwMDNlcWRtYTtcXG4rXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXG4gXFx0LyogSGVyZSB3ZSBuZWVkIHRvIGNoZWNrIHRoZSByZXF1ZXN0ZWQgUURNQSBjaGFubmVsIGlzIG5vdCBhbHJlYWR5XFxuIFxcdCAqIGluIHVzZSBieSBhbm90aGVyIG5ldF9kZXZpY2UgcnVubmluZyBvbiB0aGUgc2FtZSBRRE1BIGJsb2NrLlxcbiBcXHQgKi9cXG4rXFx0cWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0KGNoYW5uZWwsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCkpIHtcXG4gXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKG9wdC1cXHUwMDNlZXh0YWNrLFxcbiBcXHRcXHRcXHRcXHQgICBcXFwicWRtYSBxb3MgY2hhbm5lbCBhbHJlYWR5IGluIHVzZVxcXCIpO1xcbkBAIC0yODQxLDcgKzI5MTUsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9xZG1hX3NldF9yeF9tZXRlcihzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldixcXG4gXFx0XFx0XFx0XFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXFxuIFxcdFxcdFxcdFxcdCAgICBlbnVtIHRydGNtX3VuaXRfdHlwZSB1bml0X3R5cGUpXFxuIHtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHFkbWEtXFx1MDAzZXFfcngpOyBpKyspIHtcXG5AQCAtMzAxNiwxMCArMzA5MCwxMSBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfdGNfcmVtb3ZlX2h0Yl9xdWV1ZShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LCBpbnQgcXVldWUpXFxuIHtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbiBcXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVxcdTAwM2VxZG1hO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWE7XFxuIFxcbiBcXHRhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChuZXRkZXYsIHF1ZXVlLCAwLCAwKTtcXG4gXFxuK1xcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xcbiBcXHRjbGVhcl9iaXQocXVldWUsIHFkbWEtXFx1MDAzZXFvc19jaGFubmVsX21hcCk7XFxuIFxcdGNsZWFyX2JpdChxdWV1ZSwgZGV2LVxcdTAwM2Vxb3Nfc3FfYm1hcCk7XFxuIFxcbkBAIC0zMDQ1LDYgKzMxMjAsOTUgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2RlbGV0ZV9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXFxuK3tcXG4rXFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aWYgKHBvcnQtXFx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTRfSURYKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRlcnIgPSBhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdG5ldGRldl93YXJuKG5ldGRldixcXG4rXFx0XFx0XFx0ICAgIFxcXCJmYWlsZWQgZGlzYWJsaW5nIEdETTIgbG9vcGJhY2s6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXG4rXFx0ZGV2LVxcdTAwM2VmbGFncyBcXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcXG4rXFx0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xcbitcXG4rXFx0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVxcdTAwM2VkZXZfYWRkcik7XFxuK1xcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXFxuK1xcdFxcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXFx1MDAzZWV0aCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIFJFR19HRE1fRldEX0NGRyhwb3J0LVxcdTAwM2VpZCksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICBGRV9QU0VfUE9SVF9QUEUxKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4rXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKndhbl9kZXYsICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVxcdTAwM2Vwb3J0O1xcbitcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVxcdTAwM2VldGg7XFxuK1xcdGludCBlcnIgPSAtRUJVU1k7XFxuK1xcbitcXHRpZiAocG9ydC1cXHUwMDNlaWQgIT0gQUlST0hBX0dETTNfSURYIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBwb3J0LVxcdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcXG4rXFx0XFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KSkgLyogQWxyZWFkeSBlbmFibGVkICovXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcXG4rXFxuK1xcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XFxuK1xcdGlmICh3YW5fZGV2KSB7XFxuK1xcdFxcdGlmICgod2FuX2Rldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfREVWX0ZfUU9TKSB8fFxcbitcXHRcXHQgICAgd2FuX2Rldi1cXHUwMDNlcG9ydC1cXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XFxuK1xcdFxcdFxcdE5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssXFxuK1xcdFxcdFxcdFxcdFxcdCAgIFxcXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVxcXCIpO1xcbitcXHRcXHRcXHRnb3RvIGVycm9yX3VubG9jaztcXG4rXFx0XFx0fVxcbitcXHRcXHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xcbitcXHR9XFxuK1xcbitcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rXFx0ZXJyID0gYWlyb2hhX2VuYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XFxuK1xcbitcXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXFx1MDAzZWRldl9hZGRyKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xcbitcXG4rXFx0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xcbitcXHRcXHR1MzIgcHNlX3BvcnQ7XFxuK1xcbitcXHRcXHRwc2VfcG9ydCA9IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpID8gRkVfUFNFX1BPUlRfUFBFMlxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xcbitcXHRcXHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cXHUwMDNlaWQpLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgcHNlX3BvcnQpO1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XFxuK1xcdGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcXG4rZXJyb3JfZGlzYWJsZV93YW46XFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9XQU47XFxuK1xcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcXG4rZXJyb3JfdW5sb2NrOlxcbitcXHRtdXRleF91bmxvY2soXFx1MDAyNmZsb3dfb2ZmbG9hZF9tdXRleCk7XFxuK1xcbitcXHRyZXR1cm4gZXJyO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVzdHJveShzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcXG5AQCAtMzA1Myw2ICszMjE3LDggQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcXG4gXFx0Zm9yX2VhY2hfc2V0X2JpdChxLCBkZXYtXFx1MDAzZXFvc19zcV9ibWFwLCBBSVJPSEFfTlVNX1FPU19DSEFOTkVMUylcXG4gXFx0XFx0YWlyb2hhX3RjX3JlbW92ZV9odGJfcXVldWUobmV0ZGV2LCBxKTtcXG4gXFxuK1xcdGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNj0gfkFJUk9IQV9ERVZfRl9RT1M7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzA3MiwyNCArMzIzOCwzMyBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19nZXRfaHRiX2dldF9sZWFmX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rc3RhdGljIGludCBhaXJvaGFfdGNfc2V0dXBfcWRpc2NfaHRiKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcXG4ge1xcbiBcXHRzd2l0Y2ggKG9wdC1cXHUwMDNlY29tbWFuZCkge1xcbi1cXHRjYXNlIFRDX0hUQl9DUkVBVEU6XFxuK1xcdGNhc2UgVENfSFRCX0NSRUFURToge1xcbitcXHRcXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XFxuK1xcdFxcdGludCBlcnI7XFxuK1xcbitcXHRcXHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXFx1MDAzZWV4dGFjayk7XFxuK1xcdFxcdGlmIChlcnIpXFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcbitcXHRcXHRkZXYtXFx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9RT1M7XFxuIFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuIFxcdGNhc2UgVENfSFRCX0RFU1RST1k6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3koZGV2KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVzdHJveShuZXRkZXYpO1xcbiBcXHRjYXNlIFRDX0hUQl9OT0RFX01PRElGWTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKGRldiwgb3B0KTtcXG4rXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfbW9kaWZ5X3F1ZXVlKG5ldGRldiwgb3B0KTtcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xcbiBcXHRjYXNlIFRDX0hUQl9MRUFGX0RFTDpcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVDpcXG4gXFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcXG4tXFx0XFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xcbitcXHRcXHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGNhc2UgVENfSFRCX0xFQUZfUVVFUllfUVVFVUU6XFxuLVxcdFxcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XFxuK1xcdFxcdHJldHVybiBhaXJvaGFfdGNfZ2V0X2h0Yl9nZXRfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbmluZGV4IGQ3ZmY4YzUyMDBlMjBjLi5hMzE0MzMwZmNkNDhlMiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguaFxcbkBAIC01MzUsMTkgKzUzNSwyMSBAQCBzdHJ1Y3QgYWlyb2hhX3FkbWEge1xcbiBcXHRERUNMQVJFX0JJVE1BUChxb3NfY2hhbm5lbF9tYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcXG4gfTtcXG4gXFxuLWVudW0gYWlyb2hhX3ByaXZfZmxhZ3Mge1xcbi1cXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcXG4rZW51bSBhaXJvaGFfZGV2X2ZsYWdzIHtcXG4rXFx0QUlST0hBX0RFVl9GX1dBTiA9IEJJVCgwKSxcXG4rXFx0QUlST0hBX0RFVl9GX1FPUyA9IEJJVCgxKSxcXG4gfTtcXG4gXFxuIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiB7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSBfX3JjdSAqcWRtYTtcXG4gXFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcXG4tXFx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xcbiBcXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoO1xcbiBcXG4gXFx0REVDTEFSRV9CSVRNQVAocW9zX3NxX2JtYXAsIEFJUk9IQV9OVU1fUU9TX0NIQU5ORUxTKTtcXG4tXFx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXFxuLVxcdHU2NCBjcHVfdHhfcGFja2V0cztcXG4tXFx0dTY0IGZ3ZF90eF9wYWNrZXRzO1xcbitcXHRzdHJ1Y3Qge1xcbitcXHRcXHR1MzIgY3B1X3R4X3BhY2tldHM7XFxuK1xcdFxcdHUzMiBmd2RfdHhfcGFja2V0cztcXG4rXFx0fSBxb3Nfc3RhdHNbQUlST0hBX05VTV9RT1NfQ0hBTk5FTFNdO1xcbiBcXG4gXFx0dTMyIGZsYWdzO1xcbiBcXHRpbnQgbmJxO1xcbkBAIC02NTksNyArNjYxLDcgQEAgc3RhdGljIGlubGluZSB1MTYgYWlyb2hhX3FkbWFfZ2V0X3R4cShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIHUxNiBxaWQpXFxuIFxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzX2xhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KVxcbiB7XFxuLVxcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XFxuK1xcdHJldHVybiAhKGRldi1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBBSVJPSEFfREVWX0ZfV0FOKTtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSBib29sIGFpcm9oYV9pc183NTgxKHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXFxuQEAgLTY3Niw2ICs2NzgsMTYgQEAgaW50IGFpcm9oYV9nZXRfZmVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldik7XFxuIFxcbitleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGFpcm9oYV9xZG1hICpcXG4rYWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXFxuK3tcXG4rXFx0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVxcdTAwM2VxZG1hLFxcbitcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9ydG5sX2lzX2hlbGQoKSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgbG9ja2RlcF9pc19oZWxkKFxcdTAwMjZmbG93X29mZmxvYWRfbXV0ZXgpKTtcXG4rfVxcbitcXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydCk7XFxuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XFxuIHZvaWQgYWlyb2hhX3BwZV9jaGVja19za2Ioc3RydWN0IGFpcm9oYV9wcGVfZGV2ICpkZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jXFxuQEAgLTE1LDcgKzE1LDEwIEBAXFxuICNpbmNsdWRlIFxcXCJhaXJvaGFfcmVncy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiYWlyb2hhX2V0aC5oXFxcIlxcbiBcXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xcbisvKiBTZXJpYWxpemUgYWlyb2hhX2dkbV9kZXYgZmxhZ3MsIFFETUEgcG9pbnRlciBhbmQgUFBFIENQVSBwb3J0XFxuKyAqIGNvbmZpZ3VyYXRpb24uXFxuKyAqL1xcbitERUZJTkVfTVVURVgoZmxvd19vZmZsb2FkX211dGV4KTtcXG4gc3RhdGljIERFRklORV9TUElOTE9DSyhwcGVfbG9jayk7XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IHJoYXNodGFibGVfcGFyYW1zIGFpcm9oYV9mbG93X3RhYmxlX3BhcmFtcyA9IHtcXG5AQCAtODYsOCArODksOCBAQCBzdGF0aWMgdTMyIGFpcm9oYV9wcGVfZ2V0X3RpbWVzdGFtcChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlKVxcbiBcXG4gdm9pZCBhaXJvaGFfcHBlX3NldF9jcHVfcG9ydChzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiwgdTggcHBlX2lkLCB1OCBmcG9ydClcXG4ge1xcbi1cXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXFx1MDAzZXFkbWE7XFxuLVxcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBxZG1hLVxcdTAwM2VldGg7XFxuK1xcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGFpcm9oYV9xZG1hX2RlcmVmKGRldik7XFxuK1xcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXFx1MDAzZWV0aDtcXG4gXFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcXHUwMDI2ZXRoLVxcdTAwM2VxZG1hWzBdO1xcbiBcXHR1MzIgZmVfY3B1X3BvcnQ7XFxuIFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuaW5kZXggNDM2ZjNjODc3OWMxMDIuLjRlMTdkZmJjZjJiODhhIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcXG5AQCAtMzc2LDYgKzM3Niw3IEBAXFxuIFxcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XFx0XFx0MHgyMjk4XFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcXHRHRU5NQVNLKDQgKyAoKF9uKSBcXHUwMDNjXFx1MDAzYyAzKSwgKChfbikgXFx1MDAzY1xcdTAwM2MgMykpXFxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcXHRcXHQweDFiMWExOTE4XFxuIFxcbiAjZGVmaW5lIFJFR19DRE01X1JYX09RMV9EUk9QX0NOVFxcdDB4MjlkNFxcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzg6MzUuNzI5NTUzNzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDYyNzcwODQyNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgODM0ZWIyMmNhNDBlMmI2MGZhNzViZDE2NjYwNjQ5MDk5YjhjZDE0ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMTM6Mzg6MzIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuaW5kZXggOTMyYjNhM2RmMmU1NzcuLjYwOWE1ZWE2N2ZiNzQzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguY1xuQEAgLTkyOSw3ICs5MjksNyBAQCBzdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV93YWtlX25ldGRldl90eHFzKHN0cnVjdCBhaXJvaGFfcXVldWUgKnEpXG4gXHRcdFx0aWYgKCFkZXYpXG4gXHRcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0XHRpZiAoZGV2LVx1MDAzZXFkbWEgIT0gcWRtYSlcbitcdFx0XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGRldi1cdTAwM2VxZG1hKSAhPSBxZG1hKVxuIFx0XHRcdFx0Y29udGludWU7XG4gXG4gXHRcdFx0bmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuQEAgLTE4MzcsMTMgKzE4MzcsMTQgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX3BvcnQgKnBvcnQgPSBkZXYtXHUwMDNlcG9ydDtcbiBcdHUzMiBjdXJfbGVuLCBwc2VfcG9ydCA9IEZFX1BTRV9QT1JUX1BQRTE7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdG5ldGlmX3R4X3N0YXJ0X2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiBcdGVyciA9IGFpcm9oYV9zZXRfdmlwX2Zvcl9nZG1fcG9ydChkZXYsIHRydWUpO1xuIFx0aWYgKGVycilcbiBcdFx0cmV0dXJuIGVycjtcbiBcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKG5ldGRldl91c2VzX2RzYShuZXRkZXYpKVxuIFx0XHRhaXJvaGFfZmVfc2V0KHFkbWEtXHUwMDNlZXRoLCBSRUdfR0RNX0lOR1JFU1NfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuIFx0XHRcdCAgICAgIEdETV9TVEFHX0VOX01BU0spO1xuQEAgLTE5MDMsNyArMTkwNCw2IEBAIHN0YXRpYyBpbnQgYWlyb2hhX2Rldl9zdG9wKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXG4gXHRuZXRpZl90eF9kaXNhYmxlKG5ldGRldik7XG4gXHRhaXJvaGFfc2V0X3ZpcF9mb3JfZ2RtX3BvcnQoZGV2LCBmYWxzZSk7XG5AQCAtMTkxMSw3ICsxOTExLDcgQEAgc3RhdGljIGludCBhaXJvaGFfZGV2X3N0b3Aoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbiBcdGlmICgtLXBvcnQtXHUwMDNldXNlcnMpXG4gXHRcdGFpcm9oYV9zZXRfcG9ydF9tdHUoZGV2LVx1MDAzZWV0aCwgcG9ydCk7XG4gXHRlbHNlXG4tXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhxZG1hLVx1MDAzZWV0aCxcbitcdFx0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGRldi1cdTAwM2VldGgsXG4gXHRcdFx0XHRcdCAgICBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4gXHRcdFx0XHRcdCAgICBGRV9QU0VfUE9SVF9EUk9QKTtcbiBcdHJldHVybiAwO1xuQEAgLTE5OTgsNiArMTk5OCw1MyBAQCBzdGF0aWMgaW50IGFpcm9oYV9lbmFibGVfZ2RtMl9sb29wYmFjayhzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgaW50IGFpcm9oYV9kaXNhYmxlX2dkbTJfbG9vcGJhY2soc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IGRldi1cdTAwM2VldGg7XG4rXHRpbnQgaSwgc3JjX3BvcnQ7XG4rXHR1MzIgcHNlX3BvcnQ7XG4rXG4rXHRzcmNfcG9ydCA9IGV0aC1cdTAwM2Vzb2MtXHUwMDNlb3BzLmdldF9zcG9ydChkZXYtXHUwMDNlcG9ydCwgZGV2LVx1MDAzZW5icSk7XG4rXHRpZiAoc3JjX3BvcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzcmNfcG9ydDtcbitcbitcdGFpcm9oYV9mZV9jbGVhcihldGgsXG4rXHRcdFx0UkVHX1NQX0RGVF9DUE9SVChzcmNfcG9ydCBcdTAwM2VcdTAwM2UgZmxzKFNQX0NQT1JUX0RGVF9NQVNLKSksXG4rXHRcdFx0U1BfQ1BPUlRfTUFTSyhzcmNfcG9ydCBcdTAwMjYgU1BfQ1BPUlRfREZUX01BU0spKTtcbitcbitcdGFpcm9oYV9mZV9zZXQoZXRoLCBSRUdfR0RNX0ZXRF9DRkcoQUlST0hBX0dETTJfSURYKSxcbitcdFx0ICAgICAgR0RNX1NUUklQX0NSQ19NQVNLKTtcbitcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhldGgsIFJFR19HRE1fRldEX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdFx0ICAgIEZFX1BTRV9QT1JUX0RST1ApO1xuK1x0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX0dETV9MUEJLX0NGRyhBSVJPSEFfR0RNMl9JRFgpLFxuK1x0XHRcdExQQktfQ0hBTl9NQVNLIHwgTFBCS19NT0RFX01BU0sgfCBMUEJLX0VOX01BU0spO1xuK1x0cHNlX3BvcnQgPSBhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSA/IEZFX1BTRV9QT1JUX1BQRTJcbitcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuK1x0YWlyb2hhX3NldF9nZG1fcG9ydF9md2RfY2ZnKGV0aCwgUkVHX0dETV9GV0RfQ0ZHKEFJUk9IQV9HRE0yX0lEWCksXG4rXHRcdFx0XHQgICAgcHNlX3BvcnQpO1xuK1xuK1x0YWlyb2hhX2ZlX3JtdyhldGgsIFJFR19GRV9XQU5fUE9SVCwgV0FOMF9NQVNLLFxuK1x0XHQgICAgICBGSUVMRF9QUkVQKFdBTjBfTUFTSywgQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBldGgtXHUwMDNlc29jLVx1MDAzZW51bV9wcGU7IGkrKylcbitcdFx0YWlyb2hhX2ZlX2NsZWFyKGV0aCwgUkVHX1BQRV9ERlRfQ1BPUlQoaSwgQUlST0hBX0dETTJfSURYKSxcbitcdFx0XHRcdERGVF9DUE9SVF9NQVNLKEFJUk9IQV9HRE0yX0lEWCkpO1xuK1xuK1x0LyogRW5hYmxlIFZJUCBhbmQgSUZDIGZvciBHRE0yICovXG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX1ZJUF9QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4rXHRhaXJvaGFfZmVfc2V0KGV0aCwgUkVHX0ZFX0lGQ19QT1JUX0VOLCBCSVQoQUlST0hBX0dETTJfSURYKSk7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCA9PSBBSVJPSEFfR0RNNF9JRFggXHUwMDI2XHUwMDI2IGFpcm9oYV9pc183NTgxKGV0aCkpIHtcbitcdFx0dTMyIG1hc2sgPSBGQ19JRF9PRl9TUkNfUE9SVF9NQVNLKGRldi1cdTAwM2VuYnEpO1xuK1xuK1x0XHRhaXJvaGFfZmVfcm13KGV0aCwgUkVHX1NSQ19QT1JUX0ZDX01BUDYsIG1hc2ssXG4rXHRcdFx0ICAgICAgRkNfTUFQNl9ERUZfVkFMVUUgXHUwMDI2IG1hc2spO1xuK1x0fVxuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKlxuIGFpcm9oYV9nZXRfd2FuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbiB7XG5AQCAtMjAyNCwxNSArMjA3MSwyNiBAQCBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KHN0cnVjdCBhaXJvaGFfZXRoICpldGgpXG4gc3RhdGljIHZvaWQgYWlyb2hhX2Rldl9zZXRfcWRtYShzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldilcbiB7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2ID0gbmV0ZGV2X2Zyb21fcHJpdihkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpjdXJfcWRtYSwgKnFkbWE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbiBcdGludCBwcGVfaWQ7XG4gXG4gXHQvKiBRRE1BMCBpcyB1c2VkIGZvciBsYW4gcG9ydHMgd2hpbGUgUURNQTEgaXMgdXNlZCBmb3IgV0FOIHBvcnRzICovXG4tXHRkZXYtXHUwMDNlcWRtYSA9IFx1MDAyNmV0aC1cdTAwM2VxZG1hWyFhaXJvaGFfaXNfbGFuX2dkbV9kZXYoZGV2KV07XG4tXHRuZXRkZXYtXHUwMDNlaXJxID0gZGV2LVx1MDAzZXFkbWEtXHUwMDNlaXJxX2JhbmtzWzBdLmlycTtcbitcdHFkbWEgPSBcdTAwMjZldGgtXHUwMDNlcWRtYVshYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldildO1xuK1x0Y3VyX3FkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGRldi1cdTAwM2VxZG1hLCBxZG1hKTtcbitcdG5ldGRldi1cdTAwM2VpcnEgPSBxZG1hLVx1MDAzZWlycV9iYW5rc1swXS5pcnE7XG4gXG4gXHRwcGVfaWQgPSAhYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikgXHUwMDI2XHUwMDI2IGFpcm9oYV9wcGVfaXNfZW5hYmxlZChldGgsIDEpO1xuIFx0YWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoZGV2LCBwcGVfaWQsIGFpcm9oYV9nZXRfZmVfcG9ydChkZXYpKTtcbitcbitcdGlmICghY3VyX3FkbWEpXG4rXHRcdHJldHVybjtcbitcbitcdG1lbXNldChkZXYtXHUwMDNlcW9zX3N0YXRzLCAwLCBzaXplb2YoZGV2LVx1MDAzZXFvc19zdGF0cykpO1xuK1x0c3luY2hyb25pemVfcmN1KCk7XG4rXHRuZXRpZl90eF93YWtlX2FsbF9xdWV1ZXMobmV0ZGV2KTtcbiB9XG4gXG4gc3RhdGljIGludCBhaXJvaGFfZGV2X2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldilcbkBAIC0yMDQ4LDcgKzIxMDYsNyBAQCBzdGF0aWMgaW50IGFpcm9oYV9kZXZfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2KVxuIFx0XHRmYWxsdGhyb3VnaDtcbiBcdGNhc2UgQUlST0hBX0dETTJfSURYOlxuIFx0XHQvKiBHRE0yIGlzIGFsd2F5cyB1c2VkIGFzIHdhbiAqL1xuLVx0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX1BSSVZfRl9XQU47XG4rXHRcdGRldi1cdTAwM2VmbGFncyB8PSBBSVJPSEFfREVWX0ZfV0FOO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGJyZWFrO1xuQEAgLTIxODcsOSArMjI0NSw5IEBAIHN0YXRpYyBuZXRkZXZfdHhfdCBhaXJvaGFfZGV2X3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHRcdCAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuLVx0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gZGV2LVx1MDAzZXFkbWE7XG4gXHR1MzIgbnJfZnJhZ3MsIHRhZywgbXNnMCwgbXNnMSwgbGVuO1xuIFx0c3RydWN0IGFpcm9oYV9xdWV1ZV9lbnRyeSAqZTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBuZXRkZXZfcXVldWUgKnR4cTtcbiBcdHN0cnVjdCBhaXJvaGFfcXVldWUgKnE7XG4gXHRMSVNUX0hFQUQodHhfbGlzdCk7XG5AQCAtMjE5OCw2ICsyMjU2LDggQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0dTE2IGluZGV4O1xuIFx0dTggZnBvcnQ7XG4gXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRxZG1hID0gcmN1X2RlcmVmZXJlbmNlKGRldi1cdTAwM2VxZG1hKTtcbiBcdHFpZCA9IGFpcm9oYV9xZG1hX2dldF90eHEocWRtYSwgc2tiX2dldF9xdWV1ZV9tYXBwaW5nKHNrYikpO1xuIFx0dGFnID0gYWlyb2hhX2dldF9kc2FfdGFnKHNrYiwgbmV0ZGV2KTtcbiBcbkBAIC0yMjQ3LDYgKzIzMDcsOCBAQCBzdGF0aWMgbmV0ZGV2X3R4X3QgYWlyb2hhX2Rldl94bWl0KHN0cnVjdCBza19idWZmICpza2IsXG4gXHRcdG5ldGlmX3R4X3N0b3BfcXVldWUodHhxKTtcbiBcdFx0cS1cdTAwM2V0eHFfc3RvcHBlZCA9IHRydWU7XG4gXHRcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1xuIFx0XHRyZXR1cm4gTkVUREVWX1RYX0JVU1k7XG4gXHR9XG4gXG5AQCAtMjMwOSw2ICsyMzcxLDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdFx0RklFTERfUFJFUChUWF9SSU5HX0NQVV9JRFhfTUFTSywgaW5kZXgpKTtcbiBcbiBcdHNwaW5fdW5sb2NrX2JoKFx1MDAyNnEtXHUwMDNlbG9jayk7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXG5AQCAtMjMyNCw2ICsyMzg3LDcgQEAgc3RhdGljIG5ldGRldl90eF90IGFpcm9oYV9kZXZfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIGVycm9yOlxuIFx0ZGV2X2tmcmVlX3NrYl9hbnkoc2tiKTtcbiBcdG5ldGRldi1cdTAwM2VzdGF0cy50eF9kcm9wcGVkKys7XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbiBcbiBcdHJldHVybiBORVRERVZfVFhfT0s7XG4gfVxuQEAgLTI0MDMsMTcgKzI0NjcsMTkgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfY2hhbl90eF9zY2hlZChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgY29uc3QgdTE2ICp3ZWlnaHRzLCB1OCBuX3dlaWdodHMpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFx0aW50IGk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFJUk9IQV9OVU1fUU9TX1FVRVVFUzsgaSsrKVxuLVx0XHRhaXJvaGFfcWRtYV9jbGVhcihkZXYtXHUwMDNlcWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbitcdFx0YWlyb2hhX3FkbWFfY2xlYXIocWRtYSwgUkVHX1FVRVVFX0NMT1NFX0NGRyhjaGFubmVsKSxcbiBcdFx0XHRcdCAgVFhRX0RJU0FCTEVfQ0hBTl9RVUVVRV9NQVNLKGNoYW5uZWwsIGkpKTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5fd2VpZ2h0czsgaSsrKSB7XG4gXHRcdHUzMiBzdGF0dXM7XG4gXHRcdGludCBlcnI7XG4gXG4tXHRcdGFpcm9oYV9xZG1hX3dyKGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyxcbitcdFx0YWlyb2hhX3FkbWFfd3IocWRtYSwgUkVHX1RYV1JSX1dFSUdIVF9DRkcsXG4gXHRcdFx0ICAgICAgIFRXUlJfUldfQ01EX01BU0sgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfQ0hBTl9JRFhfTUFTSywgY2hhbm5lbCkgfFxuIFx0XHRcdCAgICAgICBGSUVMRF9QUkVQKFRXUlJfUVVFVUVfSURYX01BU0ssIGkpIHxcbkBAIC0yNDIxLDEyICsyNDg3LDEyIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcbiBcdFx0XHRcdFx0c3RhdHVzIFx1MDAyNiBUV1JSX1JXX0NNRF9ET05FLFxuIFx0XHRcdFx0XHRVU0VDX1BFUl9NU0VDLCAxMCAqIFVTRUNfUEVSX01TRUMsXG4tXHRcdFx0XHRcdHRydWUsIGRldi1cdTAwM2VxZG1hLCBSRUdfVFhXUlJfV0VJR0hUX0NGRyk7XG4rXHRcdFx0XHRcdHRydWUsIHFkbWEsIFJFR19UWFdSUl9XRUlHSFRfQ0ZHKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuIFxuLVx0YWlyb2hhX3FkbWFfcm13KGRldi1cdTAwM2VxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbitcdGFpcm9oYV9xZG1hX3JtdyhxZG1hLCBSRUdfQ0hBTl9RT1NfTU9ERShjaGFubmVsIFx1MDAzZVx1MDAzZSAzKSxcbiBcdFx0XHRDSEFOX1FPU19NT0RFX01BU0soY2hhbm5lbCksXG4gXHRcdFx0X19maWVsZF9wcmVwKENIQU5fUU9TX01PREVfTUFTSyhjaGFubmVsKSwgbW9kZSkpO1xuIFxuQEAgLTI0OTAsMTcgKzI1NTYsMjIgQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHhfZXRzX3N0YXRzKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBjaGFubmVsLFxuIFx0XHRcdFx0XHRzdHJ1Y3QgdGNfZXRzX3FvcHRfb2ZmbG9hZCAqb3B0KVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0dTMyIGNwdV90eF9wYWNrZXRzLCBmd2RfdHhfcGFja2V0cztcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbitcdHU2NCB0eF9wYWNrZXRzO1xuIFxuLVx0dTY0IGNwdV90eF9wYWNrZXRzID0gYWlyb2hhX3FkbWFfcnIocWRtYSwgUkVHX0NOVFJfVkFMKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpKTtcbi1cdHU2NCBmd2RfdHhfcGFja2V0cyA9IGFpcm9oYV9xZG1hX3JyKHFkbWEsXG4tXHRcdFx0XHRcdCAgICBSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuLVx0dTY0IHR4X3BhY2tldHMgPSAoY3B1X3R4X3BhY2tldHMgLSBkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMpICtcbi1cdFx0XHQgKGZ3ZF90eF9wYWNrZXRzIC0gZGV2LVx1MDAzZWZ3ZF90eF9wYWNrZXRzKTtcbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuK1x0Y3B1X3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLCBSRUdfQ05UUl9WQUwoY2hhbm5lbCBcdTAwM2NcdTAwM2MgMSkpO1xuK1x0ZndkX3R4X3BhY2tldHMgPSBhaXJvaGFfcWRtYV9ycihxZG1hLFxuK1x0XHRcdFx0XHRSRUdfQ05UUl9WQUwoKGNoYW5uZWwgXHUwMDNjXHUwMDNjIDEpICsgMSkpO1xuK1x0dHhfcGFja2V0cyA9ICh1MzIpKGNwdV90eF9wYWNrZXRzIC1cbitcdFx0XHQgICBkZXYtXHUwMDNlcW9zX3N0YXRzW2NoYW5uZWxdLmNwdV90eF9wYWNrZXRzKSArXG4rXHRcdCAgICAgKHUzMikoZndkX3R4X3BhY2tldHMgLVxuK1x0XHRcdCAgIGRldi1cdTAwM2Vxb3Nfc3RhdHNbY2hhbm5lbF0uZndkX3R4X3BhY2tldHMpO1xuIFxuIFx0X2JzdGF0c191cGRhdGUob3B0LVx1MDAzZXN0YXRzLmJzdGF0cywgMCwgdHhfcGFja2V0cyk7XG4tXHRkZXYtXHUwMDNlY3B1X3R4X3BhY2tldHMgPSBjcHVfdHhfcGFja2V0cztcbi1cdGRldi1cdTAwM2Vmd2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5jcHVfdHhfcGFja2V0cyA9IGNwdV90eF9wYWNrZXRzO1xuK1x0ZGV2LVx1MDAzZXFvc19zdGF0c1tjaGFubmVsXS5md2RfdHhfcGFja2V0cyA9IGZ3ZF90eF9wYWNrZXRzO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTI3NTYsMTYgKzI4MjcsMTggQEAgc3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfdHhfcmF0ZV9saW1pdChzdHJ1Y3QgbmV0X2RldmljZSAqbmV0ZGV2LFxuIFx0XHRcdFx0XHQgdTMyIGJ1Y2tldF9zaXplKVxuIHtcbiBcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2ID0gbmV0ZGV2X3ByaXYobmV0ZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdGludCBpLCBlcnI7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjPSBUUlRDTV9QRUFLX01PREU7IGkrKykge1xuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fY29uZmlnKHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0ICAgUkVHX0VHUkVTU19UUlRDTV9DRkcsIGksXG4gXHRcdFx0XHRcdFx0ICAgISFyYXRlLCBUUlRDTV9NRVRFUl9NT0RFKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KGRldi1cdTAwM2VxZG1hLCBjaGFubmVsLFxuK1x0XHRlcnIgPSBhaXJvaGFfcWRtYV9zZXRfdHJ0Y21fdG9rZW5fYnVja2V0KHFkbWEsIGNoYW5uZWwsXG4gXHRcdFx0XHRcdFx0XHQgUkVHX0VHUkVTU19UUlRDTV9DRkcsXG4gXHRcdFx0XHRcdFx0XHQgaSwgcmF0ZSwgYnVja2V0X3NpemUpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTI4MDEsMTEgKzI4NzQsMTIgQEAgc3RhdGljIGludCBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHUzMiBjaGFubmVsID0gVENfSF9NSU4ob3B0LVx1MDAzZWNsYXNzaWQpICUgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFM7XG4gXHRpbnQgZXJyLCBudW1fdHhfcXVldWVzID0gQUlST0hBX05VTV9UWF9SSU5HICsgY2hhbm5lbCArIDE7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4tXHRzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEgPSBkZXYtXHUwMDNlcWRtYTtcbitcdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcbiBcdC8qIEhlcmUgd2UgbmVlZCB0byBjaGVjayB0aGUgcmVxdWVzdGVkIFFETUEgY2hhbm5lbCBpcyBub3QgYWxyZWFkeVxuIFx0ICogaW4gdXNlIGJ5IGFub3RoZXIgbmV0X2RldmljZSBydW5uaW5nIG9uIHRoZSBzYW1lIFFETUEgYmxvY2suXG4gXHQgKi9cbitcdHFkbWEgPSBhaXJvaGFfcWRtYV9kZXJlZihkZXYpO1xuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXQoY2hhbm5lbCwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApKSB7XG4gXHRcdE5MX1NFVF9FUlJfTVNHX01PRChvcHQtXHUwMDNlZXh0YWNrLFxuIFx0XHRcdFx0ICAgXCJxZG1hIHFvcyBjaGFubmVsIGFscmVhZHkgaW4gdXNlXCIpO1xuQEAgLTI4NDEsNyArMjkxNSw3IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3J4X21ldGVyKHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LFxuIFx0XHRcdFx0ICAgIHUzMiByYXRlLCB1MzIgYnVja2V0X3NpemUsXG4gXHRcdFx0XHQgICAgZW51bSB0cnRjbV91bml0X3R5cGUgdW5pdF90eXBlKVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShxZG1hLVx1MDAzZXFfcngpOyBpKyspIHtcbkBAIC0zMDE2LDEwICszMDkwLDExIEBAIHN0YXRpYyB2b2lkIGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsIGludCBxdWV1ZSlcbiB7XG4gXHRzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4gXHRpbnQgbnVtX3R4X3F1ZXVlcyA9IEFJUk9IQV9OVU1fVFhfUklORztcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hO1xuIFxuIFx0YWlyb2hhX3FkbWFfc2V0X3R4X3JhdGVfbGltaXQobmV0ZGV2LCBxdWV1ZSwgMCwgMCk7XG4gXG4rXHRxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbiBcdGNsZWFyX2JpdChxdWV1ZSwgcWRtYS1cdTAwM2Vxb3NfY2hhbm5lbF9tYXApO1xuIFx0Y2xlYXJfYml0KHF1ZXVlLCBkZXYtXHUwMDNlcW9zX3NxX2JtYXApO1xuIFxuQEAgLTMwNDUsNiArMzEyMCw5NSBAQCBzdGF0aWMgaW50IGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4re1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydCA9IGRldi1cdTAwM2Vwb3J0O1xuK1x0aW50IGVycjtcbitcbitcdGlmIChwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE0zX0lEWCBcdTAwMjZcdTAwMjZcbitcdCAgICBwb3J0LVx1MDAzZWlkICE9IEFJUk9IQV9HRE00X0lEWClcbitcdFx0cmV0dXJuO1xuK1xuK1x0ZXJyID0gYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFjayhkZXYpO1xuK1x0aWYgKGVycilcbitcdFx0bmV0ZGV2X3dhcm4obmV0ZGV2LFxuK1x0XHRcdCAgICBcImZhaWxlZCBkaXNhYmxpbmcgR0RNMiBsb29wYmFjazogJWRcXG5cIiwgZXJyKTtcbitcbitcdGRldi1cdTAwM2VmbGFncyBcdTAwMjY9IH5BSVJPSEFfREVWX0ZfV0FOO1xuK1x0YWlyb2hhX2Rldl9zZXRfcWRtYShkZXYpO1xuK1xuK1x0YWlyb2hhX3NldF9tYWNhZGRyKGRldiwgbmV0ZGV2LVx1MDAzZWRldl9hZGRyKTtcbitcdGlmIChuZXRpZl9ydW5uaW5nKG5ldGRldikpXG4rXHRcdGFpcm9oYV9zZXRfZ2RtX3BvcnRfZndkX2NmZyhkZXYtXHUwMDNlZXRoLFxuK1x0XHRcdFx0XHQgICAgUkVHX0dETV9GV0RfQ0ZHKHBvcnQtXHUwMDNlaWQpLFxuK1x0XHRcdFx0XHQgICAgRkVfUFNFX1BPUlRfUFBFMSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYWlyb2hhX2VuYWJsZV9xb3NfZm9yX2dkbTM0KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYsXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqd2FuX2RldiwgKmRldiA9IG5ldGRldl9wcml2KG5ldGRldik7XG4rXHRzdHJ1Y3QgYWlyb2hhX2dkbV9wb3J0ICpwb3J0ID0gZGV2LVx1MDAzZXBvcnQ7XG4rXHRzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoID0gZGV2LVx1MDAzZWV0aDtcbitcdGludCBlcnIgPSAtRUJVU1k7XG4rXG4rXHRpZiAocG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNM19JRFggXHUwMDI2XHUwMDI2XG4rXHQgICAgcG9ydC1cdTAwM2VpZCAhPSBBSVJPSEFfR0RNNF9JRFgpIHtcbitcdFx0LyogSFcgUW9TIGlzIGFsd2F5cyBzdXBwb3J0ZWQgYnkgR0RNMSBhbmQgR0RNMiAqL1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcbitcdGlmICghYWlyb2hhX2lzX2xhbl9nZG1fZGV2KGRldikpIC8qIEFscmVhZHkgZW5hYmxlZCAqL1xuK1x0XHRyZXR1cm4gMDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHdhbl9kZXYgPSBhaXJvaGFfZ2V0X3dhbl9nZG1fZGV2KGV0aCk7XG4rXHRpZiAod2FuX2Rldikge1xuK1x0XHRpZiAoKHdhbl9kZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9RT1MpIHx8XG4rXHRcdCAgICB3YW5fZGV2LVx1MDAzZXBvcnQtXHUwMDNlaWQgPT0gQUlST0hBX0dETTJfSURYKSB7XG4rXHRcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcbitcdFx0XHRcdFx0ICAgXCJRb1MgY29uZmlndXJlZCBmb3IgV0FOIGRldmljZVwiKTtcbitcdFx0XHRnb3RvIGVycm9yX3VubG9jaztcbitcdFx0fVxuK1x0XHRhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0KG5ldGRldl9mcm9tX3ByaXYod2FuX2RldikpO1xuK1x0fVxuK1xuK1x0ZGV2LVx1MDAzZWZsYWdzIHw9IEFJUk9IQV9ERVZfRl9XQU47XG4rXHRhaXJvaGFfZGV2X3NldF9xZG1hKGRldik7XG4rXHRlcnIgPSBhaXJvaGFfZW5hYmxlX2dkbTJfbG9vcGJhY2soZGV2KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyb3JfZGlzYWJsZV93YW47XG4rXG4rXHRlcnIgPSBhaXJvaGFfc2V0X21hY2FkZHIoZGV2LCBuZXRkZXYtXHUwMDNlZGV2X2FkZHIpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJvcl9kaXNhYmxlX2xvb3BiYWNrO1xuK1xuK1x0aWYgKG5ldGlmX3J1bm5pbmcobmV0ZGV2KSkge1xuK1x0XHR1MzIgcHNlX3BvcnQ7XG4rXG4rXHRcdHBzZV9wb3J0ID0gYWlyb2hhX3BwZV9pc19lbmFibGVkKGV0aCwgMSkgPyBGRV9QU0VfUE9SVF9QUEUyXG4rXHRcdFx0XHRcdFx0XHQgOiBGRV9QU0VfUE9SVF9QUEUxO1xuK1x0XHRhaXJvaGFfc2V0X2dkbV9wb3J0X2Z3ZF9jZmcoZXRoLCBSRUdfR0RNX0ZXRF9DRkcocG9ydC1cdTAwM2VpZCksXG4rXHRcdFx0XHRcdCAgICBwc2VfcG9ydCk7XG4rXHR9XG4rXG4rXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHJldHVybiAwO1xuK1xuK2Vycm9yX2Rpc2FibGVfbG9vcGJhY2s6XG4rXHRhaXJvaGFfZGlzYWJsZV9nZG0yX2xvb3BiYWNrKGRldik7XG4rZXJyb3JfZGlzYWJsZV93YW46XG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1dBTjtcbitcdGFpcm9oYV9kZXZfc2V0X3FkbWEoZGV2KTtcbitlcnJvcl91bmxvY2s6XG4rXHRtdXRleF91bmxvY2soXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KTtcbitcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4ge1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuQEAgLTMwNTMsNiArMzIxNyw4IEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2h0Yl9kZXN0cm95KHN0cnVjdCBuZXRfZGV2aWNlICpuZXRkZXYpXG4gXHRmb3JfZWFjaF9zZXRfYml0KHEsIGRldi1cdTAwM2Vxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpXG4gXHRcdGFpcm9oYV90Y19yZW1vdmVfaHRiX3F1ZXVlKG5ldGRldiwgcSk7XG4gXG4rXHRkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2PSB+QUlST0hBX0RFVl9GX1FPUztcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zMDcyLDI0ICszMjM4LDMzIEBAIHN0YXRpYyBpbnQgYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdHJldHVybiAwO1xuIH1cbiBcbi1zdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitzdGF0aWMgaW50IGFpcm9oYV90Y19zZXR1cF9xZGlzY19odGIoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcbiBcdFx0XHRcdCAgICAgc3RydWN0IHRjX2h0Yl9xb3B0X29mZmxvYWQgKm9wdClcbiB7XG4gXHRzd2l0Y2ggKG9wdC1cdTAwM2Vjb21tYW5kKSB7XG4tXHRjYXNlIFRDX0hUQl9DUkVBVEU6XG4rXHRjYXNlIFRDX0hUQl9DUkVBVEU6IHtcbitcdFx0c3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYgPSBuZXRkZXZfcHJpdihuZXRkZXYpO1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRlcnIgPSBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzQobmV0ZGV2LCBvcHQtXHUwMDNlZXh0YWNrKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1xuK1x0XHRkZXYtXHUwMDNlZmxhZ3MgfD0gQUlST0hBX0RFVl9GX1FPUztcbiBcdFx0YnJlYWs7XG4rXHR9XG4gXHRjYXNlIFRDX0hUQl9ERVNUUk9ZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZXN0cm95KGRldik7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2Rlc3Ryb3kobmV0ZGV2KTtcbiBcdGNhc2UgVENfSFRCX05PREVfTU9ESUZZOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9tb2RpZnlfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9BTExPQ19RVUVVRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfYWxsb2NfbGVhZl9xdWV1ZShkZXYsIG9wdCk7XG4rXHRcdHJldHVybiBhaXJvaGFfdGNfaHRiX2FsbG9jX2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUw6XG4gXHRjYXNlIFRDX0hUQl9MRUFGX0RFTF9MQVNUOlxuIFx0Y2FzZSBUQ19IVEJfTEVBRl9ERUxfTEFTVF9GT1JDRTpcbi1cdFx0cmV0dXJuIGFpcm9oYV90Y19odGJfZGVsZXRlX2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2h0Yl9kZWxldGVfbGVhZl9xdWV1ZShuZXRkZXYsIG9wdCk7XG4gXHRjYXNlIFRDX0hUQl9MRUFGX1FVRVJZX1FVRVVFOlxuLVx0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUoZGV2LCBvcHQpO1xuK1x0XHRyZXR1cm4gYWlyb2hhX3RjX2dldF9odGJfZ2V0X2xlYWZfcXVldWUobmV0ZGV2LCBvcHQpO1xuIFx0ZGVmYXVsdDpcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmggYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5pbmRleCBkN2ZmOGM1MjAwZTIwYy4uYTMxNDMzMGZjZDQ4ZTIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5oXG5AQCAtNTM1LDE5ICs1MzUsMjEgQEAgc3RydWN0IGFpcm9oYV9xZG1hIHtcbiBcdERFQ0xBUkVfQklUTUFQKHFvc19jaGFubmVsX21hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuIH07XG4gXG4tZW51bSBhaXJvaGFfcHJpdl9mbGFncyB7XG4tXHRBSVJPSEFfUFJJVl9GX1dBTiA9IEJJVCgwKSxcbitlbnVtIGFpcm9oYV9kZXZfZmxhZ3Mge1xuK1x0QUlST0hBX0RFVl9GX1dBTiA9IEJJVCgwKSxcbitcdEFJUk9IQV9ERVZfRl9RT1MgPSBCSVQoMSksXG4gfTtcbiBcbiBzdHJ1Y3QgYWlyb2hhX2dkbV9kZXYge1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hIF9fcmN1ICpxZG1hO1xuIFx0c3RydWN0IGFpcm9oYV9nZG1fcG9ydCAqcG9ydDtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYTtcbiBcdHN0cnVjdCBhaXJvaGFfZXRoICpldGg7XG4gXG4gXHRERUNMQVJFX0JJVE1BUChxb3Nfc3FfYm1hcCwgQUlST0hBX05VTV9RT1NfQ0hBTk5FTFMpO1xuLVx0LyogcW9zIHN0YXRzIGNvdW50ZXJzICovXG4tXHR1NjQgY3B1X3R4X3BhY2tldHM7XG4tXHR1NjQgZndkX3R4X3BhY2tldHM7XG4rXHRzdHJ1Y3Qge1xuK1x0XHR1MzIgY3B1X3R4X3BhY2tldHM7XG4rXHRcdHUzMiBmd2RfdHhfcGFja2V0cztcbitcdH0gcW9zX3N0YXRzW0FJUk9IQV9OVU1fUU9TX0NIQU5ORUxTXTtcbiBcbiBcdHUzMiBmbGFncztcbiBcdGludCBuYnE7XG5AQCAtNjU5LDcgKzY2MSw3IEBAIHN0YXRpYyBpbmxpbmUgdTE2IGFpcm9oYV9xZG1hX2dldF90eHEoc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCB1MTYgcWlkKVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBhaXJvaGFfaXNfbGFuX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4ge1xuLVx0cmV0dXJuICEoZGV2LVx1MDAzZWZsYWdzIFx1MDAyNiBBSVJPSEFfUFJJVl9GX1dBTik7XG4rXHRyZXR1cm4gIShkZXYtXHUwMDNlZmxhZ3MgXHUwMDI2IEFJUk9IQV9ERVZfRl9XQU4pO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgYWlyb2hhX2lzXzc1ODEoc3RydWN0IGFpcm9oYV9ldGggKmV0aClcbkBAIC02NzYsNiArNjc4LDE2IEBAIGludCBhaXJvaGFfZ2V0X2ZlX3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpO1xuIGJvb2wgYWlyb2hhX2lzX3ZhbGlkX2dkbV9kZXYoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcbiBcdFx0XHQgICAgIHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2KTtcbiBcbitleHRlcm4gc3RydWN0IG11dGV4IGZsb3dfb2ZmbG9hZF9tdXRleDtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBhaXJvaGFfcWRtYSAqXG4rYWlyb2hhX3FkbWFfZGVyZWYoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYpXG4re1xuK1x0cmV0dXJuIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZGV2LVx1MDAzZXFkbWEsXG4rXHRcdFx0XHRcdCBsb2NrZGVwX3J0bmxfaXNfaGVsZCgpIHx8XG4rXHRcdFx0XHRcdCBsb2NrZGVwX2lzX2hlbGQoXHUwMDI2Zmxvd19vZmZsb2FkX211dGV4KSk7XG4rfVxuK1xuIHZvaWQgYWlyb2hhX3BwZV9zZXRfY3B1X3BvcnQoc3RydWN0IGFpcm9oYV9nZG1fZGV2ICpkZXYsIHU4IHBwZV9pZCwgdTggZnBvcnQpO1xuIGJvb2wgYWlyb2hhX3BwZV9pc19lbmFibGVkKHN0cnVjdCBhaXJvaGFfZXRoICpldGgsIGludCBpbmRleCk7XG4gdm9pZCBhaXJvaGFfcHBlX2NoZWNrX3NrYihzdHJ1Y3QgYWlyb2hhX3BwZV9kZXYgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuaW5kZXggNDJmNGIwZjIxZDE3OTguLjBmMjYwYzUwYWMzYzkwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuY1xuQEAgLTE1LDcgKzE1LDEwIEBAXG4gI2luY2x1ZGUgXCJhaXJvaGFfcmVncy5oXCJcbiAjaW5jbHVkZSBcImFpcm9oYV9ldGguaFwiXG4gXG4tc3RhdGljIERFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuKy8qIFNlcmlhbGl6ZSBhaXJvaGFfZ2RtX2RldiBmbGFncywgUURNQSBwb2ludGVyIGFuZCBQUEUgQ1BVIHBvcnRcbisgKiBjb25maWd1cmF0aW9uLlxuKyAqL1xuK0RFRklORV9NVVRFWChmbG93X29mZmxvYWRfbXV0ZXgpO1xuIHN0YXRpYyBERUZJTkVfU1BJTkxPQ0socHBlX2xvY2spO1xuIFxuIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgYWlyb2hhX2Zsb3dfdGFibGVfcGFyYW1zID0ge1xuQEAgLTg2LDggKzg5LDggQEAgc3RhdGljIHUzMiBhaXJvaGFfcHBlX2dldF90aW1lc3RhbXAoc3RydWN0IGFpcm9oYV9wcGUgKnBwZSlcbiBcbiB2b2lkIGFpcm9oYV9wcGVfc2V0X2NwdV9wb3J0KHN0cnVjdCBhaXJvaGFfZ2RtX2RldiAqZGV2LCB1OCBwcGVfaWQsIHU4IGZwb3J0KVxuIHtcbi1cdHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSA9IGRldi1cdTAwM2VxZG1hO1xuLVx0c3RydWN0IGFpcm9oYV9ldGggKmV0aCA9IHFkbWEtXHUwMDNlZXRoO1xuK1x0c3RydWN0IGFpcm9oYV9xZG1hICpxZG1hID0gYWlyb2hhX3FkbWFfZGVyZWYoZGV2KTtcbitcdHN0cnVjdCBhaXJvaGFfZXRoICpldGggPSBkZXYtXHUwMDNlZXRoO1xuIFx0dTggcWRtYV9pZCA9IHFkbWEgLSBcdTAwMjZldGgtXHUwMDNlcWRtYVswXTtcbiBcdHUzMiBmZV9jcHVfcG9ydDtcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaCBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcmVncy5oXG5pbmRleCA0MzZmM2M4Nzc5YzEwMi4uNGUxN2RmYmNmMmI4OGEgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3JlZ3MuaFxuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9yZWdzLmhcbkBAIC0zNzYsNiArMzc2LDcgQEBcbiBcbiAjZGVmaW5lIFJFR19TUkNfUE9SVF9GQ19NQVA2XHRcdDB4MjI5OFxuICNkZWZpbmUgRkNfSURfT0ZfU1JDX1BPUlRfTUFTSyhfbilcdEdFTk1BU0soNCArICgoX24pIFx1MDAzY1x1MDAzYyAzKSwgKChfbikgXHUwMDNjXHUwMDNjIDMpKVxuKyNkZWZpbmUgRkNfTUFQNl9ERUZfVkFMVUVcdFx0MHgxYjFhMTkxOFxuIFxuICNkZWZpbmUgUkVHX0NETTVfUlhfT1ExX0RST1BfQ05UXHQweDI5ZDRcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjM1LjcyOTU1NzQ3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxMDcxMzEzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyIFBhdGNoKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgdGhlIGBhaXJvaGFgIGV0aGVybmV0IGRyaXZlciwgc3BlY2lmaWNhbGx5IGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYC4gSW1tZWRpYXRlbHksIEkgc2VlIGl0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgd2hpY2ggYWx3YXlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2suIFRoZSBwYXRjaCBpbnRyb2R1Y2VzIFJDVSBwcm90ZWN0aW9uIGZvciBgZGV2LVx1MDAzZXFkbWFgIOKAkyBhbHdheXMgYSBnb29kIHNpZ24gZm9yIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMgYW5kIHBlcmZvcm1hbmNlIHR1bmluZy4gVGhleSdyZSB1c2luZyB0aGUgc3RhbmRhcmQgUkNVIHByaW1pdGl2ZXM6IGByY3VfYWNjZXNzX3BvaW50ZXJgLCBgcmN1X2Fzc2lnbl9wb2ludGVyYCwgZXRjLiBHb29kIHByYWN0aWNlLiBJIGFsc28gc2VlIGFkZGl0aW9ucyBvZiBmdW5jdGlvbnMgbGlrZSBgYWlyb2hhX2Rpc2FibGVfZ2RtMl9sb29wYmFja2AsIGBhaXJvaGFfZGlzYWJsZV9xb3NfZm9yX2dkbTM0YCwgYW5kIGBhaXJvaGFfZW5hYmxlX3Fvc19mb3JfZ2RtMzRgLiBUaGVzZSBsaWtlbHkgcmVsYXRlIHRvIHNwZWNpZmljIGhhcmR3YXJlIGZlYXR1cmVzIG9yIGNvbmZpZ3VyYXRpb25zLiBUaGUgcGF0Y2ggdGhlbiB0d2Vha3MgUW9TIGNvbmZpZ3VyYXRpb24gYW5kIEhUQiBzZXR1cCBpbiBgYWlyb2hhX3RjX3NldHVwX3FkaXNjX2h0YmAsIGFuZCBhZGRzIGEgYGZsb3dfb2ZmbG9hZF9tdXRleGAgdG8gcHJvdGVjdCBgZGV2LVx1MDAzZXFkbWFgIGFuZCByZWxhdGVkIGZsYWdzLlxuXG5GdW5jdGlvbmFsbHksIHRoZXNlIGNoYW5nZXMgYXJlIGFsbCBhYm91dCBpbXByb3ZpbmcgdGhlIGRyaXZlcuKAmXMgY29uY3VycmVuY3kgYW5kIHBvdGVudGlhbGx5IGFkZGluZyBvciBtb2RpZnlpbmcgUXVhbGl0eSBvZiBTZXJ2aWNlIGZlYXR1cmVzLiBCZWZvcmUgSSBkaWcgdG9vIGRlZXAsIEkgbmVlZCB0byBrbm93IGlmIHRoaXMgaXMgZXZlbiByZWxldmFudCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZHJpdmVyLCBhcyBJIHVuZGVyc3RhbmQgaXQsIHRhcmdldHMgQWlyb2hhIEVONzU4MSBTb0NzLiBUaG9zZSBhcmUgZW1iZWRkZWQgc3lzdGVtcy5cblxuU28sIHRoZSBiaWcgcXVlc3Rpb24gaXMsIGNhbiBJIGV2ZW4gKnRlc3QqIHRoaXMgaW4gUUVNVT8gVGhlc2UgU29DLXNwZWNpZmljIGV0aGVybmV0IGRyaXZlcnMgYXJlIG9mdGVuIGEgcGFpbi4gVGhleSB1c3VhbGx5IHdvbid0IHByb2JlIHVubGVzcyB0aGVyZSdzIGEgZGVkaWNhdGVkIGVtdWxhdG9yIGZvciB0aGUgU29DLCB3aGljaCBpcyBhIHJhcmUgb2NjdXJyZW5jZS4gSSBuZWVkIHRvIHF1aWNrbHkgZGV0ZXJtaW5lIGlmIGl0J3MgYSBwbGF0Zm9ybSBkcml2ZXIgdGhhdCdzIGdvaW5nIHRvIHJlbHkgb24gc3BlY2lmaWMgaGFyZHdhcmUsIG9yIGlmIHRoZXJlJ3MgYW55IGNoYW5jZSBpdCdzIGEgUENJIGRyaXZlciBvciBzb21ldGhpbmcgdGhhdCBjb3VsZCBiZSBlbXVsYXRlZC4gSSdsbCBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jYCB0byBzZWUgaG93IGl0J3MgZGVmaW5lZCBhbmQgaG93IGl0J3MgcHJvYmVkLiBGcm9tIHRoZXJlLCBJIGNhbiBkZXRlcm1pbmUgdGhlIGZlYXNpYmlsaXR5IG9mIGludmVzdGlnYXRpbmcgdGhlIGNoYW5nZXMgaW4gbXkgb3duIGVudmlyb25tZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDEwNCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjQyLjgzNjY5MjY0M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTg1ODc2NTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibW9kdWxlXy4qZHJpdmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zOTAzPXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIGFpcm9oYV9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTAtfTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM5MTE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfZHJpdmVyKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM5MTItXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jPTgxMz1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBhaXJvaGFfbnB1X2RyaXZlciA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtODIwLX07XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo4MjE6bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhaXJvaGFfbnB1X2RyaXZlcik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy04MjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM4OjQzLjM5NTI4OTIzOFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDYwOTA0NzUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGxhdGZvcm0gRHJpdmVyKipcblxuT2theSwgc28gdGhpcyBpcyBhIHBsYXRmb3JtIGRyaXZlciwgaW50ZXJlc3RpbmcuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHdheSB0byBpbnRlcmFjdCB3aXRoIGl0LCBhbmQgc2luY2UgSSdtIGFzc3VtaW5nIFFFTVUgaXMgb3VyIHRlc3RpbmcgZW52aXJvbm1lbnQsIGxldCdzIGV4cGxvcmUgdGhhdC4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gc2VlIGlmIHdlIGNhbiBwcm9iZSBpdC4gVGhlIGtleSBxdWVzdGlvbiBpcyBob3cgdGhpcyBkcml2ZXIgZ2V0cyBpbnN0YW50aWF0ZWQuIElzIGl0IGhhbmRsZWQgYnkgc29tZSBnZW5lcmljIHBsYXRmb3JtIGluaXRpYWxpemF0aW9uIGNvZGUsIG9yIGRvZXMgaXQgZGVwZW5kIG9uIHRoZSBkZXZpY2UgdHJlZT8gVW5kZXJzdGFuZGluZyB0aGF0IHdpbGwgZGljdGF0ZSBteSBwcm9iaW5nIHN0cmF0ZWd5IGluIFFFTVUuIERldGVybWluaW5nIHRoZSBpbnN0YW50aWF0aW9uIG1ldGhvZCBpcyBjcnVjaWFsIHRvIGVmZmljaWVudCBhbmQgZWZmZWN0aXZlIGFuYWx5c2lzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTE2MiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjE2Ljg1NjIwNTVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg2NzU0NjIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlxcXFwuY29tcGF0aWJsZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9Mzg5Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBvZl9haXJvaGFfbWF0Y2hbXSA9IHtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjM4OTc6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsZW43NTgxLWV0aFxcXCIsIC5kYXRhID0gXFx1MDAyNmVuNzU4MV9zb2NfZGF0YSB9LFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6Mzg5ODpcXHR7IC5jb21wYXRpYmxlID0gXFxcImFpcm9oYSxhbjc1ODMtZXRoXFxcIiwgLmRhdGEgPSBcXHUwMDI2YW43NTgzX3NvY19kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zODk5LVxcdHsgLyogc2VudGluZWwgKi8gfVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYWlyb2hhX25wdV9tYXRjaFtdID0ge1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM6Njc5OlxcdHsgLmNvbXBhdGlibGUgPSBcXFwiYWlyb2hhLGVuNzU4MS1ucHVcXFwiLCAuZGF0YSA9IFxcdTAwMjZlbjc1ODFfbnB1X3NvY19kYXRhIH0sXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo2ODA6XFx0eyAuY29tcGF0aWJsZSA9IFxcXCJhaXJvaGEsYW43NTgzLW5wdVxcXCIsIC5kYXRhID0gXFx1MDAyNmFuNzU4M19ucHVfc29jX2RhdGEgfSxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTY4MS1cXHR7IC8qIHNlbnRpbmVsICovIH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MTcuNDQyOTY4NjYyWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjcyMzY2NzMwMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBsYXRmb3JtIERyaXZlcidzIEZ1enphYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwbGF0Zm9ybSBkcml2ZXIsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMsIGhvdyBlYXNpbHkgY2FuIFN5emthbGxlciBnZXQgYXQgdGhpcz8gVGhlIGZhY3QgdGhhdCBpdCdzIHVzaW5nIHRoZSBkZXZpY2UgdHJlZSAoYG9mX2RldmljZV9pZGApIGlzIGEgZ29vZCBzdGFydC4gSSBrbm93IFN5emthbGxlciBjYW4gaW5qZWN0IHBsYXRmb3JtIGRldmljZXMgdGhyb3VnaCBmdW5jdGlvbnMgbGlrZSBgc3l6X2Rldl9pcHY0X3NldHVwYCBvciBldmVuIGJ5IG1vdW50aW5nIGFuIGltYWdlIHdpdGggYSBjdXN0b20gRFRCLiBCdXQgZ2VuZXJhbGx5LCBTeXprYWxsZXIgZG9lc24ndCBqdXN0IHJhbmRvbWx5IGhpdCBwbGF0Zm9ybSBkcml2ZXJzIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IHRhcmdldGVkIG9yIHBhcnQgb2YgYSBnZW5lcmljIHN1YnN5c3RlbS5cblxuV2FpdCwgZGlkIEkgbWlzcyBzb21ldGhpbmc/IERvZXMgU3l6a2FsbGVyIGhhdmUgYSB3YXkgdG8gZ2VuZXJhdGUgYSBmYWtlIGRldmljZSB0cmVlIG9yIGNhbiB3ZSB1c2UgYHN5el9nZW5fcGxhdGZvcm1fZGV2aWNlYD8gTm8sIGl0IGRvZXNuJ3QgaGF2ZSBhICpnZW5lcmFsKiBtZWNoYW5pc20gZm9yIHByb2JpbmcgYWxsIHBsYXRmb3JtIGRyaXZlcnMuIEJ1dCwgSSByZW1lbWJlciB0aGF0IFN5emthbGxlciAqY2FuKiBmdXp6IHBsYXRmb3JtIGRyaXZlcnMgaWYgdGhleSBhcmUgYWxyZWFkeSBpbnN0YW50aWF0ZWQuXG5cbkJ1dCB0aGVuIHRoZXJlIGlzIHRoYXQgbm90ZSBhYm91dCBpbmFjY2Vzc2libGUgY29kZSBwYXRocyBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwgZXZlbiB3aXRoIGVtdWxhdGVkIGhhcmR3YXJlIGxpa2UgVVNCIGdhZGdldHMgYW5kIG1hYzgwMjExX2h3c2ltLiBUaGlzIGlzIGEgcGxhdGZvcm0gZHJpdmVyIHNwZWNpZmljYWxseSBmb3IgdGhlIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQywgc28gaXQgaXMgZ29pbmcgdG8gbmVlZCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMsIGNsb2NrcywgcmVzZXRzLCBldGMuLCB3aGljaCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgaXMgZGVmaW5pdGVseSBhIGJsb2NrZXIuXG5cbkFscmlnaHQsIGxldCdzIHNlZSBpZiB0aGlzIGRyaXZlciBpcyB1c2luZyBgZGV2bV9pb3JlbWFwX3Jlc291cmNlYCBvciBzb21ldGhpbmcgc2ltaWxhci4gSWYgaXQgZG9lcywgYW5kIHRoZSBwaHlzaWNhbCBhZGRyZXNzIGlzbid0IGJhY2tlZCBieSBSQU0gb3IgdGhlIGVtdWxhdG9yLCB0aGF0IHdvdWxkIGJlIGEgY2xlYXIgZmFpbCwgd291bGRuJ3QgaXQ/IFRoYXQgd291bGQgYmUgYSBzaW1wbGUgd2F5IHRvIGZpZ3VyZSB0aGlzIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE3MzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MjQuMTY2NjM5Nzc1WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1ODg5NTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb3JlbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xNTEyPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0xNTIzLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTUyNDpcXHRxZG1hLVxcdTAwM2VyZWdzID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlX2J5bmFtZShwZGV2LCByZXMpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTUyNS1cXHRpZiAoSVNfRVJSKHFkbWEtXFx1MDAzZXJlZ3MpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0zNTM4PXN0YXRpYyBpbnQgYWlyb2hhX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTM1NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzozNTYxOlxcdGV0aC1cXHUwMDNlZmVfcmVncyA9IGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9ieW5hbWUocGRldiwgXFxcImZlXFxcIik7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy0zNTYyLVxcdGlmIChJU19FUlIoZXRoLVxcdTAwM2VmZV9yZWdzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmM9MjQ1PXN0YXRpYyBpbnQgYWlyb2hhX25wdV9ydW5fZmlybXdhcmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKmJhc2UsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1NS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjI1NjpcXHRhZGRyID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVzKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTI1Ny1cXHRpZiAoSVNfRVJSKGFkZHIpKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz00MzA9c3RhdGljIGludCBhaXJvaGFfbnB1X3BwZV9zdGF0c19zZXR1cChzdHJ1Y3QgYWlyb2hhX25wdSAqbnB1LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy00NDktXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzo0NTA6XFx0bnB1LVxcdTAwM2VzdGF0cyA9IGRldm1faW9yZW1hcChucHUtXFx1MDAzZWRldixcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTQ1MS1cXHRcXHRcXHRcXHQgIHBwZV9kYXRhLVxcdTAwM2VzdGF0c19pbmZvLm5wdV9zdGF0c19hZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz02OTM9c3RhdGljIGludCBhaXJvaGFfbnB1X3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTcwMS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jOjcwMjpcXHRiYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFwX3Jlc291cmNlKHBkZXYsIDApO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfbnB1LmMtNzAzLVxcdGlmIChJU19FUlIoYmFzZSkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjI0LjQyNTU0NDg1OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2OTQ2MTkwMDYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBWaXJ0dWFsaXphdGlvbiBDaGFsbGVuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGRyaXZlciwgYW5kIGl0J3MgdXNpbmcgYGRldm1fcGxhdGZvcm1faW9yZW1hcF9yZXNvdXJjZV9ieW5hbWVgLiBUaGF0IHNjcmVhbXMgXCJwaHlzaWNhbCBtZW1vcnkgbWFwcGluZyxcIiBkb2Vzbid0IGl0PyBNeSBpbW1lZGlhdGUgY29uY2VybiBpcyB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFdpdGhvdXQgc3BlY2lmaWMgZW11bGF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgU29DLCBwcm9iaW5nIHRoaXMgZHJpdmVyIGlzIGFsbW9zdCBndWFyYW50ZWVkIHRvIGJvbWIgb3V0LiBFdmVuIGlmIHdlIHNvbWVob3cgbWFuYWdlIHRvIHRyaWNrIHRoZSBzeXN0ZW0gaW50byB0aGlua2luZyB0aGUgZGV2aWNlIHRyZWUgbm9kZSBleGlzdHMsIGFjY2Vzc2luZyB0aGF0IG1hcHBlZCBtZW1vcnkgaXMgYSByZWNpcGUgZm9yIGRpc2FzdGVyLiBXZSdyZSBsb29raW5nIGF0IHBvdGVudGlhbCBmYXVsdHMsIGdhcmJhZ2UgZGF0YSAoYWxsIHplcm9zIG9yIG9uZXMpLCBhbmQgYSBwcm9iYWJsZSBlYXJseSBleGl0IGZyb20gdGhlIGRyaXZlciBpbml0aWFsaXphdGlvbiwgbWF5YmUgaXQncyB3YWl0aW5nIGZvciBhIGhhcmR3YXJlIHJlc2V0IG9yIHJlYWRpbmcgYSBzcGVjaWZpYyBoYXJkd2FyZSBJRCwgZWl0aGVyIHdheSwgaXQnbGwgZmFpbC5cblxuVGhlIGtleSBub3cgaXMgdG8gZGlnIGludG8gdGhlIGBhaXJvaGFfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gcGlucG9pbnQgZXhhY3RseSAqd2hlcmUqIHRoaXMgZHJpdmVyIG1pZ2h0IGJlIG1ha2luZyB0aG9zZSBmYXRhbCBoYXJkd2FyZSByZWFkcy4gSWYgSSBjYW4gdW5kZXJzdGFuZCB0aGUgZXhhY3Qgc2VxdWVuY2Ugb2YgZXZlbnRzLCBJIGNhbiBiZXR0ZXIgYXNzZXNzIHRoZSBsaWtlbGlob29kIG9mIHN1Y2Nlc3MgYW5kIGlkZW50aWZ5IHBvdGVudGlhbCB3b3JrYXJvdW5kcyAob3IgY29uY2x1ZGUgdGhhdCB0aGlzIGlzIGEgZGVhZCBlbmQgZm9yIHZpcnR1YWxpemF0aW9uIHdpdGhvdXQgc2lnbmlmaWNhbnQgZW11bGF0aW9uKS4gTGV0J3Mgc2VlIHdoYXQgYGFpcm9oYV9wcm9iZWAgaXMgYWN0dWFsbHkgZG9pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMTc1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjMxLjEyMDE2ODc1NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxOTU2NzY0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInJlYWRfcG9sbF90aW1lb3V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz00MDM9c3RhdGljIGludCBhaXJvaGFfZmVfbWNfdmxhbl9jbGVhcihzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MTUtXFx0XFx0YWlyb2hhX2ZlX3dyKGV0aCwgUkVHX01DX1ZMQU5fQ0ZHLCB2YWwpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6NDE2OlxcdFxcdGVyciA9IHJlYWRfcG9sbF90aW1lb3V0KGFpcm9oYV9mZV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtNDE3LVxcdFxcdFxcdFxcdFxcdHZhbCBcXHUwMDI2IE1DX1ZMQU5fQ0ZHX0NNRF9ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTQyOS1cXHRcXHRcXHRhaXJvaGFfZmVfd3IoZXRoLCBSRUdfTUNfVkxBTl9DRkcsIHZhbCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzo0MzA6XFx0XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYy00MzEtXFx0XFx0XFx0XFx0XFx0XFx0dmFsIFxcdTAwMjYgTUNfVkxBTl9DRkdfQ01EX0RPTkVfTUFTSyxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MTE1MT1zdGF0aWMgdm9pZCBhaXJvaGFfcWRtYV90eF9jbGVhbnVwKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSlcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTE1Ny1cXHRcXHRcXHQgIEdMT0JBTF9DRkdfVFhfRE1BX0VOX01BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTE1ODpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTExNTktXFx0XFx0XFx0ICAgICAgIShzdGF0dXMgXFx1MDAyNiBHTE9CQUxfQ0ZHX1RYX0RNQV9CVVNZX01BU0spLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xMjIzPXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfaW5pdF9oZndkX3F1ZXVlcyhzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEpXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTEyODYtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoxMjg3OlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgc3RhdHVzLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTI4OC1cXHRcXHRcXHRcXHQgIShzdGF0dXMgXFx1MDAyNiBMTUdSX0lOSVRfU1RBUlQpLCBVU0VDX1BFUl9NU0VDLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0xNTQ4PXN0YXRpYyB2b2lkIGFpcm9oYV9xZG1hX2NsZWFudXAoc3RydWN0IGFpcm9oYV9ldGggKmV0aCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMTU1Ny1cXHRcXHRcXHRcXHQgIEdMT0JBTF9DRkdfUlhfRE1BX0VOX01BU0spO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MTU1ODpcXHRcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTE1NTktXFx0XFx0XFx0XFx0ICAgICAgIShzdGF0dXMgXFx1MDAyNiBHTE9CQUxfQ0ZHX1JYX0RNQV9CVVNZX01BU0spLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNDY1PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X2NoYW5fdHhfc2NoZWQoc3RydWN0IG5ldF9kZXZpY2UgKm5ldGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjQ4Ni1cXHRcXHRcXHQgICAgICAgRklFTERfUFJFUChUV1JSX1ZBTFVFX01BU0ssIHdlaWdodHNbaV0pKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jOjI0ODc6XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHN0YXR1cyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI0ODgtXFx0XFx0XFx0XFx0XFx0c3RhdHVzIFxcdTAwMjYgVFdSUl9SV19DTURfRE9ORSxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM9MjYwMz1zdGF0aWMgaW50IGFpcm9oYV9xZG1hX2dldF9ybF9wYXJhbShzdHJ1Y3QgYWlyb2hhX3FkbWEgKnFkbWEsIGludCBxdWV1ZV9pZCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjYxMi1cXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFJUQ01fQ0ZHX1BBUkFNKGFkZHIpLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjYxMzpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI2MTQtXFx0XFx0XFx0ICAgICAgdmFsIFxcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI2MjY9c3RhdGljIGludCBhaXJvaGFfcWRtYV9zZXRfcmxfcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgcXVldWVfaWQsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI2MzgtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNjM5OlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjY0MC1cXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgUkFURV9MSU1JVF9QQVJBTV9SV19ET05FX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jPTI3MjI9c3RhdGljIGludCBhaXJvaGFfcWRtYV9nZXRfdHJ0Y21fcGFyYW0oc3RydWN0IGFpcm9oYV9xZG1hICpxZG1hLCBpbnQgY2hhbm5lbCxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjczMy1cXHRhaXJvaGFfcWRtYV93cihxZG1hLCBSRUdfVFJUQ01fQ0ZHX1BBUkFNKGFkZHIpLCBjb25maWcpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmM6MjczNDpcXHRpZiAocmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX3FkbWFfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI3MzUtXFx0XFx0XFx0ICAgICAgdmFsIFxcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYz0yNzQ3PXN0YXRpYyBpbnQgYWlyb2hhX3FkbWFfc2V0X3RydGNtX3BhcmFtKHN0cnVjdCBhaXJvaGFfcWRtYSAqcWRtYSwgaW50IGNoYW5uZWwsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX2V0aC5jLTI3NjAtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ldGguYzoyNzYxOlxcdHJldHVybiByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfcWRtYV9yciwgdmFsLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfZXRoLmMtMjc2Mi1cXHRcXHRcXHRcXHQgdmFsIFxcdTAwMjYgVFJUQ01fUEFSQU1fUldfRE9ORV9NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYz0xNjM9c3RhdGljIGludCBhaXJvaGFfbnB1X3NlbmRfbXNnKHN0cnVjdCBhaXJvaGFfbnB1ICpucHUsIGludCBmdW5jX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYy0xODQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9ucHUuYzoxODU6XFx0cmV0ID0gcmVnbWFwX3JlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhucHUtXFx1MDAzZXJlZ21hcCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX25wdS5jLTE4Ni1cXHRcXHRcXHRcXHRcXHQgICAgICBSRUdfQ1JfTUJRMF9DVFJMKDMpICsgb2Zmc2V0LFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz02NjE9YWlyb2hhX3BwZV9mb2VfZ2V0X2VudHJ5X2xvY2tlZChzdHJ1Y3QgYWlyb2hhX3BwZSAqcHBlLCB1MzIgaGFzaClcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtNjc2LVxcdFxcdFxcdCAgICAgUFBFX1NSQU1fQ1RSTF9SRVFfTUFTSyk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo2Nzc6XFx0XFx0aWYgKHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhhaXJvaGFfZmVfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTY3OC1cXHRcXHRcXHRcXHRcXHQgICAgIHZhbCBcXHUwMDI2IFBQRV9TUkFNX0NUUkxfQUNLX01BU0ssXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jPTcyMT1zdGF0aWMgaW50IGFpcm9oYV9wcGVfZm9lX2NvbW1pdF9zcmFtX2VudHJ5KHN0cnVjdCBhaXJvaGFfcHBlICpwcGUsIHUzMiBoYXNoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy03MzUtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzo3MzY6XFx0cmV0dXJuIHJlYWRfcG9sbF90aW1lb3V0X2F0b21pYyhhaXJvaGFfZmVfcnIsIHZhbCxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTczNy1cXHRcXHRcXHRcXHRcXHR2YWwgXFx1MDAyNiBQUEVfU1JBTV9DVFJMX0FDS19NQVNLLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0xMzg2PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV93YWl0X2Zvcl9ucHVfaW5pdChzdHJ1Y3QgYWlyb2hhX2V0aCAqZXRoKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xMzk0LVxcdCAqL1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MTM5NTpcXHRlcnIgPSByZWFkX3BvbGxfdGltZW91dChhaXJvaGFfZmVfcnIsIHZhbCwgdmFsLCBVU0VDX1BFUl9NU0VDLFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMTM5Ni1cXHRcXHRcXHRcXHQxMDAgKiBVU0VDX1BFUl9NU0VDLCBmYWxzZSwgZXRoLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0xNDAxLVxcdGlmIChhaXJvaGFfcHBlX2lzX2VuYWJsZWQoZXRoLCAxKSlcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jOjE0MDI6XFx0XFx0ZXJyID0gcmVhZF9wb2xsX3RpbWVvdXQoYWlyb2hhX2ZlX3JyLCB2YWwsIHZhbCwgVVNFQ19QRVJfTVNFQyxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTE0MDMtXFx0XFx0XFx0XFx0XFx0MTAwICogVVNFQ19QRVJfTVNFQywgZmFsc2UsIGV0aCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6MzEuMjgyMTQxOTg5WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5MjEzNjc2OTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqV29ydGhGdXp6aW5nPUZhbHNlOiBBaXJvaGEgRXRoZXJuZXQgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllcywgSSdtIHNlZWluZyBhIGJ1bmNoIG9mIGByZWFkX3BvbGxfdGltZW91dGAgY2FsbHMgZGlyZWN0bHkgaW50ZXJhY3Rpbmcgd2l0aCBoYXJkd2FyZSByZWdpc3RlcnMuIEluIGEgdmlydHVhbGl6ZWQgc2V0dXAsIHRob3NlIGFyZSBqdXN0IGdvaW5nIHRvIHRpbWVvdXQgYW5kIGZhaWwg4oCTIG5vIHN1cnByaXNlIHRoZXJlLiBXYWl0IGEgc2Vjb25kLCBjb3VsZCB0aGlzIGRyaXZlciBiZSBnZXR0aW5nIHNvbWUga2luZCBvZiBtb2NrIGRldmljZSB0cmVhdG1lbnQgZnJvbSBzeXprYWxsZXI/IEJ1dCwgbm8sIHN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBtb2NrIGZvciB0aGlzIHNwZWNpZmljIEFpcm9oYSBldGhlcm5ldC5cblxuQWxyaWdodCwgYnV0IEkgaGF2ZSB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuIExldCBtZSBjb25maXJtIHRoaXMgcGF0Y2ggaXNuJ3QgdG91Y2hpbmcgYW55IGJyb2FkLCBnZW5lcmljIGNvZGUuIFRoZSBnb29kIG5ld3MgaXMsIGZyb20gd2hhdCBJIGNhbiB0ZWxsLCBpdCdzIGFsbCBjb250YWluZWQgd2l0aGluIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYC4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGBhaXJvaGFfZXRoLmNgLCBgYWlyb2hhX2V0aC5oYCwgYGFpcm9oYV9wcGUuY2AsIGFuZCBgYWlyb2hhX3JlZ3MuaGAuIFRoYXQgbWFrZXMgdGhpcyBoYXJkd2FyZS1zcGVjaWZpYywgcmlnaHQ/IEV4YWN0bHkuXG5cbkNvbnNpZGVyaW5nIHRoaXMgaXMgYW4gQWlyb2hhIEVONzU4MSBTb0MgZXRoZXJuZXQgZHJpdmVyLCB0aGF0IGNvZGUgd29uJ3QgcnVuIHdpdGhvdXQgdGhlIHBoeXNpY2FsIFNvQyBvciBhIHNwZWNpZmljIFFFTVUgbWFjaGluZSBtb2RlbCB0aGF0IGVtdWxhdGVzIGl0LiBTdGFuZGFyZCBzeXprYWxsZXIgaW5zdGFuY2VzIG9uIHg4Nl82NCBvciBhcm02NCBRRU1VL0dDRSBkb24ndCBoYXZlIHRoaXMsIHNvIHRoZSBjb2RlIHBhdGhzIGFyZSB1bnJlYWNoYWJsZS5cblxuTm93LCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhlIGluc3RydWN0aW9ucy4gXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zIGNvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVS5cIlxuXG5UaGF0J3MgaXQgdGhlbi4gVGhlIHN0YW5kYXJkIHN5emthbGxlciBzZXR1cCB3b24ndCBiZSBhYmxlIHRvIHJlYWNoIHRoaXMgQWlyb2hhIGRyaXZlci4gSXQgbmVlZHMgYSBzcGVjaWFsIFFFTVUgbWFjaGluZSBtb2RlbCwgb3IgdGhlIGFjdHVhbCBoYXJkd2FyZS4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhlcmUncyBubyBzb2Z0d2FyZSBlbXVsYXRpb24gYXZhaWxhYmxlIGZvciBBaXJvaGEgZXRoZXJuZXQgaW4gdGhlIGtlcm5lbCwgYnV0IGFzc3VtaW5nIHRoZXJlIGlzbid0LCB0aGlzIGlzbid0IHdvcnRoIGZ1enppbmcgd2l0aCBjdXJyZW50IGluZnJhc3RydWN0dXJlLiBXb3J0aEZ1enppbmc9ZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDM3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEzOjM5OjQxLjIwMzUxNDg4NFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQwNjA1ODE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFpcm9oYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc9MjI9c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9hZ2VyZS9LY29uZmlnXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L0tjb25maWc6MjM6c291cmNlIFxcXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9LY29uZmlnLTI0LXNvdXJjZSBcXFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWxhY3JpdGVjaC9LY29uZmlnXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo0MS42NDQxMzA3MloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjEyNjI4ODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCB3ZW50OlxuXG4qKkV4YW1pbmluZyBLY29uZmlnIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgQWlyb2hhIEV0aGVybmV0IGRyaXZlciBjb25maWd1cmF0aW9uLiBMZXQncyBzdGFydCB3aXRoIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIHdvdWxkIGV4cGVjdCB0byBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIHJlbGF0aW9uc2hpcHMgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbS4gSSdtIGFzc3VtaW5nIHRoYXQgS2NvbmZpZyBmaWxlIGNvbnRhaW5zIGFsbCB0aGUgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIHRvIGRldGVybWluZSB3aGF0IG90aGVyIGNvbXBvbmVudHMgYXJlIHJlcXVpcmVkIGZvciB0aGlzIGRyaXZlciB0byBmdW5jdGlvbiBjb3JyZWN0bHksIHJpZ2h0PyBUaGlzIGlzIHN0YW5kYXJkIHByb2NlZHVyZSBmb3IgdW5kZXJzdGFuZGluZyB0aGUgYnVpbGQgc3lzdGVtIGFuZCBlbnN1cmluZyB0aGF0IEknbSBjb25zaWRlcmluZyBhbGwgcmVsZXZhbnQgc2V0dGluZ3MuIFRpbWUgdG8gc2VlIHdoYXQgSSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5NDksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo0NC44NTY3NjM1MjFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTgwMzQwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCIuKlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoxOiMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI6Y29uZmlnIE5FVF9WRU5ET1JfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MzpcXHRib29sIFxcXCJBaXJvaGEgZGV2aWNlc1xcXCJcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo0OlxcdGRlcGVuZHMgb24gQVJDSF9BSVJPSEEgfHwgQ09NUElMRV9URVNUXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NTpcXHRoZWxwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6NjpcXHQgIElmIHlvdSBoYXZlIGEgQWlyb2hhIFNvQyB3aXRoIGV0aGVybmV0LCBzYXkgWS5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo3OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjg6aWYgTkVUX1ZFTkRPUl9BSVJPSEFcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzo5OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjEwOmNvbmZpZyBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjExOlxcdHRyaXN0YXRlIFxcXCJBaXJvaGEgTlBVIHN1cHBvcnRcXFwiXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTI6XFx0c2VsZWN0IFdBTlRfREVWX0NPUkVEVU1QXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTM6XFx0c2VsZWN0IFJFR01BUF9NTUlPXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTQ6XFx0aGVscFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE1OlxcdCAgVGhpcyBkcml2ZXIgc3VwcG9ydHMgQWlyb2hhIE5ldHdvcmsgUHJvY2Vzc29yIChOUFUpIGF2YWlsYWJsZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE2OlxcdCAgb24gdGhlIEFpcm9oYSBTb2MgZmFtaWx5LlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE3OlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjE4OmNvbmZpZyBORVRfQUlST0hBXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MTk6XFx0dHJpc3RhdGUgXFxcIkFpcm9oYSBTb0MgR2lnYWJpdCBFdGhlcm5ldCBzdXBwb3J0XFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIwOlxcdGRlcGVuZHMgb24gTkVUX0RTQSB8fCAhTkVUX0RTQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIxOlxcdHNlbGVjdCBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjIyOlxcdHNlbGVjdCBQQUdFX1BPT0xcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzoyMzpcXHRoZWxwXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjQ6XFx0ICBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgZ2lnYWJpdCBldGhlcm5ldCBNQUNzIGluIHRoZVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI1OlxcdCAgQWlyb2hhIFNvQyBmYW1pbHkuXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6MjY6XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL0tjb25maWc6Mjc6Y29uZmlnIE5FVF9BSVJPSEFfRkxPV19TVEFUU1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI4OlxcdGRlZmF1bHQgeVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjI5OlxcdGJvb2wgXFxcIkFpcm9oYSBmbG93IHN0YXRzXFxcIlxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMwOlxcdGRlcGVuZHMgb24gTkVUX0FJUk9IQSBcXHUwMDI2XFx1MDAyNiBORVRfQUlST0hBX05QVVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9LY29uZmlnOjMxOlxcdGhlbHBcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMjpcXHQgIEVuYWJsZSBBaXJvaGEgZmxvd3RhYmxlIHN0YXRpc3RpYyBjb3VudGVycy5cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozMzpcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvS2NvbmZpZzozNDplbmRpZiAjTkVUX1ZFTkRPUl9BSVJPSEFcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTM6Mzk6NDQuOTc4NTc1Mjg5WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUzNzg2NDQ5NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogTm90IFdvcnRoIEZ1enppbmcqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJIGNhbiBzZWUsIHRoaXMgcGF0Y2gncyBlZmZlY3RpdmVuZXNzIGhpbmdlcyBlbnRpcmVseSBvbiBlaXRoZXIgYEFSQ0hfQUlST0hBYCBvciBgQ09NUElMRV9URVNUYC4gTm93LCBTeXprYWxsZXIsIGluIHRoZW9yeSwgKmNvdWxkKiBidWlsZCB0aGlzIHdpdGggYENPTVBJTEVfVEVTVGAgZW5hYmxlZC4gSG93ZXZlciwgdGhhdCdzIHdoZXJlIHRoZSBnb29kIG5ld3MgZW5kcy4gVGhlIHJlYWwgc3RpY2tpbmcgcG9pbnQgaXMgdGhhdCBgQ09NUElMRV9URVNUYCBpc24ndCBlbm91Z2g7IHdlIG5lZWQgdGhlIGFjdHVhbCBBaXJvaGEgaGFyZHdhcmUsIG9yIGEgdmVyeSBzcGVjaWZpYyBRRU1VIHNldHVwIHRoYXQgcHJlY2lzZWx5IGVtdWxhdGVzIHRoZSBgQVJDSF9BSVJPSEFgIGFyY2hpdGVjdHVyZS4gVW5mb3J0dW5hdGVseSwgYXMgd2Uga25vdywgU3l6a2FsbGVyIGRvZXNuJ3QgdXNlIHRoYXQgbGV2ZWwgb2Ygc3BlY2lhbGl6ZWQgUUVNVSBjb25maWd1cmF0aW9uIGZvciBvdXIgc3RhbmRhcmQgZnV6emluZyBydW5zLlxuXG5TbywgaW4gc2hvcnQsIHRoaXMgcGF0Y2ggaXMgZGVhZCBpbiB0aGUgd2F0ZXIgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUsIGF0IGxlYXN0IGluIG91ciBjdXJyZW50IHNldHVwLiBJdCdzIG1vZGlmeWluZyBjb2RlIHBhdGhzIHRoYXQgYXJlIGluaGVyZW50bHkgdW5yZWFjaGFibGUgaW4gZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIHRoZSBRRU1VIGNvbmZpZ3VyYXRpb25zIHdlIGFyZSB1c2luZy4gSXQgaXMgbW9kaWZ5aW5nIGEgaGFyZHdhcmUtc3BlY2lmaWMgZXRoZXJuZXQgZHJpdmVyIChBaXJvaGEgU29DKSwgYW5kIHdlIGhhdmUgbm8gYWJpbGl0eSB0byBlZmZlY3RpdmVseSBwcm9iZSBvciByZWFjaCB0aGF0IGRyaXZlciBpbiBvdXIgc3RhbmRhcmQgdmlydHVhbGl6ZWQgZnV6emluZyBzZXR1cHMuXG5cblRoZXJlZm9yZSwgSSdtIGdvaW5nIHRvIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC4gVGhlIHJlYXNvbmluZyBpcyBzdHJhaWdodGZvcndhcmQ6IHRoaXMgbW9kaWZpZXMgYSBoYXJkd2FyZS1zcGVjaWZpYyBkcml2ZXIsIG1lYW5pbmcgaXQncyBpbXBvc3NpYmxlIHRvIGVmZmljaWVudGx5IHRlc3QgaW4gR0NFIG9yIFFFTVUgdXNpbmcgb3VyIHN0YW5kYXJkIGNvbmZpZ3VyYXRpb25zLiBXZSBjYW4ndCBhY3R1YWxseSB0cmlnZ2VyIHRoZSBjb2RlIHRoaXMgcGF0Y2ggdG91Y2hlcy4gV2Ugc2hvdWxkIG5vdCB3YXN0ZSBvdXIgY3ljbGVzIG9uIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3OTg0LCJPdXRwdXRUb2tlbnMiOjEwOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMzozOTo1MC4zNTcyMjQ0NDVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgQWlyb2hhIFNvQyBldGhlcm5ldCBkcml2ZXIgKGRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS8pLiBUaGlzIGlzIGEgaGFyZHdhcmUtc3BlY2lmaWMgcGxhdGZvcm0gZHJpdmVyIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgQWlyb2hhIEVONzU4MS9BTjc1ODMgU29DIGhhcmR3YXJlIHRvIHByb2JlIGFuZCBmdW5jdGlvbi4gSXQgY2Fubm90IGJlIHJlYWNoZWQgb3IgdGVzdGVkIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgb3IgR0NFIHVzZWQgYnkgc3l6a2FsbGVyLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEFpcm9oYSBTb0MgZXRoZXJuZXQgZHJpdmVyIChkcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvKS4gVGhpcyBpcyBhIGhhcmR3YXJlLXNwZWNpZmljIHBsYXRmb3JtIGRyaXZlciB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIEFpcm9oYSBFTjc1ODEvQU43NTgzIFNvQyBoYXJkd2FyZSB0byBwcm9iZSBhbmQgZnVuY3Rpb24uIEl0IGNhbm5vdCBiZSByZWFjaGVkIG9yIHRlc3RlZCBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIG9yIEdDRSB1c2VkIGJ5IHN5emthbGxlci5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflowscgfb[1] Phase: Running StartedAt: 2026-07-01 13:40:02 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowscgfb[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-01 13:40:02 +0000 UTC FinishedAt: 2026-07-01 13:41:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}