Name: series-workflowcljk9 Phase: Failed StartedAt: 2026-07-22 18:56:16 +0000 UTC FinishedAt: 2026-07-22 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcljk9[0] Phase: Succeeded StartedAt: 2026-07-22 18:56:16 +0000 UTC FinishedAt: 2026-07-22 19:16:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcljk9[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 18:56:16 +0000 UTC FinishedAt: 2026-07-22 19:16:15 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1Lmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX3JlZ3MuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVjYWM2NjNkZTFkMWNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5AQCAtMCwwICYjNDM7MSw1NTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX3JlZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF9kZWZpbmVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfODI1NzUuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgXHUwMDNjXHUwMDNjIE1TSVhfVkVDVE9SKVxuJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovXG4mIzQzO1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbiYjNDM7XHRcdFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4mIzQzO1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cbiYjNDM7XHRcdH0gd2I7XG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xuJiM0MztcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4mIzQzO1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cbiYjNDM7XHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuJiM0MztcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuJiM0MztcdFx0fSB3YjsgLyogd3JpdGViYWNrICovXG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2Ige1xuJiM0MztcdHZvaWQgKmJhcjA7XG4mIzQzO1x0dTMyIHR4X3RhaWw7XG4mIzQzO1x0dTMyIHJ4X3RhaWw7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHUzMiBtZGljO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlXG4mIzQzO1x0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cbiYjNDM7XHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XG4mIzQzO1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbiYjNDM7XHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZGljID0gKCgodTMyKWRhdGEpIHxcbiYjNDM7XHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4mIzQzO1x0XHQoMSBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcbiYjNDM7XHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dXNsZWVwKDUwKTtcbiYjNDM7XHRcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XG4mIzQzO1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcbiYjNDM7ICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXG4mIzQzOyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbiYjNDM7ICpcbiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXCYjMzQ7VXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuJiM0MzsgKiBvbiB0aGUgODI1NzZcJiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFwmIzM0O01BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuJiM0MzsgKiBvbiB0aGlzIGRldmljZS5cJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XG4mIzQzOyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbiYjNDM7ICogcmF0aW9uYWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuJiM0MztcdCAqIFFFTVUmIzM5O3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcbiYjNDM7XHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4mIzQzO1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbiYjNDM7XHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXG4mIzQzO1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuJiM0MztcdCAqIG5vLW9wIHRoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4mIzQzO1xuJiM0MztcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayAmIzQzOyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4mIzQzO1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXG4mIzQzO1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuJiM0MztcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbiYjNDM7XHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuJiM0MztcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRkQgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9TTFU7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMClcbiYjNDM7XHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbiYjNDM7XHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMjAwMCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4mIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXG4mIzQzOyAqIHZpYSBWRklPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0dTY0IGlvdmFfdHgsIGlvdmFfcng7XG4mIzQzO1x0dTMyIGN0cmwsIHJjdGw7XG4mIzQzO1x0dTE2IGNtZF9yZWc7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcbiYjNDM7XG4mIzQzO1xuJiM0MztcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4mIzQzO1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbiYjNDM7XHRpZiAoKGNtZF9yZWcgXHUwMDI2IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPVxuJiM0MztcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuJiM0MztcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiYjNDM7XHRcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqL1xuJiM0MztcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4mIzQzO1x0ICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmdcbiYjNDM7XHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuJiM0MztcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuJiM0MztcdCAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggXHUwMDNlXHUwMDNlIDMyKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XG4mIzQzO1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbiYjNDM7XHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXG4mIzQzO1x0ICogZGVzY3JpcHRvcnMuXCYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuJiM0MztcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXG4mIzQzO1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbiYjNDM7XHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4mIzQzO1x0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDAwO1xuJiM0MztcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbiYjNDM7XHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2JcbiYjNDM7XHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4mIzQzO1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4mIzQzO1x0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFwmIzM0O1doZW4gdXNpbmcgdGhlXG4mIzQzO1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUNcbiYjNDM7XHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuJiM0MztcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbiYjNDM7XHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxuJiM0MztcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbiYjNDM7XHQgKiBjb2RlIHBhdGhzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbiYjNDM7XHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbiYjNDM7XHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcbiYjNDM7XHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4mIzQzO1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbiYjNDM7XHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuJiM0MztcdGlnYl9yZXNldChpZ2IpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4mIzQzO1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4mIzQzO1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbiYjNDM7XHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuJiM0MztcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuJiM0MztcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4mIzQzO1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuJiM0MztcdCAqIGlzIHJlcXVpcmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZ2JcJiMzNDssXG4mIzQzO1x0LnByb2JlID0gaWdiX3Byb2JlLFxuJiM0MztcdC5pbml0ID0gaWdiX2luaXQsXG4mIzQzO1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4mIzQzO1x0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXG4mIzQzO1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuJiM0MztcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbmluZGV4IDI4NTg4ODVhODliYmJmLi4yN2JkZjU2MTkyNWY2NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgc3RydWN0IHZmaW9fcGNpX2RldmljZSB7XG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbkBAIC02OCw2ICYjNDM7NjksOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uMWIyOWNlZjk2YjA0ZTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJnZW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG5AQCAtMTA2LDYgJiM0MzsxMDcsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleClcbiBcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxuJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4mIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4mIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcbiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMTk5LDkgJiM0MzsyMjIsMjMgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiBcdFx0ICAgICAgIHdyaXRlID8gXCYjMzQ7d3JpdGUgdG9cJiMzNDsgOiBcJiMzNDtyZWFkIGZyb21cJiMzNDssIGNvbmZpZyk7XG4gfVxuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIHtcbi1cdGlvY3RsX2Fzc2VydChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ciA9IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCYjMzQ7aW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgJiM0Mzs1LDE0IEBAXG4gI2lmZGVmIF9feDg2XzY0X19cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wcztcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4mIzQzO1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVjYWM2NjNkZTFkMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDIwMDApOwomIzQzOwlWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgJmFtcDsgRTEwMDBfQ1RSTF9SU1QsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdAomIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXQKJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWQKJiM0MzsgKiB2aWEgVkZJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJdTY0IGlvdmFfdHgsIGlvdmFfcng7CiYjNDM7CXUzMiBjdHJsLCByY3RsOwomIzQzOwl1MTYgY21kX3JlZzsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CWlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDt0eF9yaW5nKTsKJiM0MzsJaW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3J4X3JpbmcpOwomIzQzOwomIzQzOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqLwomIzQzOwljbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpOwomIzQzOwlpZiAoKGNtZF9yZWcgJmFtcDsgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9CiYjNDM7CSAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewomIzQzOwkJY21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKJiM0MzsJCXZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi8KJiM0MzsJaWdiX3NldHVwX2xvb3BiYWNrKGlnYik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldAomIzQzOwkgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZQomIzQzOwkgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZwomIzQzOwkgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwcwomIzQzOwkgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmQKJiM0MzsJICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzYKJiM0MzsJICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYQomIzQzOwkgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsCiYjNDM7CSAqIGRlc2NyaXB0b3JzLiYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlcgomIzQzOwkgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvcgomIzQzOwkgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpcwomIzQzOwkgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0bwomIzQzOwkgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4CiYjNDM7CSAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqLwomIzQzOwlyZXRyaWVzID0gMjAwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCWlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgJmFtcDsgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSAmYW1wOyBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CX0KJiM0MzsJVkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uCiYjNDM7CSAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYgomIzQzOwkgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kCiYjNDM7CSAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWAomIzQzOwkgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgJiMzNDtXaGVuIHVzaW5nIHRoZQomIzQzOwkgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGImIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDCiYjNDM7CSAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzCiYjNDM7CSAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2sKJiM0MzsJICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGUKJiM0MzsJICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbAomIzQzOwkgKiBjb2RlIHBhdGhzLgomIzQzOwkgKi8KJiM0MzsJcmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OgomIzQzOwkgKgomIzQzOwkgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0bwomIzQzOwkgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMCkKJiM0MzsJICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seQomIzQzOwkgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuCiYjNDM7CSAqCiYjNDM7CSAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC4KJiM0MzsJICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZQomIzQzOwkgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guCiYjNDM7CSAqCiYjNDM7CSAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uCiYjNDM7CSAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGUKJiM0MzsJICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlCiYjNDM7CSAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suCiYjNDM7CSAqCiYjNDM7CSAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlgKJiM0MzsJICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovCiYjNDM7CWlnYi0mZ3Q7dHhfdGFpbCA9IDA7CiYjNDM7CWlnYi0mZ3Q7cnhfdGFpbCA9IDA7CiYjNDM7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7CiYjNDM7CiYjNDM7CWlnYi0mZ3Q7YmFyMCA9IGRldmljZS0mZ3Q7YmFyc1swXS52YWRkcjsKJiM0MzsKJiM0MzsJaWdiX3Jlc2V0KGlnYik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuCiYjNDM7CSAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZQomIzQzOwkgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmcKJiM0MzsJICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLgomIzQzOwkgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldAomIzQzOwkgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS4KJiM0MzsJICovCiYjNDM7CXZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUMKJiM0MzsJICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyAmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXQKJiM0MzsJICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkJiMzNDssIHdoaWNoIHJ1bGVzIG91dAomIzQzOwkgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbAomIzQzOwkgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLAomIzQzOwkJCSAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4OwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWdiX2lycV9kaXNhYmxlKGlnYik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXR4ID0gJmFtcDtpZ2ItJmd0O3R4X3JpbmdbaWdiLSZndDt0eF90YWlsXTsKJiM0MzsJCXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbaWdiLSZndDtyeF90YWlsXTsKJiM0MzsKJiM0MzsJCW1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwkJbWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApOwomIzQzOwomIzQzOwkJdHgtJmd0O3JlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0CiYjNDM7CQkgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkCiYjNDM7CQkgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YQomIzQzOwkJICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldAomIzQzOwkJICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7CiYjNDM7CQkgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aAomIzQzOwkJICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7CiYjNDM7CQkvKgomIzQzOwkJICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemUKJiM0MzsJCSAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5vbGluZm9fc3RhdHVzID0KJiM0MzsJCQljcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSAmbHQ7Jmx0OyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTsKJiM0MzsKJiM0MzsJCWlnYi0mZ3Q7dHhfdGFpbCA9IChpZ2ItJmd0O3R4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CQlpZ2ItJmd0O3J4X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItJmd0O3J4X3RhaWwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLSZndDt0eF90YWlsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmQKJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVgKJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyCiYjNDM7ICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkCiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLgomIzQzOyAqCiYjNDM7ICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldAomIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtJmd0O0QzLSZndDtEMCB0cmFuc2l0aW9uJiMzNDspLCBzbwomIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWwKJiM0MzsgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0CiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZQomIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlCiYjNDM7ICogbmVlZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7CiYjNDM7CXZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJdTMyIHByZXZfdGFpbDsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CXByZXZfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7CiYjNDM7CXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbcHJldl90YWlsXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuCiYjNDM7CSAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLAomIzQzOwkgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0CiYjNDM7CSAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLAomIzQzOwkgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFjawomIzQzOwkgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nOwomIzQzOwkgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3QKJiM0MzsJICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUEKJiM0MzsJICogdGVzdHMgYm91bmRlZC4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtJmd0O3diLnN0YXR1c19lcnJvcikpOwomIzQzOwkJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2VzbiYjMzk7dCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQQomIzQzOwkJICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlCiYjNDM7CQkgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJcm1iKCk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfY2xlYXIoaWdiKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9lbmFibGUoaWdiKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpcwomIzQzOwkgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbAomIzQzOwkgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZQomIzQzOwkgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmUKJiM0MzsJICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWQKJiM0MzsJICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKQomIzQzOwkgKiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlIHsKIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCkBAIC02OCw2ICYjNDM7NjksOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi4xYjI5Y2VmOTZiMDRlNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliZ2VuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CkBAIC0xMDYsNiAmIzQzOzEwNywyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KQogCXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nCiYjNDM7ICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2UKJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlCiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGUKJiM0MzsgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzCiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHZlY3RvcjsgaSAmbHQ7IHZlY3RvciAmIzQzOyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O21zaV9ldmVudGZkc1tpXSwgMCwKJiM0MzsJCQkgICAgICAgJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXG4mIzM0OywgaSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLSZndDttc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pCiB7CkBAIC0xOTksOSAmIzQzOzIyMiwyMyBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogCQkgICAgICAgd3JpdGUgPyAmIzM0O3dyaXRlIHRvJiMzNDsgOiAmIzM0O3JlYWQgZnJvbSYjMzQ7LCBjb25maWcpOwogfQogCiYjNDM7aW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmIChpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW9jdGxfYXNzZXJ0KGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl9IHdoaWxlIChyID09IC1FQUdBSU4pOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9FUShyLCAwLCAmIzM0O2lvY3RsKGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcbiYjMzQ7KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2lmZGVmIF9feDg2XzY0X18KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0gewogI2lmZGVmIF9feDg2XzY0X18KIAkmYW1wO2RzYV9vcHMsCiAJJmFtcDtpb2F0X29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDUxCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFNlbGZ0ZXN0IEFkZGl0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgZmlsZXMgYWZmZWN0ZWQgYXJlIGFsbCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCwgc28gdGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgYWRkaW5nIGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgdG8gdGhlIFZGSU8gc2VsZi10ZXN0cywgYW5kIGFsc28gbW9kaWZ5aW5nIHNvbWUgZXhpc3RpbmcgVkZJTyB0ZXN0IGluZnJhc3RydWN0dXJlIGZpbGVzOiBgdmZpb19wY2lfZGV2aWNlLmhgLCBgbGlidmZpby5ta2AsIGB2ZmlvX3BjaV9kZXZpY2UuY2AsIGFuZCBgdmZpb19wY2lfZHJpdmVyLmNgLgoKU2luY2UgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgKmVudGlyZWx5KiBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmLXRlc3QgZnJhbWV3b3JrLCBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gdG8gc3VzcGVjdCB0aGV5IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IsIGNyaXRpY2FsbHksIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIG5vIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCBieSB0aGlzLiBKdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyBkb3VibGUgY2hlY2suCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBmdWxsIGxpc3Q6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgLCBhbGwgc3ltbGlua3MsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jYC4gQWxsIGNsZWFyOiBldmVyeXRoaW5nIGlzIHNvbGlkbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJdCYjMzk7cyBzb2xlbHkgbW9kaWZ5aW5nIHRlc3RpbmcgdG9vbHMsIHdoaWNoLCB3aGlsZSBpbXBvcnRhbnQgZm9yIGRldmVsb3BtZW50LCBkb24mIzM5O3QgYWZmZWN0IGtlcm5lbCBleGVjdXRpb24gaW4gdGhlIHNhbWUgd2F5IGFzIGRyaXZlciBjb2RlIG9yIGFyY2hpdGVjdHVyZSBjaGFuZ2VzLgoKU28sIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgcnVsZXMgSSBrbm93LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gY29uZmlybSwgSSBxdWlja2x5IHNjYW4gdGhlIHJ1bGVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50czsgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlczsgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3c7IG9yIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDsgVGhlIGB0b29scy9gIGRpcmVjdG9yeSBpcyB1c3VhbGx5IG91dCBvZiBzY29wZSwgYmVjYXVzZSB1c2VyIHRvb2xzIGFyZW4mIzM5O3QgdXN1YWxseSBrZXJuZWwgY29kZS4KCkkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIHRoZSBzZWxmdGVzdHMuIE5vdyBsZXQmIzM5O3MgdXNlIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjE1OjUyLjQ5Nzg1NjQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzgxMjEwMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOToxNTo1Mi40OTc4NjE2NzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzA4NzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwMzJkODI5NDcyNzZhNTYxNDU1ZjdkOGQ2MmQyM2JhNDZiNzU4ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWNhYzY2M2RlMWQxY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTU3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcXHUwMDNjXFx1MDAzYyBNU0lYX1ZFQ1RPUilcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cXG4rXFx0ICpcXG4rXFx0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSArIHRoZVxcbitcXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcXG4rXFx0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxcbitcXHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XFxuK1xcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXFxuK1xcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxcbitcXHQgKi9cXG4rXFx0bWRpYyA9ICgoKHUzMilkYXRhKSB8XFxuK1xcdFxcdChvZmZzZXQgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcXG4rXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcXG4rXFx0XFx0RTEwMDBfTURJQ19PUF9XUklURSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHR1c2xlZXAoNTApO1xcbitcXHRcXHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xcbitcXHRcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxcbisgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXFxuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcXG4rICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxcbisgKlxcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcXFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xcbisgKiBvbiB0aGUgODI1NzZcXFwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcXFwiTUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXFxuKyAqIG9uIHRoaXMgZGV2aWNlLlxcXCIgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XFxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcXG4rICogcmF0aW9uYWxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcXG4rXFx0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXFxuK1xcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcXG4rXFx0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcXG4rXFx0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxcbitcXHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXFxuK1xcdCAqIG5vLW9wIHRoZXJlLlxcbitcXHQgKi9cXG4rXFx0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcXG4rXFxuK1xcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0xPT1BCQUNLIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xcbitcXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFxcXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcXG4rXFx0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxcbitcXHQgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xcbitcXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxcbitcXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRlJDRFBYIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRkQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NMVTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXFxuK1xcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxcbitcXHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcXG4rXFx0LypcXG4rXFx0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxcbitcXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxcbitcXHQgKiA0LjIuMS42LjEpLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDIwMDApO1xcbitcXHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rLypcXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxcbisgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0XFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxcbisgKiB2aWEgVkZJTy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0dTY0IGlvdmFfdHgsIGlvdmFfcng7XFxuK1xcdHUzMiBjdHJsLCByY3RsO1xcbitcXHR1MTYgY21kX3JlZztcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNldHhfcmluZyk7XFxuK1xcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2VyeF9yaW5nKTtcXG4rXFxuK1xcbitcXG4rXFx0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTtcXG4rXFxuK1xcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cXG4rXFx0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcXG4rXFx0aWYgKChjbWRfcmVnIFxcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XFxuK1xcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xcbitcXHRcXHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xcbitcXHRcXHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqL1xcbitcXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4IFxcdTAwM2VcXHUwMDNlIDMyKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxcbitcXHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcXFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcXG4rXFx0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxcbitcXHQgKiBkZXNjcmlwdG9ycy5cXFwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxcbitcXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxcbitcXHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xcbitcXHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xcbitcXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XFxuK1xcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXFxuK1xcdHJldHJpZXMgPSAyMDAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwKTtcXG4rXFx0fVxcbitcXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXFxuK1xcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXFxuK1xcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcXG4rXFx0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXFxuK1xcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcXFwiV2hlbiB1c2luZyB0aGVcXG4rXFx0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXFxcIiwgc28gc2V0dGluZyBMQk1fTUFDXFxuK1xcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXFxuK1xcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcXG4rXFx0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcXG4rXFx0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxcbitcXHQgKiBjb2RlIHBhdGhzLlxcbitcXHQgKi9cXG4rXFx0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcXG4rXFx0ICpcXG4rXFx0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cXG4rXFx0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXFxuK1xcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcXG4rXFx0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxcbitcXHQgKlxcbitcXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXFxuK1xcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcXG4rXFx0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxcbitcXHQgKlxcbitcXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxcbitcXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXFxuK1xcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxcbitcXHQgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLlxcbitcXHQgKlxcbitcXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXFxuK1xcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xcbitcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAwO1xcbitcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAwO1xcbitcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xcbitcXG4rXFx0aWdiLVxcdTAwM2ViYXIwID0gZGV2aWNlLVxcdTAwM2ViYXJzWzBdLnZhZGRyO1xcbitcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xcbitcXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFxcXCJJZiBhbnkgYml0cyBhcmUgc2V0XFxuK1xcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFxcXCIsIHdoaWNoIHJ1bGVzIG91dFxcbitcXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxcbitcXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxcbitcXHRcXHRcXHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0aWdiX2lycV9kaXNhYmxlKGlnYik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbitcXHRcXHR0eCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXR4X3JpbmdbaWdiLVxcdTAwM2V0eF90YWlsXTtcXG4rXFx0XFx0cnggPSBcXHUwMDI2aWdiLVxcdTAwM2VyeF9yaW5nW2lnYi1cXHUwMDNlcnhfdGFpbF07XFxuK1xcbitcXHRcXHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcXG4rXFx0XFx0bWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7XFxuK1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XFxuK1xcdFxcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcXG4rXFx0XFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcXG4rXFx0XFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxcbitcXHRcXHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcXG4rXFx0XFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcXG4rXFx0XFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9JRkNTIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcXG4rXFx0XFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cXG4rXFx0XFx0XFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXFx1MDAzY1xcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XFxuK1xcbitcXHRcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAoaWdiLVxcdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdFxcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IChpZ2ItXFx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi1cXHUwMDNlcnhfdGFpbCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXFx1MDAzZXR4X3RhaWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcXG4rICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YXFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXFxuKyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC5cXG4rICpcXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxcbisgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzIFxcXCJlcXVpdmFsZW50IHRvIGEgRDAtXFx1MDAzZUQzLVxcdTAwM2VEMCB0cmFuc2l0aW9uXFxcIiksIHNvXFxuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxcbisgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXFxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXFxuKyAqIG5lZWRlZCBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xcbitcXHR2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHR1MzIgcHJldl90YWlsO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdHByZXZfdGFpbCA9IChpZ2ItXFx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcXG4rXFx0cnggPSBcXHUwMDI2aWdiLVxcdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cXG4rXFx0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXFxuK1xcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcXG4rXFx0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXFxuK1xcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXFxuK1xcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XFxuK1xcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxcbitcXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxcbitcXHQgKiB0ZXN0cyBib3VuZGVkLlxcbitcXHQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDtcXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVxcdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcXG4rXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXFxuK1xcdFxcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJtYigpO1xcbitcXG4rXFx0aWdiX2lycV9jbGVhcihpZ2IpO1xcbitcXG4rXFx0aWdiX2lycV9lbmFibGUoaWdiKTtcXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xcbitcXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxcbitcXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxcbitcXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcXG4rXFx0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcXG4rXFx0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxcbitcXHQgKiBpcyByZXF1aXJlZC5cXG4rXFx0ICovXFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Uge1xcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuQEAgLTY4LDYgKzY5LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC05Miw2ICs5NSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0XFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxcbiB7XFxuQEAgLTEwMyw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcXG4ge1xcbiBcXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXFx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXFxuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2lvYXQvaW9hdC5jXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcXG4gZW5kaWZcXG4gXFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uMWIyOWNlZjk2YjA0ZTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA2LDYgKzEwNywyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTE5OSw5ICsyMjIsMjMgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFxcXCJpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5AQCAtNSwxMiArNSwxNCBAQFxcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wcztcXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcXG4gI2lmZGVmIF9feDg2XzY0X19cXG4gXFx0XFx1MDAyNmRzYV9vcHMsXFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4rXFx0XFx1MDAyNmlnYl9vcHMsXFxuICNlbmRpZlxcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6MTU6NTMuMDUxNTYwMjYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTgyNzUwMTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWNhYzY2M2RlMWQxY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDIwMDApO1xuK1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuK1xuK1x0LypcbitcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbitcdCAqXG4rXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuK1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4rXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4rXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4rXHQgKlxuK1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuK1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuK1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuK1x0ICpcbitcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4rXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4rXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcbitcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4rXHQgKlxuK1x0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxuK1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4rXHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4rXHRpZ2ItXHUwMDNlcnhfdGFpbCA9IDA7XG4rXG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuK1xuK1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbitcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHQvKlxuK1x0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xuK1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcIklmIGFueSBiaXRzIGFyZSBzZXRcbitcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFwiLCB3aGljaCBydWxlcyBvdXRcbitcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4rXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4rXHRcdFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4rXHR1MzIgaTtcbitcbitcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHR0eCA9IFx1MDAyNmlnYi1cdTAwM2V0eF9yaW5nW2lnYi1cdTAwM2V0eF90YWlsXTtcbitcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4rXG4rXHRcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuK1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcbitcdFx0cngtXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XG4rXHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbitcbitcdFx0dHgtXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XG4rXHRcdC8qXG4rXHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4rXHRcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcbitcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbitcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuK1x0XHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcbitcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbitcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4rXHRcdC8qXG4rXHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4rXHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbitcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4rXG4rXHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHRcdGlnYi1cdTAwM2VyeF90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbit9XG4rXG4rLypcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuKyAqXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCJlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwiKSwgc29cbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuKyAqIG5lZWRlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHR1MzIgcHJldl90YWlsO1xuK1x0aW50IHJldHJpZXM7XG4rXG4rXHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbitcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcbitcbitcdC8qXG4rXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cbitcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuK1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuK1x0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXG4rXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuK1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbitcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxuK1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbitcdCAqIHRlc3RzIGJvdW5kZWQuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDA7XG4rXHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4rXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcbitcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0XHRicmVhaztcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxuK1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbitcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4rXHRcdCAqL1xuK1x0XHRybWIoKTtcbitcbitcdGlnYl9pcnFfY2xlYXIoaWdiKTtcbitcbitcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbitcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXG4rXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuK1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4rXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxuK1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuK1x0ICogaXMgcmVxdWlyZWQuXG4rXHQgKi9cbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Uge1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuK2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbkBAIC02OCw2ICs2OSw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTUsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjFiMjljZWY5NmIwNGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDYsNiArMTA3LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMTk5LDkgKzIyMiwyMyBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHI7XG4rXG4rXHRkbyB7XG4rXHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcbitcbitcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwiaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxuXCIpO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHZmaW9fcGNpX2dldF9ncm91cF9mcm9tX2Rldihjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4rXHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOToxNTo1My4wNTE1NjE2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODI3NDc5NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb246IFNlbGZ0ZXN0IEFkZGl0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBhbGwgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AsIHNvIHRoYXQncyB0aGUgZmlyc3QgY2x1ZS4gSXQgYXBwZWFycyB3ZSdyZSBhZGRpbmcgYSBuZXcgZHJpdmVyLCBgaWdiLmNgLCB0byB0aGUgVkZJTyBzZWxmLXRlc3RzLCBhbmQgYWxzbyBtb2RpZnlpbmcgc29tZSBleGlzdGluZyBWRklPIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgZmlsZXM6IGB2ZmlvX3BjaV9kZXZpY2UuaGAsIGBsaWJ2ZmlvLm1rYCwgYHZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB2ZmlvX3BjaV9kcml2ZXIuY2AuXG5cblNpbmNlIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlICplbnRpcmVseSogY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZi10ZXN0IGZyYW1ld29yaywgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gdG8gc3VzcGVjdCB0aGV5IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IsIGNyaXRpY2FsbHksIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIG5vIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCBieSB0aGlzLiBKdXN0IHRvIGJlIHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjay5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgZnVsbCBsaXN0OiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oYCwgYWxsIHN5bWxpbmtzLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY2AuIEFsbCBjbGVhcjogZXZlcnl0aGluZyBpcyBzb2xpZGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJdCdzIHNvbGVseSBtb2RpZnlpbmcgdGVzdGluZyB0b29scywgd2hpY2gsIHdoaWxlIGltcG9ydGFudCBmb3IgZGV2ZWxvcG1lbnQsIGRvbid0IGFmZmVjdCBrZXJuZWwgZXhlY3V0aW9uIGluIHRoZSBzYW1lIHdheSBhcyBkcml2ZXIgY29kZSBvciBhcmNoaXRlY3R1cmUgY2hhbmdlcy5cblxuU28sIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgcnVsZXMgSSBrbm93LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSnVzdCB0byBjb25maXJtLCBJIHF1aWNrbHkgc2NhbiB0aGUgcnVsZXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzOyBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzOyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93OyBvciBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiIFRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgaXMgdXN1YWxseSBvdXQgb2Ygc2NvcGUsIGJlY2F1c2UgdXNlciB0b29scyBhcmVuJ3QgdXN1YWxseSBrZXJuZWwgY29kZS5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIHRoZSBzZWxmdGVzdHMuIE5vdyBsZXQncyB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDUxLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6MTY6MDIuODc5MDQzMjg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcljk9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 18:56:16 +0000 UTC FinishedAt: 2026-07-22 19:16:05 +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+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTk6MTU8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1Lmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX3JlZ3MuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVjYWM2NjNkZTFkMWNcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5AQCAtMCwwICYjNDM7MSw1NTcgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX3JlZ3MuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY29tcGlsZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX3JlZ3MuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF9kZWZpbmVzLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfODI1NzUuaFwmIzM0O1xuJiM0MztcbiYjNDM7I2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxuJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuJiM0MzsjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgXHUwMDNjXHUwMDNjIE1TSVhfVkVDVE9SKVxuJiM0MzsjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4mIzQzO1xuJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2Mge1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovXG4mIzQzO1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbiYjNDM7XHRcdFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4mIzQzO1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi9cbiYjNDM7XHRcdH0gd2I7XG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdFx0dTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi9cbiYjNDM7XHRcdH0gcmVhZDtcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xuJiM0MztcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4mIzQzO1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4mIzQzO1x0XHRcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cbiYjNDM7XHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuJiM0MztcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuJiM0MztcdFx0fSB3YjsgLyogd3JpdGViYWNrICovXG4mIzQzO1x0fTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2Ige1xuJiM0MztcdHZvaWQgKmJhcjA7XG4mIzQzO1x0dTMyIHR4X3RhaWw7XG4mIzQzO1x0dTMyIHJ4X3RhaWw7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4mIzQzO3tcbiYjNDM7XHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCAmIzQzOyByZWcpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbiYjNDM7e1xuJiM0MztcdHUzMiBtZGljO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgJiM0MzsgdGhlXG4mIzQzO1x0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXG4mIzQzO1x0ICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cbiYjNDM7XHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XG4mIzQzO1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbiYjNDM7XHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRtZGljID0gKCgodTMyKWRhdGEpIHxcbiYjNDM7XHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4mIzQzO1x0XHQoMSBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcbiYjNDM7XHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dXNsZWVwKDUwKTtcbiYjNDM7XHRcdG1kaWMgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfTURJQyk7XG4mIzQzO1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcbiYjNDM7ICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbiYjNDM7ICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXG4mIzQzOyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbiYjNDM7ICpcbiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXCYjMzQ7VXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuJiM0MzsgKiBvbiB0aGUgODI1NzZcJiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzIFwmIzM0O01BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuJiM0MzsgKiBvbiB0aGlzIGRldmljZS5cJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XG4mIzQzOyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbiYjNDM7ICogcmF0aW9uYWxlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdHUzMiBjdHJsO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuJiM0MztcdCAqIFFFTVUmIzM5O3MgaWdiIGVtdWxhdGlvbjogUUVNVSBvbmx5IHVwZGF0ZXMgU1RBVFVTLkxVIHZpYSBpdHNcbiYjNDM7XHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4mIzQzO1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbiYjNDM7XHQgKiBoYXJkd2FyZSBhdXRvbmVnIGNhbm5vdCBjb21wbGV0ZSBiZWZvcmUgdGhlIG5leHQgUEhZIHdyaXRlXG4mIzQzO1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuJiM0MztcdCAqIG5vLW9wIHRoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4mIzQzO1xuJiM0MztcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayAmIzQzOyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbiYjNDM7XHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4mIzQzO1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXG4mIzQzO1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuJiM0MztcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbiYjNDM7XHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuJiM0MztcdCAqIG5vcm1hbGx5IHdhaXRzIGZvciBhIHJlYWwgbmVnb3RpYXRlZCBsaW5rLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NQRF8xMDAwIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRkQgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9TTFU7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMClcbiYjNDM7XHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbiYjNDM7XHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoNTAwMDAwKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuJiM0MztcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4mIzQzO1x0ICogNC4yLjEuNi4xKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1c2xlZXAoMjAwMCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4mIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXG4mIzQzOyAqIHZpYSBWRklPLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0dTY0IGlvdmFfdHgsIGlvdmFfcng7XG4mIzQzO1x0dTMyIGN0cmwsIHJjdGw7XG4mIzQzO1x0dTE2IGNtZF9yZWc7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuJiM0MztcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXJ4X3JpbmcpO1xuJiM0MztcbiYjNDM7XG4mIzQzO1xuJiM0MztcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4mIzQzO1x0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4mIzQzO1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbiYjNDM7XHRpZiAoKGNtZF9yZWcgXHUwMDI2IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPVxuJiM0MztcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuJiM0MztcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbiYjNDM7XHRcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqL1xuJiM0MztcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4mIzQzO1x0ICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmdcbiYjNDM7XHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuJiM0MztcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuJiM0MztcdCAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4mIzQzO1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggXHUwMDNlXHUwMDNlIDMyKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XG4mIzQzO1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbiYjNDM7XHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXG4mIzQzO1x0ICogZGVzY3JpcHRvcnMuXCYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuJiM0MztcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXG4mIzQzO1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXG4mIzQzO1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbiYjNDM7XHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4mIzQzO1x0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDAwO1xuJiM0MztcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbiYjNDM7XHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2JcbiYjNDM7XHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4mIzQzO1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4mIzQzO1x0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFwmIzM0O1doZW4gdXNpbmcgdGhlXG4mIzQzO1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCYjMzQ7LCBzbyBzZXR0aW5nIExCTV9NQUNcbiYjNDM7XHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuJiM0MztcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbiYjNDM7XHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxuJiM0MztcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbiYjNDM7XHQgKiBjb2RlIHBhdGhzLlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuJiM0MztcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuJiM0MztcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbiYjNDM7XHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4mIzQzO1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuJiM0MztcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4mIzQzO1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLCBzbyBhIHNpbmdsZVxuJiM0MztcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuJiM0MztcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4mIzQzO1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XG4mIzQzO1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4mIzQzO1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuJiM0MztcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbiYjNDM7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4mIzQzO1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbiYjNDM7XG4mIzQzO1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbiYjNDM7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbiYjNDM7XHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbiYjNDM7XHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcbiYjNDM7XHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4mIzQzO1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbiYjNDM7XHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuJiM0MztcdGlnYl9yZXNldChpZ2IpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbiYjNDM7e1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4mIzQzO1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0XG4mIzQzO1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCYjMzQ7LCB3aGljaCBydWxlcyBvdXRcbiYjNDM7XHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuJiM0MztcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuJiM0MztcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4mIzQzO1x0dTMyIGk7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuJiM0MztcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4mIzQzO1xuJiM0MztcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbiYjNDM7XG4mIzQzO1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbiYjNDM7XG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MztcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuJiM0MztcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXRcbiYjNDM7XHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuJiM0MztcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbiYjNDM7XHRcdCAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4mIzQzO1x0XHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbiYjNDM7XHRcdFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXHUwMDNjXHUwMDNjIEUxMDAwX0FEVlRYRF9QQVlMRU5fU0hJRlQpO1xuJiM0MztcbiYjNDM7XHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFO1xuJiM0MztcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXHUwMDNldHhfdGFpbCk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxuJiM0MzsgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuJiM0MzsgKlxuJiM0MzsgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4mIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLVx1MDAzZUQzLVx1MDAzZUQwIHRyYW5zaXRpb25cJiMzNDspLCBzb1xuJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4mIzQzOyAqIHZhbHVlcywgYW5kIGlnYl9od19pbml0KCkgcmVzZXRzIHR4X3RhaWwvcnhfdGFpbCB0byAwLiAgVGhlIG5leHRcbiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuJiM0MzsgKiBuZWVkZWQgaGVyZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4mIzQzO1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBpZ2JfbWVtY3B5X3dhaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbiYjNDM7XHR1MzIgc3RhdHVzID0gMDtcbiYjNDM7XHR1MzIgcHJldl90YWlsO1xuJiM0MztcdGludCByZXRyaWVzO1xuJiM0MztcbiYjNDM7XHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuJiM0MztcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuJiM0MztcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcbiYjNDM7XHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbiYjNDM7XHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuJiM0MztcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XG4mIzQzO1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4mIzQzO1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbiYjNDM7XHQgKiB0ZXN0cyBib3VuZGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuJiM0MztcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJiMzOTt0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4mIzQzO1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbiYjNDM7XHRcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRybWIoKTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXG4mIzQzO1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbiYjNDM7XHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuJiM0MztcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxuJiM0MztcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4mIzQzO1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuJiM0MztcdCAqIGlzIHJlcXVpcmVkLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4mIzQzO1x0Lm5hbWUgPSBcJiMzNDtpZ2JcJiMzNDssXG4mIzQzO1x0LnByb2JlID0gaWdiX3Byb2JlLFxuJiM0MztcdC5pbml0ID0gaWdiX2luaXQsXG4mIzQzO1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4mIzQzO1x0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXG4mIzQzO1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuJiM0MztcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbiYjNDM7fTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbmluZGV4IDI4NTg4ODVhODliYmJmLi4yN2JkZjU2MTkyNWY2NSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDEsNiAmIzQzOzQxLDcgQEAgc3RydWN0IHZmaW9fcGNpX2RldmljZSB7XG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbkBAIC02OCw2ICYjNDM7NjksOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiAmIzQzOzk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiBcdFx0XHRcdFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxuIHtcbkBAIC0xMDMsNiAmIzQzOzExMiwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuJiM0MztcdFx0XHRcdFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTEyLDYgJiM0MzsxMiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gdmZpb19wY2lfZHJpdmVyLmNcbiBpZmVxICgkKEFSQ0g6eDg2XzY0PXg4NikseDg2KVxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuY1xuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uMWIyOWNlZjk2YjA0ZTcgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbkBAIC0xLDUgJiM0MzsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaWJnZW4uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG5AQCAtMTA2LDYgJiM0MzsxMDcsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleClcbiBcdHZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7XG4gfVxuIFxuJiM0MzsvKlxuJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xuJiM0MzsgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxuJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4mIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXG4mIzQzOyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcbiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuJiM0MztcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHRpbnQgaTtcbiYjNDM7XG4mIzQzO1x0Y2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICYjNDM7IGNvdW50OyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHNbaV0sIDAsXG4mIzQzO1x0XHRcdCAgICAgICBcJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCYjMzQ7LCBpKTtcbiYjNDM7XG4mIzQzO1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMTk5LDkgJiM0MzsyMjIsMjMgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbiBcdFx0ICAgICAgIHdyaXRlID8gXCYjMzQ7d3JpdGUgdG9cJiMzNDsgOiBcJiMzNDtyZWFkIGZyb21cJiMzNDssIGNvbmZpZyk7XG4gfVxuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGlvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpKVxuJiM0MztcdFx0cmV0dXJuIC1lcnJubztcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIHtcbi1cdGlvY3RsX2Fzc2VydChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTtcbiYjNDM7XHRpbnQgcjtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0ciA9IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCYjMzQ7aW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxuXCYjMzQ7KTtcbiB9XG4gXG4gc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbmluZGV4IDY4MjdmNGE2ZmViZTk5Li5hNWQwNTQ3MTMyYzQwNSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTUsMTIgJiM0Mzs1LDE0IEBAXG4gI2lmZGVmIF9feDg2XzY0X19cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wcztcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4mIzQzO1x0XHUwMDI2aWdiX29wcyxcbiAjZW5kaWZcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OGUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApuZXcgZmlsZSBtb2RlIDEyMDAwMAppbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKQEAgLTAsMCAmIzQzOzEgQEAKJiM0MzsuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uMjVjYWM2NjNkZTFkMWMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NTcgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDIwMDApOwomIzQzOwlWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgJmFtcDsgRTEwMDBfQ1RSTF9SU1QsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdAomIzQzOyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXQKJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWQKJiM0MzsgKiB2aWEgVkZJTy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJdTY0IGlvdmFfdHgsIGlvdmFfcng7CiYjNDM7CXUzMiBjdHJsLCByY3RsOwomIzQzOwl1MTYgY21kX3JlZzsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CWlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDt0eF9yaW5nKTsKJiM0MzsJaW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItJmd0O3J4X3JpbmcpOwomIzQzOwomIzQzOwomIzQzOwomIzQzOwkvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqLwomIzQzOwljdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTsKJiM0MzsJY3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqLwomIzQzOwljbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpOwomIzQzOwlpZiAoKGNtZF9yZWcgJmFtcDsgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9CiYjNDM7CSAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgewomIzQzOwkJY21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTsKJiM0MzsJCXZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi8KJiM0MzsJaWdiX3NldHVwX2xvb3BiYWNrKGlnYik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldAomIzQzOwkgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZQomIzQzOwkgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZwomIzQzOwkgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwcwomIzQzOwkgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmQKJiM0MzsJICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LgomIzQzOwkgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpOwomIzQzOwljdHJsICZhbXA7PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4ICZndDsmZ3Q7IDMyKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzYKJiM0MzsJICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYQomIzQzOwkgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsCiYjNDM7CSAqIGRlc2NyaXB0b3JzLiYjMzQ7ICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlcgomIzQzOwkgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvcgomIzQzOwkgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpcwomIzQzOwkgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0bwomIzQzOwkgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4CiYjNDM7CSAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZCAqLwomIzQzOwlyZXRyaWVzID0gMjAwMDsKJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDApIHsKJiM0MzsJCWlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgJmFtcDsgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgJmFtcDsmYW1wOwomIzQzOwkJICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSAmYW1wOyBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMCk7CiYjNDM7CX0KJiM0MzsJVkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uCiYjNDM7CSAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYgomIzQzOwkgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kCiYjNDM7CSAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWAomIzQzOwkgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgJiMzNDtXaGVuIHVzaW5nIHRoZQomIzQzOwkgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGImIzM0Oywgc28gc2V0dGluZyBMQk1fTUFDCiYjNDM7CSAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzCiYjNDM7CSAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2sKJiM0MzsJICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGUKJiM0MzsJICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbAomIzQzOwkgKiBjb2RlIHBhdGhzLgomIzQzOwkgKi8KJiM0MzsJcmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OgomIzQzOwkgKgomIzQzOwkgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0bwomIzQzOwkgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMCkKJiM0MzsJICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seQomIzQzOwkgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuCiYjNDM7CSAqCiYjNDM7CSAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC4KJiM0MzsJICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZQomIzQzOwkgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guCiYjNDM7CSAqCiYjNDM7CSAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uCiYjNDM7CSAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGUKJiM0MzsJICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlCiYjNDM7CSAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suCiYjNDM7CSAqCiYjNDM7CSAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlgKJiM0MzsJICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTsKJiM0MzsKJiM0MzsJLyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovCiYjNDM7CWlnYi0mZ3Q7dHhfdGFpbCA9IDA7CiYjNDM7CWlnYi0mZ3Q7cnhfdGFpbCA9IDA7CiYjNDM7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7CiYjNDM7CiYjNDM7CWlnYi0mZ3Q7YmFyMCA9IGRldmljZS0mZ3Q7YmFyc1swXS52YWRkcjsKJiM0MzsKJiM0MzsJaWdiX3Jlc2V0KGlnYik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuCiYjNDM7CSAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZQomIzQzOwkgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmcKJiM0MzsJICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLgomIzQzOwkgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldAomIzQzOwkgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS4KJiM0MzsJICovCiYjNDM7CXZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJdmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUMKJiM0MzsJICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyAmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXQKJiM0MzsJICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkJiMzNDssIHdoaWNoIHJ1bGVzIG91dAomIzQzOwkgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbAomIzQzOwkgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLAomIzQzOwkJCSAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4OwomIzQzOwl1MzIgaTsKJiM0MzsKJiM0MzsJaWdiX2lycV9kaXNhYmxlKGlnYik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXR4ID0gJmFtcDtpZ2ItJmd0O3R4X3JpbmdbaWdiLSZndDt0eF90YWlsXTsKJiM0MzsJCXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbaWdiLSZndDtyeF90YWlsXTsKJiM0MzsKJiM0MzsJCW1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwkJbWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApOwomIzQzOwomIzQzOwkJdHgtJmd0O3JlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0CiYjNDM7CQkgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkCiYjNDM7CQkgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YQomIzQzOwkJICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldAomIzQzOwkJICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7CiYjNDM7CQkgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aAomIzQzOwkJICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7CiYjNDM7CQkvKgomIzQzOwkJICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemUKJiM0MzsJCSAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5vbGluZm9fc3RhdHVzID0KJiM0MzsJCQljcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSAmbHQ7Jmx0OyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTsKJiM0MzsKJiM0MzsJCWlnYi0mZ3Q7dHhfdGFpbCA9IChpZ2ItJmd0O3R4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CQlpZ2ItJmd0O3J4X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItJmd0O3J4X3RhaWwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLSZndDt0eF90YWlsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmQKJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVgKJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyCiYjNDM7ICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkCiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLgomIzQzOyAqCiYjNDM7ICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldAomIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtJmd0O0QzLSZndDtEMCB0cmFuc2l0aW9uJiMzNDspLCBzbwomIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWwKJiM0MzsgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0CiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZQomIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlCiYjNDM7ICogbmVlZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7CiYjNDM7CXZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJdTMyIHByZXZfdGFpbDsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CXByZXZfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7CiYjNDM7CXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbcHJldl90YWlsXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuCiYjNDM7CSAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLAomIzQzOwkgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0CiYjNDM7CSAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLAomIzQzOwkgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFjawomIzQzOwkgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nOwomIzQzOwkgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3QKJiM0MzsJICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUEKJiM0MzsJICogdGVzdHMgYm91bmRlZC4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtJmd0O3diLnN0YXR1c19lcnJvcikpOwomIzQzOwkJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2VzbiYjMzk7dCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQQomIzQzOwkJICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlCiYjNDM7CQkgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJcm1iKCk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfY2xlYXIoaWdiKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9lbmFibGUoaWdiKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpcwomIzQzOwkgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbAomIzQzOwkgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZQomIzQzOwkgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmUKJiM0MzsJICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWQKJiM0MzsJICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKQomIzQzOwkgKiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCkBAIC00MSw2ICYjNDM7NDEsNyBAQCBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlIHsKIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCkBAIC02OCw2ICYjNDM7NjksOCBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTsKJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKQpAQCAtOTIsNiAmIzQzOzk1LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTEwMyw2ICYjNDM7MTEyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA5ZjQ3YmNlZWQxNmY0Yy4uMWYxM2NjYTA0MzQ4YjQgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawpAQCAtMTIsNiAmIzQzOzEyLDcgQEAgTElCVkZJT19DICYjNDM7PSB2ZmlvX3BjaV9kcml2ZXIuYwogaWZlcSAoJChBUkNIOng4Nl82ND14ODYpLHg4NikKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pb2F0L2lvYXQuYwogTElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2RzYS9kc2EuYwomIzQzO0xJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9pZ2IvaWdiLmMKIGVuZGlmCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IGZjNzVlMDRlZjAxMGNmLi4xYjI5Y2VmOTZiMDRlNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliZ2VuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CkBAIC0xMDYsNiAmIzQzOzEwNywyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KQogCXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nCiYjNDM7ICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2UKJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlCiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGUKJiM0MzsgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzCiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHZlY3RvcjsgaSAmbHQ7IHZlY3RvciAmIzQzOyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O21zaV9ldmVudGZkc1tpXSwgMCwKJiM0MzsJCQkgICAgICAgJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXG4mIzM0OywgaSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLSZndDttc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pCiB7CkBAIC0xOTksOSAmIzQzOzIyMiwyMyBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogCQkgICAgICAgd3JpdGUgPyAmIzM0O3dyaXRlIHRvJiMzNDsgOiAmIzM0O3JlYWQgZnJvbSYjMzQ7LCBjb25maWcpOwogfQogCiYjNDM7aW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmIChpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW9jdGxfYXNzZXJ0KGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl9IHdoaWxlIChyID09IC1FQUdBSU4pOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9FUShyLCAwLCAmIzM0O2lvY3RsKGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcbiYjMzQ7KTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCA2ODI3ZjRhNmZlYmU5OS4uYTVkMDU0NzEzMmM0MDUgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC01LDEyICYjNDM7NSwxNCBAQAogI2lmZGVmIF9feDg2XzY0X18KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogI2VuZGlmCiAKIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0gewogI2lmZGVmIF9feDg2XzY0X18KIAkmYW1wO2RzYV9vcHMsCiAJJmFtcDtpb2F0X29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogI2VuZGlmCiB9OwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyNDUxCgkJCQkJCQlvdXRwdXQ6IDY0CgkJCQkJCQl0aG91Z2h0czogNjcyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEV2YWx1YXRpb246IFNlbGZ0ZXN0IEFkZGl0aW9uKioKCk9rYXksIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGlzIHBhdGNoIHNlcmllcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgaWYgaXQgaW50cm9kdWNlcyBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBuZWNlc3NpdGF0ZSBmdXp6aW5nLiBUaGUgZmlsZXMgYWZmZWN0ZWQgYXJlIGFsbCB1bmRlciBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCwgc28gdGhhdCYjMzk7cyB0aGUgZmlyc3QgY2x1ZS4gSXQgYXBwZWFycyB3ZSYjMzk7cmUgYWRkaW5nIGEgbmV3IGRyaXZlciwgYGlnYi5jYCwgdG8gdGhlIFZGSU8gc2VsZi10ZXN0cywgYW5kIGFsc28gbW9kaWZ5aW5nIHNvbWUgZXhpc3RpbmcgVkZJTyB0ZXN0IGluZnJhc3RydWN0dXJlIGZpbGVzOiBgdmZpb19wY2lfZGV2aWNlLmhgLCBgbGlidmZpby5ta2AsIGB2ZmlvX3BjaV9kZXZpY2UuY2AsIGFuZCBgdmZpb19wY2lfZHJpdmVyLmNgLgoKU2luY2UgdGhlc2UgbW9kaWZpY2F0aW9ucyBhcmUgKmVudGlyZWx5KiBjb250YWluZWQgd2l0aGluIHRoZSBzZWxmLXRlc3QgZnJhbWV3b3JrLCBJIGRvbiYjMzk7dCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gdG8gc3VzcGVjdCB0aGV5IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IsIGNyaXRpY2FsbHksIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIG5vIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCBieSB0aGlzLiBKdXN0IHRvIGJlIHN1cmUsIGxldCYjMzk7cyBkb3VibGUgY2hlY2suCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBmdWxsIGxpc3Q6IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgLCBhbGwgc3ltbGlua3MsIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jYC4gQWxsIGNsZWFyOiBldmVyeXRoaW5nIGlzIHNvbGlkbHkgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLgoKVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJdCYjMzk7cyBzb2xlbHkgbW9kaWZ5aW5nIHRlc3RpbmcgdG9vbHMsIHdoaWNoLCB3aGlsZSBpbXBvcnRhbnQgZm9yIGRldmVsb3BtZW50LCBkb24mIzM5O3QgYWZmZWN0IGtlcm5lbCBleGVjdXRpb24gaW4gdGhlIHNhbWUgd2F5IGFzIGRyaXZlciBjb2RlIG9yIGFyY2hpdGVjdHVyZSBjaGFuZ2VzLgoKU28sIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgcnVsZXMgSSBrbm93LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC4KCkp1c3QgdG8gY29uZmlybSwgSSBxdWlja2x5IHNjYW4gdGhlIHJ1bGVzOiAmIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnMgbW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50czsgcHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlczsgY2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkb24mIzM5O3QgYWx0ZXIgZXhlY3V0aW9uIGZsb3c7IG9yIGNvZGUgcGF0aHMgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDsgVGhlIGB0b29scy9gIGRpcmVjdG9yeSBpcyB1c3VhbGx5IG91dCBvZiBzY29wZSwgYmVjYXVzZSB1c2VyIHRvb2xzIGFyZW4mIzM5O3QgdXN1YWxseSBrZXJuZWwgY29kZS4KCkkmIzM5O20gY29uZmlkZW50IGluIG15IGFzc2Vzc21lbnQuIEkmIzM5O2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIHRoZSBzZWxmdGVzdHMuIE5vdyBsZXQmIzM5O3MgdXNlIHRoZSBzZXQtcmVzdWx0cyB0b29sLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE5OjE2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE5OjE1OjUyLjQ5Nzg1NjQ1MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzgxMjEwMjAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOToxNTo1Mi40OTc4NjE2NzJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1MzA4NzE2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGEwMzJkODI5NDcyNzZhNTYxNDU1ZjdkOGQ2MmQyM2JhNDZiNzU4ZTZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2ZFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMTNcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWNhYzY2M2RlMWQxY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTU3IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcXHUwMDNjXFx1MDAzYyBNU0lYX1ZFQ1RPUilcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cXG4rXFx0ICpcXG4rXFx0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSArIHRoZVxcbitcXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcXG4rXFx0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxcbitcXHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XFxuK1xcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXFxuK1xcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxcbitcXHQgKi9cXG4rXFx0bWRpYyA9ICgoKHUzMilkYXRhKSB8XFxuK1xcdFxcdChvZmZzZXQgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcXG4rXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcXG4rXFx0XFx0RTEwMDBfTURJQ19PUF9XUklURSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHR1c2xlZXAoNTApO1xcbitcXHRcXHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xcbitcXHRcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxcbisgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXFxuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcXG4rICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxcbisgKlxcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcXFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xcbisgKiBvbiB0aGUgODI1NzZcXFwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcXFwiTUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXFxuKyAqIG9uIHRoaXMgZGV2aWNlLlxcXCIgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XFxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcXG4rICogcmF0aW9uYWxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcXG4rXFx0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXFxuK1xcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcXG4rXFx0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcXG4rXFx0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxcbitcXHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXFxuK1xcdCAqIG5vLW9wIHRoZXJlLlxcbitcXHQgKi9cXG4rXFx0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcXG4rXFxuK1xcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0xPT1BCQUNLIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xcbitcXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFxcXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcXG4rXFx0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxcbitcXHQgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xcbitcXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxcbitcXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRlJDRFBYIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRkQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NMVTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXFxuK1xcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxcbitcXHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcXG4rXFx0LypcXG4rXFx0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxcbitcXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxcbitcXHQgKiA0LjIuMS42LjEpLlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDIwMDApO1xcbitcXHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rLypcXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxcbisgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0XFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxcbisgKiB2aWEgVkZJTy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0dTY0IGlvdmFfdHgsIGlvdmFfcng7XFxuK1xcdHUzMiBjdHJsLCByY3RsO1xcbitcXHR1MTYgY21kX3JlZztcXG4rXFx0aW50IHJldHJpZXM7XFxuK1xcbitcXHRpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNldHhfcmluZyk7XFxuK1xcdGlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2VyeF9yaW5nKTtcXG4rXFxuK1xcbitcXG4rXFx0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkxfRVhULCBjdHJsKTtcXG4rXFxuK1xcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cXG4rXFx0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcXG4rXFx0aWYgKChjbWRfcmVnIFxcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XFxuK1xcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xcbitcXHRcXHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xcbitcXHRcXHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xcbitcXHR9XFxuK1xcbitcXHQvKiBDb25maWd1cmUgUEhZIGludGVybmFsIGxvb3BiYWNrIGZvciB0ZXN0aW5nLiAqL1xcbitcXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxcbitcXHQgKiBzZWN0aW9uIDguNi4xLCBHQ1IuQ29tcGxldGlvbl9UaW1lb3V0X1Jlc2VuZCwgYml0IDE2KS4gIFRoZVxcbitcXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xcbitcXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xcbitcXHQgKiByZXRyeWluZyB0aGUgZmFpbGVkIHJlYWQgaW5kZWZpbml0ZWx5LCB3aGljaCBrZWVwcyBQQ0llIEFFUiBhbmRcXG4rXFx0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxcbitcXHQgKi9cXG4rXFx0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9HQ1IpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9HQ1JfQ01QTF9UTU9VVF9SRVNFTkQ7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFIKDApLCAodTMyKShpb3ZhX3R4IFxcdTAwM2VcXHUwMDNlIDMyKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxcbitcXHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcXFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcXG4rXFx0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxcbitcXHQgKiBkZXNjcmlwdG9ycy5cXFwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxcbitcXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxcbitcXHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXFxuK1xcdCAqXFxuK1xcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xcbitcXHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xcbitcXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XFxuK1xcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXFxuK1xcdHJldHJpZXMgPSAyMDAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0dXNsZWVwKDEwKTtcXG4rXFx0fVxcbitcXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXFxuK1xcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXFxuK1xcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcXG4rXFx0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXFxuK1xcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcXFwiV2hlbiB1c2luZyB0aGVcXG4rXFx0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXFxcIiwgc28gc2V0dGluZyBMQk1fTUFDXFxuK1xcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXFxuK1xcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcXG4rXFx0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcXG4rXFx0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxcbitcXHQgKiBjb2RlIHBhdGhzLlxcbitcXHQgKi9cXG4rXFx0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcXG4rXFx0ICpcXG4rXFx0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cXG4rXFx0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXFxuK1xcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcXG4rXFx0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxcbitcXHQgKlxcbitcXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXFxuK1xcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcXG4rXFx0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxcbitcXHQgKlxcbitcXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxcbitcXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXFxuK1xcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxcbitcXHQgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLlxcbitcXHQgKlxcbitcXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXFxuK1xcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xcbitcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAwO1xcbitcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAwO1xcbitcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xcbitcXG4rXFx0aWdiLVxcdTAwM2ViYXIwID0gZGV2aWNlLVxcdTAwM2ViYXJzWzBdLnZhZGRyO1xcbitcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xcbitcXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFxcXCJJZiBhbnkgYml0cyBhcmUgc2V0XFxuK1xcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFxcXCIsIHdoaWNoIHJ1bGVzIG91dFxcbitcXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxcbitcXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxcbitcXHRcXHRcXHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0aWdiX2lycV9kaXNhYmxlKGlnYik7XFxuK1xcbitcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY291bnQ7IGkrKykge1xcbitcXHRcXHR0eCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXR4X3JpbmdbaWdiLVxcdTAwM2V0eF90YWlsXTtcXG4rXFx0XFx0cnggPSBcXHUwMDI2aWdiLVxcdTAwM2VyeF9yaW5nW2lnYi1cXHUwMDNlcnhfdGFpbF07XFxuK1xcbitcXHRcXHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcXG4rXFx0XFx0bWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcbitcXHRcXHRyeC1cXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLmhkcl9hZGRyID0gY3B1X3RvX2xlNjQoMCk7XFxuK1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XFxuK1xcdFxcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcXG4rXFx0XFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcXG4rXFx0XFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxcbitcXHRcXHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcXG4rXFx0XFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcXG4rXFx0XFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9JRkNTIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcXG4rXFx0XFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXFxuK1xcdFxcdCAqL1xcbitcXHRcXHR0eC1cXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cXG4rXFx0XFx0XFx0Y3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgXFx1MDAzY1xcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XFxuK1xcbitcXHRcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAoaWdiLVxcdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XFxuK1xcdFxcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IChpZ2ItXFx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0fVxcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIGlnYi1cXHUwMDNlcnhfdGFpbCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCBpZ2ItXFx1MDAzZXR4X3RhaWwpO1xcbit9XFxuK1xcbisvKlxcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcXG4rICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YXFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXFxuKyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC5cXG4rICpcXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxcbisgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzIFxcXCJlcXVpdmFsZW50IHRvIGEgRDAtXFx1MDAzZUQzLVxcdTAwM2VEMCB0cmFuc2l0aW9uXFxcIiksIHNvXFxuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxcbisgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXFxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXFxuKyAqIG5lZWRlZCBoZXJlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xcbitcXHR2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHUzMiBzdGF0dXMgPSAwO1xcbitcXHR1MzIgcHJldl90YWlsO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdHByZXZfdGFpbCA9IChpZ2ItXFx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcXG4rXFx0cnggPSBcXHUwMDI2aWdiLVxcdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XFxuK1xcbitcXHQvKlxcbitcXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cXG4rXFx0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXFxuK1xcdCAqIHNwbGl0IGludG8gNDA5NSAxIEtCIGZyYW1lcy4gIEF0IDEgR2IvcyAofjEyNSBNQi9zKSB0aGUgd29yc3RcXG4rXFx0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXFxuK1xcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXFxuK1xcdCAqIGxhdGVuY3kuICBXYWl0IHVwIHRvIH4yMDAgbXMgYmVmb3JlIGRlY2xhcmluZyB0aGUgZGV2aWNlIGh1bmc7XFxuK1xcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxcbitcXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxcbitcXHQgKiB0ZXN0cyBib3VuZGVkLlxcbitcXHQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDtcXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVxcdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcXG4rXFx0XFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXFxuK1xcdFxcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHJtYigpO1xcbitcXG4rXFx0aWdiX2lycV9jbGVhcihpZ2IpO1xcbitcXG4rXFx0aWdiX2lycV9lbmFibGUoaWdiKTtcXG4rXFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNiAxKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xcbitcXHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxcbitcXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxcbitcXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcXG4rXFx0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcXG4rXFx0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxcbitcXHQgKiBpcyByZXF1aXJlZC5cXG4rXFx0ICovXFxuK1xcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XFxuK1xcbitcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XFxuK1xcdC5uYW1lID0gXFxcImlnYlxcXCIsXFxuK1xcdC5wcm9iZSA9IGlnYl9wcm9iZSxcXG4rXFx0LmluaXQgPSBpZ2JfaW5pdCxcXG4rXFx0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXFxuK1xcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxcbitcXHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXFxuK1xcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcXG4rfTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Uge1xcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXFxuQEAgLTY4LDYgKzY5LDggQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC05Miw2ICs5NSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiBcXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0IHUzMiB2ZWN0b3IsIGludCBjb3VudClcXG4re1xcbitcXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4gXFx0XFx0XFx0XFx0XFx0dTMyIHZlY3RvciwgaW50IGNvdW50KVxcbiB7XFxuQEAgLTEwMyw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xcbiB9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXFxuK1xcdFxcdFxcdFxcdFxcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcXG4rfVxcbitcXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcXG4ge1xcbiBcXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXFx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuaW5kZXggOWY0N2JjZWVkMTZmNGMuLjFmMTNjY2EwNDM0OGI0IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTEyLDYgKzEyLDcgQEAgTElCVkZJT19DICs9IHZmaW9fcGNpX2RyaXZlci5jXFxuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2lvYXQvaW9hdC5jXFxuIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcXG4gZW5kaWZcXG4gXFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG5pbmRleCBmYzc1ZTA0ZWYwMTBjZi4uMWIyOWNlZjk2YjA0ZTcgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA2LDYgKzEwNywyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTE5OSw5ICsyMjIsMjMgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFxcXCJpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxcXG5cXFwiKTtcXG4gfVxcbiBcXG4gc3RhdGljIHVuc2lnbmVkIGludCB2ZmlvX3BjaV9nZXRfZ3JvdXBfZnJvbV9kZXYoY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcXG5AQCAtNSwxMiArNSwxNCBAQFxcbiAjaWZkZWYgX194ODZfNjRfX1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wcztcXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xcbitleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcztcXG4gI2VuZGlmXFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcXG4gI2lmZGVmIF9feDg2XzY0X19cXG4gXFx0XFx1MDAyNmRzYV9vcHMsXFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4rXFx0XFx1MDAyNmlnYl9vcHMsXFxuICNlbmRpZlxcbiB9O1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6MTU6NTMuMDUxNTYwMjYzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6OTgyNzUwMTYxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhMDMyZDgyOTQ3Mjc2YTU2MTQ1NWY3ZDhkNjJkMjNiYTQ2Yjc1OGU2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTk6MTU6NTEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iODRhZmZkZWM1NTk4ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZkXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjEzXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi4yNWNhYzY2M2RlMWQxY1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTU3IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTtcbitcdC8qXG4rXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4rXHQgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvblxuK1x0ICogNC4yLjEuNi4xKS5cbitcdCAqL1xuK1x0dXNsZWVwKDIwMDApO1xuK1x0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFx1MDAyNiBFMTAwMF9DVFJMX1JTVCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4rXHRyZXRyaWVzID0gMjAwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTApO1xuK1x0fVxuK1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cbitcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXG4rXHQgKiBkb2VzIG5vdCBob25vciBQSFkgcmVnaXN0ZXIgMCBiaXQgMTQgKFBIWSBpbnRlcm5hbCBsb29wYmFjaykgYW5kXG4rXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbitcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcIldoZW4gdXNpbmcgdGhlXG4rXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcIiwgc28gc2V0dGluZyBMQk1fTUFDXG4rXHQgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhc1xuK1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuK1x0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcbitcdCAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWxcbitcdCAqIGNvZGUgcGF0aHMuXG4rXHQgKi9cbitcdHJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuK1xuK1x0LypcbitcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbitcdCAqXG4rXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xuK1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4rXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4rXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXG4rXHQgKlxuK1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuK1x0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxuK1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuK1x0ICpcbitcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXG4rXHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4rXHQgKiBpbnRlcnJ1cHQgaXMgZGVsaXZlcmVkIHBlciBtZW1jcHkgYmF0Y2ggZXZlbiBpZiB0aGUgY2F1c2VcbitcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXG4rXHQgKlxuK1x0ICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWFxuK1x0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbitcbitcdC8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1xuK1x0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXG4rXHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4rXHRpZ2ItXHUwMDNlcnhfdGFpbCA9IDA7XG4rXG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9jb3VudCA9IFJJTkdfU0laRSAtIDE7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1zaSA9IE1TSVhfVkVDVE9SO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuK1xuK1x0aWdiLVx1MDAzZWJhcjAgPSBkZXZpY2UtXHUwMDNlYmFyc1swXS52YWRkcjtcbitcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXG4rXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcbitcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuK1x0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxuK1x0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcbitcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuK1x0ICovXG4rXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHQvKlxuK1x0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xuK1x0ICogcHJvZ3JhbW1lZCwgc2VjdGlvbiA4LjguNSBleHBsaWNpdGx5IHN0YXRlcyBcIklmIGFueSBiaXRzIGFyZSBzZXRcbitcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFwiLCB3aGljaCBydWxlcyBvdXRcbitcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4rXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4rXHRcdFx0ICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcbitcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XG4rXHR1MzIgaTtcbitcbitcdGlnYl9pcnFfZGlzYWJsZShpZ2IpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgY291bnQ7IGkrKykge1xuK1x0XHR0eCA9IFx1MDAyNmlnYi1cdTAwM2V0eF9yaW5nW2lnYi1cdTAwM2V0eF90YWlsXTtcbitcdFx0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1tpZ2ItXHUwMDNlcnhfdGFpbF07XG4rXG4rXHRcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xuK1x0XHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcbitcdFx0cngtXHUwMDNlcmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7XG4rXHRcdHJ4LVx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcbitcbitcdFx0dHgtXHUwMDNlcmVhZC5idWZmZXJfYWRkciA9IGNwdV90b19sZTY0KHNyYyk7XG4rXHRcdC8qXG4rXHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4rXHRcdCAqIHNlY3Rpb24gNy4yLjIuMy4gIERFWFQgbWFya3MgdGhlIGRlc2NyaXB0b3IgYXMgYWR2YW5jZWRcbitcdFx0ICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGFcbitcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuK1x0XHQgKiBGQ1MgKHdpdGhvdXQgaXQgdGhlIGZyYW1lIGlzIGRyb3BwZWQgYXMgbWFsZm9ybWVkKTtcbitcdFx0ICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGhcbitcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbitcdFx0ICovXG4rXHRcdHR4LVx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxuK1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4rXHRcdC8qXG4rXHRcdCAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplXG4rXHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5vbGluZm9fc3RhdHVzID1cbitcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4rXG4rXHRcdGlnYi1cdTAwM2V0eF90YWlsID0gKGlnYi1cdTAwM2V0eF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHRcdGlnYi1cdTAwM2VyeF90YWlsID0gKGlnYi1cdTAwM2VyeF90YWlsICsgMSkgJSBSSU5HX1NJWkU7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVx1MDAzZXJ4X3RhaWwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbit9XG4rXG4rLypcbisgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmRcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcbisgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4rICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxuKyAqXG4rICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXCJlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwiKSwgc29cbisgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsXG4rICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcbisgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZVxuKyAqIG5lZWRlZCBoZXJlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHR2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0dTMyIHN0YXR1cyA9IDA7XG4rXHR1MzIgcHJldl90YWlsO1xuK1x0aW50IHJldHJpZXM7XG4rXG4rXHRwcmV2X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbitcdHJ4ID0gXHUwMDI2aWdiLVx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcbitcbitcdC8qXG4rXHQgKiBSZWFsIDgyNTc2IGhhcmR3YXJlIHByb2Nlc3NlcyB0aGUgZGVzY3JpcHRvciByaW5nIGF0IGxpbmUgcmF0ZS5cbitcdCAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLFxuK1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuK1x0ICogdmFsaWQgbWVtY3B5IHRha2VzIH4zMiBtcyBvbiB0aGUgd2lyZSwgcGx1cyBwZXItZnJhbWUgcHJlYW1ibGUsXG4rXHQgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFja1xuK1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbitcdCAqIH42eCB0aGUgbGluZS1yYXRlIGZsb29yIGxlYXZlcyBjb21mb3J0YWJsZSBoZWFkcm9vbSBmb3IgaG9zdFxuK1x0ICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUFcbitcdCAqIHRlc3RzIGJvdW5kZWQuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDA7XG4rXHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4rXHRcdHN0YXR1cyA9IGxlMzJfdG9fY3B1KFJFQURfT05DRShyeC1cdTAwM2V3Yi5zdGF0dXNfZXJyb3IpKTtcbitcdFx0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0XHRicmVhaztcbitcdFx0dXNsZWVwKDEwMDApO1xuK1x0fVxuK1xuK1x0aWYgKHN0YXR1cyBcdTAwMjYgMSlcbitcdFx0LypcbitcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24ndCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQVxuK1x0XHQgKiBkZXN0aW5hdGlvbiBidWZmZXIgYmVmb3JlIHdlIGhhdmUgdmVyaWZpZWQgdGhhdCB0aGVcbitcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4rXHRcdCAqL1xuK1x0XHRybWIoKTtcbitcbitcdGlnYl9pcnFfY2xlYXIoaWdiKTtcbitcbitcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRyZXR1cm4gMDtcbitcbitcdC8qXG4rXHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbitcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXG4rXHQgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZVxuK1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4rXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxuK1x0ICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKVxuK1x0ICogaXMgcmVxdWlyZWQuXG4rXHQgKi9cbitcdGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7XG4rXG4rXHRyZXR1cm4gLUVUSU1FRE9VVDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7XG4rXHQubmFtZSA9IFwiaWdiXCIsXG4rXHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4rXHQuaW5pdCA9IGlnYl9pbml0LFxuK1x0LnJlbW92ZSA9IGlnYl9yZW1vdmUsXG4rXHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbitcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcbitcdC5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSxcbit9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggMjg1ODg4NWE4OWJiYmYuLjI3YmRmNTYxOTI1ZjY1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00MSw2ICs0MSw3IEBAIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2Uge1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuK2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XG4gXG4gdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcbkBAIC02OCw2ICs2OSw4IEBAIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtOTIsNiArOTUsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xuK31cbitcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTEwMyw2ICsxMTIsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4gXHR2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuK1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbit7XG4rXHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpXG4ge1xuIFx0cmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLVx1MDAzZWlvbW11LCB2YWRkciwgaW92YSk7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbmluZGV4IDlmNDdiY2VlZDE2ZjRjLi4xZjEzY2NhMDQzNDhiNCAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xMiw2ICsxMiw3IEBAIExJQlZGSU9fQyArPSB2ZmlvX3BjaV9kcml2ZXIuY1xuIGlmZXEgKCQoQVJDSDp4ODZfNjQ9eDg2KSx4ODYpXG4gTElCVkZJT19DICs9IGRyaXZlcnMvaW9hdC9pb2F0LmNcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9kc2EvZHNhLmNcbitMSUJWRklPX0MgKz0gZHJpdmVycy9pZ2IvaWdiLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggZmM3NWUwNGVmMDEwY2YuLjFiMjljZWY5NmIwNGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDYsNiArMTA3LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMTk5LDkgKzIyMiwyMyBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHI7XG4rXG4rXHRkbyB7XG4rXHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOKTtcbitcbitcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwiaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXFxuXCIpO1xuIH1cbiBcbiBzdGF0aWMgdW5zaWduZWQgaW50IHZmaW9fcGNpX2dldF9ncm91cF9mcm9tX2Rldihjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggNjgyN2Y0YTZmZWJlOTkuLmE1ZDA1NDcxMzJjNDA1IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG5AQCAtNSwxMiArNSwxNCBAQFxuICNpZmRlZiBfX3g4Nl82NF9fXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuICNlbmRpZlxuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG4gXHRcdTAwMjZkc2Ffb3BzLFxuIFx0XHUwMDI2aW9hdF9vcHMsXG4rXHRcdTAwMjZpZ2Jfb3BzLFxuICNlbmRpZlxuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxOToxNTo1My4wNTE1NjE2ODNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5ODI3NDc5NjQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlBhdGNoIEV2YWx1YXRpb246IFNlbGZ0ZXN0IEFkZGl0aW9uKipcblxuT2theSwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhpcyBwYXRjaCBzZXJpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBmaWd1cmUgb3V0IGlmIGl0IGludHJvZHVjZXMgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgbmVjZXNzaXRhdGUgZnV6emluZy4gVGhlIGZpbGVzIGFmZmVjdGVkIGFyZSBhbGwgdW5kZXIgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AsIHNvIHRoYXQncyB0aGUgZmlyc3QgY2x1ZS4gSXQgYXBwZWFycyB3ZSdyZSBhZGRpbmcgYSBuZXcgZHJpdmVyLCBgaWdiLmNgLCB0byB0aGUgVkZJTyBzZWxmLXRlc3RzLCBhbmQgYWxzbyBtb2RpZnlpbmcgc29tZSBleGlzdGluZyBWRklPIHRlc3QgaW5mcmFzdHJ1Y3R1cmUgZmlsZXM6IGB2ZmlvX3BjaV9kZXZpY2UuaGAsIGBsaWJ2ZmlvLm1rYCwgYHZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB2ZmlvX3BjaV9kcml2ZXIuY2AuXG5cblNpbmNlIHRoZXNlIG1vZGlmaWNhdGlvbnMgYXJlICplbnRpcmVseSogY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZi10ZXN0IGZyYW1ld29yaywgSSBkb24ndCBzZWUgYW55IGltbWVkaWF0ZSByZWFzb24gdG8gc3VzcGVjdCB0aGV5IHRvdWNoIHRoZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IGFyZSBleGVyY2lzZWQgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IsIGNyaXRpY2FsbHksIGZ1enppbmcuIEkgbmVlZCB0byBtYWtlICphYnNvbHV0ZWx5KiBjZXJ0YWluIG5vIHJlYWNoYWJsZSBrZXJuZWwgY29kZSBpcyBtb2RpZmllZCBieSB0aGlzLiBKdXN0IHRvIGJlIHN1cmUsIGxldCdzIGRvdWJsZSBjaGVjay5cblxuQWxyaWdodCwgbG9va2luZyBhdCB0aGUgZnVsbCBsaXN0OiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgLCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oYCwgYWxsIHN5bWxpbmtzLCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaGAsIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rYCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jYCwgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY2AuIEFsbCBjbGVhcjogZXZlcnl0aGluZyBpcyBzb2xpZGx5IHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYC5cblxuVGhlcmVmb3JlLCB0aGUgcGF0Y2ggZG9lcyAqbm90KiBpbnRyb2R1Y2UgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgaXRzZWxmLiBJdCdzIHNvbGVseSBtb2RpZnlpbmcgdGVzdGluZyB0b29scywgd2hpY2gsIHdoaWxlIGltcG9ydGFudCBmb3IgZGV2ZWxvcG1lbnQsIGRvbid0IGFmZmVjdCBrZXJuZWwgZXhlY3V0aW9uIGluIHRoZSBzYW1lIHdheSBhcyBkcml2ZXIgY29kZSBvciBhcmNoaXRlY3R1cmUgY2hhbmdlcy5cblxuU28sIGFjY29yZGluZyB0byBteSB1bmRlcnN0YW5kaW5nIGFuZCB0aGUgcnVsZXMgSSBrbm93LCBgV29ydGhGdXp6aW5nYCBzaG91bGQgYmUgYGZhbHNlYC5cblxuSnVzdCB0byBjb25maXJtLCBJIHF1aWNrbHkgc2NhbiB0aGUgcnVsZXM6IFwiUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWlucyBtb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzOyBwdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzOyBjaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvbid0IGFsdGVyIGV4ZWN1dGlvbiBmbG93OyBvciBjb2RlIHBhdGhzIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiIFRoZSBgdG9vbHMvYCBkaXJlY3RvcnkgaXMgdXN1YWxseSBvdXQgb2Ygc2NvcGUsIGJlY2F1c2UgdXNlciB0b29scyBhcmVuJ3QgdXN1YWxseSBrZXJuZWwgY29kZS5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBhc3Nlc3NtZW50LiBJJ2xsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYCB3aXRoIHRoZSByZWFzb25pbmcgdGhhdCB0aGUgcGF0Y2ggc29sZWx5IG1vZGlmaWVzIHRoZSBzZWxmdGVzdHMuIE5vdyBsZXQncyB1c2UgdGhlIHNldC1yZXN1bHRzIHRvb2wuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNDUxLCJPdXRwdXRUb2tlbnMiOjY0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTk6MTY6MDIuODc5MDQzMjg2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowcljk9[1] Phase: Running StartedAt: 2026-07-22 19:16:15 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowcljk9[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-22 19:16:15 +0000 UTC FinishedAt: 2026-07-22 19:16:43 +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,}