Name: series-workflowv289b Phase: Failed StartedAt: 2026-07-31 05:37:29 +0000 UTC FinishedAt: 2026-07-31 06:13:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv289b[0] Phase: Succeeded StartedAt: 2026-07-31 05:37:29 +0000 UTC FinishedAt: 2026-07-31 06:12:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv289b[0].run-triage Phase: Succeeded StartedAt: 2026-07-31 05:37:29 +0000 UTC FinishedAt: 2026-07-31 06:12:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI3ZDFjNDdlZDc2ZTdlMjA0MDczOTUzMWYwODBmNTEyMGVkYmJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA2OjEyOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGFkYWQxNWYxNmEwZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU3OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldHJpZXMgPSAyMDtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbiYjNDM7XHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbiYjNDM7XHQgKiBpZ2JfZ2V0X2F1dG9fcmRfZG9uZSgpIGluIHRoZSBpZ2IgZHJpdmVyOiBBVVRPX1JEIGltcGxpZXMgYm90aCB0aGF0XG4mIzQzO1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcbiYjNDM7XHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbiYjNDM7XHQgKiBjb21wbGV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4mIzQzO1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4mIzQzO1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuJiM0MztcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbiYjNDM7XHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4mIzQzO1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbiYjNDM7XHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4mIzQzO1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4mIzQzO1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiAmIzQzOzg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NtZF9jbGVhcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUxNiBiaXRzKVxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxuIHtcbiBcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcJiMzNDt3cml0ZSB0b1wmIzM0OyA6IFwmIzM0O3JlYWQgZnJvbVwmIzM0OywgY29uZmlnKTtcbiB9XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuJiM0MztcdGludCByZXRyaWVzID0gMjA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0dXNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJpZXMtLSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwmIzM0O2lvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxcblwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCAmIzQzOzYsOCBAQFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiAjZW5kaWZcbi1cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuIH07XG4gXG4gdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwNjoxMjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjRhZGFkMTVmMTZhMGQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0cmllcyA9IDIwOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmQKJiM0MzsJICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nCiYjNDM7CSAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXQKJiM0MzsJICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDAgJmFtcDsmYW1wOyAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSAmYW1wOyBFMTAwMF9FRUNEX0FVVE9fUkQpKQomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LAomIzQzOwkgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXQKJiM0MzsJICogY29tcGxldGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyaWVzICZsdDsgMCkgewomIzQzOwkJVkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpICZhbXA7IEUxMDAwX0NUUkxfUlNULCAwLAomIzQzOwkJCSAgICAgICAmIzM0O0RldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZCkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXQKJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0CiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkCiYjNDM7ICogdmlhIFZGSU8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXU2NCBpb3ZhX3R4LCBpb3ZhX3J4OwomIzQzOwl1MzIgY3RybCwgcmN0bDsKJiM0MzsJdTE2IGNtZF9yZWc7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDtyeF9yaW5nKTsKJiM0MzsKJiM0MzsKJiM0MzsKJiM0MzsJLyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi8KJiM0MzsJY21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTsKJiM0MzsJaWYgKChjbWRfcmVnICZhbXA7IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPQomIzQzOwkgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHsKJiM0MzsJCWNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiYjNDM7CQl2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovCiYjNDM7CWlnYl9zZXR1cF9sb29wYmFjayhpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2CiYjNDM7CSAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6ICYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGEKJiM0MzsJICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbAomIzQzOwkgKiBkZXNjcmlwdG9ycy4mIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIKJiM0MzsJICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3IKJiM0MzsJICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXMKJiM0MzsJICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG8KJiM0MzsJICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OAomIzQzOwkgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpICZhbXA7IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgJmFtcDsgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTApOwomIzQzOwl9CiYjNDM7CVZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDoKJiM0MzsJICoKJiM0MzsJICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG8KJiM0MzsJICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApCiYjNDM7CSAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHkKJiM0MzsJICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLgomIzQzOwkgKgomIzQzOwkgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuCiYjNDM7CSAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGUKJiM0MzsJICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLgomIzQzOwkgKgomIzQzOwkgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvbgomIzQzOwkgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlCiYjNDM7CSAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZQomIzQzOwkgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLgomIzQzOwkgKgomIzQzOwkgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYCiYjNDM7CSAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqLwomIzQzOwlpZ2ItJmd0O3R4X3RhaWwgPSAwOwomIzQzOwlpZ2ItJmd0O3J4X3RhaWwgPSAwOwomIzQzOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpOwomIzQzOwomIzQzOwlpZ2ItJmd0O2JhcjAgPSBkZXZpY2UtJmd0O2JhcnNbMF0udmFkZHI7CiYjNDM7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLgomIzQzOwkgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGUKJiM0MzsJICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nCiYjNDM7CSAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS4KJiM0MzsJICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXQKJiM0MzsJICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuCiYjNDM7CSAqLwomIzQzOwl2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTsKJiM0MzsJaWdiX3Jlc2V0KGlnYik7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDCiYjNDM7CSAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0CiYjNDM7CSAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZCYjMzQ7LCB3aGljaCBydWxlcyBvdXQKJiM0MzsJICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGwKJiM0MzsJICogY2xlYXJlZCBieSB3cml0aW5nIDEuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYywKJiM0MzsJCQkgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjICp0eDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZGlzYWJsZShpZ2IpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0eCA9ICZhbXA7aWdiLSZndDt0eF9yaW5nW2lnYi0mZ3Q7dHhfdGFpbF07CiYjNDM7CQlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW2lnYi0mZ3Q7cnhfdGFpbF07CiYjNDM7CiYjNDM7CQltZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJCW1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwomIzQzOwkJcngtJmd0O3JlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpOwomIzQzOwkJcngtJmd0O3JlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTsKJiM0MzsKJiM0MzsJCXR4LSZndDtyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOwkJICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZAomIzQzOwkJICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGEKJiM0MzsJCSAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXQKJiM0MzsJCSAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpOwomIzQzOwkJICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGgKJiM0MzsJCSAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9ERVhUIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9JRkNTIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9FT1ApOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplCiYjNDM7CQkgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQub2xpbmZvX3N0YXR1cyA9CiYjNDM7CQkJY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgJmx0OyZsdDsgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7CiYjNDM7CiYjNDM7CQlpZ2ItJmd0O3R4X3RhaWwgPSAoaWdiLSZndDt0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwkJaWdiLSZndDtyeF90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLSZndDtyeF90YWlsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi0mZ3Q7dHhfdGFpbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kCiYjNDM7ICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YCiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlcgomIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZAomIzQzOyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC4KJiM0MzsgKgomIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXQKJiM0MzsgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzICYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLSZndDtEMy0mZ3Q7RDAgdHJhbnNpdGlvbiYjMzQ7KSwgc28KJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsCiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dAomIzQzOyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmUKJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZQomIzQzOyAqIG5lZWRlZCBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJdTMyIHN0YXR1cyA9IDA7CiYjNDM7CXUzMiBwcmV2X3RhaWw7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlwcmV2X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFOwomIzQzOwlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW3ByZXZfdGFpbF07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLgomIzQzOwkgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQiwKJiM0MzsJICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdAomIzQzOwkgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSwKJiM0MzsJICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2sKJiM0MzsJICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZzsKJiM0MzsJICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0CiYjNDM7CSAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BCiYjNDM7CSAqIHRlc3RzIGJvdW5kZWQuCiYjNDM7CSAqLwomIzQzOwlyZXRyaWVzID0gMjAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LSZndDt3Yi5zdGF0dXNfZXJyb3IpKTsKJiM0MzsJCWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUEKJiM0MzsJCSAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZQomIzQzOwkJICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJtYigpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2NsZWFyKGlnYik7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZW5hYmxlKGlnYik7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXMKJiM0MzsJICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWwKJiM0MzsJICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmUKJiM0MzsJICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lCiYjNDM7CSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkCiYjNDM7CSAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUikKJiM0MzsJICogaXMgcmVxdWlyZWQuCiYjNDM7CSAqLwomIzQzOwlpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChkZXZpY2UpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1MsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzID0gewomIzQzOwkubmFtZSA9ICYjMzQ7aWdiJiMzNDssCiYjNDM7CS5wcm9iZSA9IGlnYl9wcm9iZSwKJiM0MzsJLmluaXQgPSBpZ2JfaW5pdCwKJiM0MzsJLnJlbW92ZSA9IGlnYl9yZW1vdmUsCiYjNDM7CS5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LAomIzQzOwkubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsCiYjNDM7CS5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCmluZGV4IDU5YWNlZjM4MWQwNTYuLmUxOWJkOTRiOGRkMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCkBAIC04NCw2ICYjNDM7ODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpCiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpOwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpCkBAIC0xMDgsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCSB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAogCQkJCQl1MzIgdmVjdG9yLCBpbnQgY291bnQpCiB7CkBAIC0xMTksNiAmIzQzOzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKIAl2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCSAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJdmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpCiB7CiAJcmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLSZndDtpb21tdSwgdmFkZHIsIGlvdmEpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jCiBlbmRpZgogCiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jCiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuYwogCiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpbwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCkBAIC0xLDUgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKICNpbmNsdWRlICZsdDtkaXJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpYmdlbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwpAQCAtMTA1LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCkKIAl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZwomIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlCiYjNDM7ICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZQomIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlCiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpcwomIzQzOyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uCiYjNDM7ICovCiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB2ZWN0b3I7IGkgJmx0OyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDttc2lfZXZlbnRmZHNbaV0sIDAsCiYjNDM7CQkJICAgICAgICYjMzQ7dmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxuJiMzNDssIGkpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKQogewpAQCAtMjM3LDkgJiM0MzsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSwKIAkJICAgICAgIHdyaXRlID8gJiMzNDt3cml0ZSB0byYjMzQ7IDogJiMzNDtyZWFkIGZyb20mIzM0OywgY29uZmlnKTsKIH0KIAomIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlpZiAoaW9jdGwoZGV2aWNlLSZndDtmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogewotCWlvY3RsX2Fzc2VydChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7CiYjNDM7CWludCByZXRyaWVzID0gMjA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJCWlmIChyID09IC1FQUdBSU4pCiYjNDM7CQkJdXNsZWVwKDEwMDAwKTsKJiM0MzsJfSB3aGlsZSAociA9PSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0cmllcy0tICZndDsgMCk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHIsIDAsICYjMzQ7aW9jdGwoZGV2aWNlLSZndDtmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxuJiMzNDspOwogfQogCiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCAxNTNiZjRhN2ExOWY5Li41ZTY1NDM0ZDIzMThiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNiw4ICYjNDM7Niw4IEBACiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKICNlbmRpZgotCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKIAogc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7CiAjaWZkZWYgX194ODZfNjRfXwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7CiAJJmFtcDtpb2F0X29wcywKICNlbmRpZgogCSZhbXA7bnZfZmFsY29uX29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogfTsKIAogdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NAoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDEwMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZGSU8gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGFuIGBpZ2JgIGRyaXZlciB0byBWRklPIHNlbGZ0ZXN0cy4gSW5pdGlhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBgaWdiLmNgIHdoaWNoIGltcGxlbWVudHMgYSBWRklPIGRyaXZlciB0byB0ZXN0IHRoZSBJbnRlbCA4MjU3NiBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHZmaW9fcGNpX2RldmljZS5jYC4KCk5vdywgdGhlIHByb21wdCBnaXZlcyBtZSBzcGVjaWZpYyBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIGNvZGUgdGhhdCBzeXprYWxsZXIsIG91ciBwcmltYXJ5IGZ1enplciwgdGFyZ2V0cy4KCkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgcmV2ZWFscyBhIGxpc3Qgb2YgbW9kaWZpY2F0aW9ucyB0aGF0IGRvbiYjMzk7dCB3YXJyYW50IGZ1enppbmcuIENydWNpYWxseSwgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBUaGVzZSBhcmUgKnNlbGZ0ZXN0cyosIHVzZXJzcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byB0ZXN0IHRoZSBrZXJuZWwmIzM5O3MgVkZJTyBmdW5jdGlvbmFsaXR5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgc3l6a2FsbGVyIGRpcmVjdGx5IGZ1enplcyB0aGUgKmtlcm5lbCogaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0ZXN0IHRvb2xzLiBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBub3QgdXNlci1zcGFjZSB0ZXN0cy4KCkxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBjaGVjayB0aGUgZGlmZiBvZiB0aGUgcGF0Y2ggYWdhaW4gYW5kIGNvbmZpcm0uIFRoZSBwYXRjaCBhZGRzIGBpZ2IuY2AsIG1vZGlmaWVzIHNldmVyYWwgb3RoZXIgZmlsZXMgYW5kIGhlYWRlcnMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCBkaXJlY3RvcnkuCgpTaW5jZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgc29sZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnksIGFuZCBpdCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gQWx0aG91Z2ggdGhlIHByb21wdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYHRvb2xzL2Agb3IgYHNlbGZ0ZXN0cy9gLCBpdCBkb2VzIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIGl0ICpvbmx5KiBjb250YWlucyBtb2RpZmljYXRpb25zIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBrZXJuZWwgbG9naWMuCgpJIHJlLXJlYWQgdGhlIHByb21wdCwganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEl0IGRvZXMgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIGNvZGUuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGRldGVybWluYXRpb24gaXMgKipXb3J0aEZ1enppbmc9ZmFsc2UqKiBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwNjoxMjoyNi43Nzg2MzY5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcwMjYxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6MjYuNzc4NjQ4MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njg3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDY6MTI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRhZGFkMTVmMTZhMGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5AQCAtMCwwICsxLDU3OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfcmVncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2JhcnJpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21paS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF9yZWdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF9kZWZpbmVzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF84MjU3NS5oXFxcIlxcbitcXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XFxuKyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgXFx1MDAzY1xcdTAwM2MgTVNJWF9WRUNUT1IpXFxuKyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cXG4rXFxuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xcbitcXHRcXHRcXHR1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovXFxuK1xcdFxcdFxcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cXG4rXFx0XFx0XFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xcbitcXHRcXHR9IHdiO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHRcXHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xcbitcXHRcXHRcXHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXFxuK1xcdFxcdFxcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cXG4rXFx0XFx0XFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xcbitcXHRcXHRcXHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xcbitcXHRcXHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2Ige1xcbitcXHR2b2lkICpiYXIwO1xcbitcXHR1MzIgdHhfdGFpbDtcXG4rXFx0dTMyIHJ4X3RhaWw7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnZhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKVxcbit7XFxuK1xcdHdyaXRlbCh2YWwsIGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWFkbChpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcXG4re1xcbitcXHR1MzIgbWRpYztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uXFxuK1xcdCAqXFxuK1xcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcXG4rXFx0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXFxuK1xcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cXG4rXFx0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxcbitcXHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxcbitcXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cXG4rXFx0ICovXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aW50IHJldHJpZXMgPSAyMDtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbitcXHQvKlxcbitcXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXFxuK1xcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXFxuK1xcdCAqIDQuMi4xLjYuMSkuICBUaGUgZGVsYXkgYWxzbyBlbnN1cmVzIHRoZSByZXNldCBoYXMgdGFrZW4gZWZmZWN0IGFuZFxcbitcXHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDEwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nXFxuK1xcdCAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXRcXG4rXFx0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXFxuK1xcdCAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXFx1MDAyNiBFMTAwMF9FRUNEX0FVVE9fUkQpKVxcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbiBkb2VzIG5vdCBzZXQgRTEwMDBfRUVDRF9BVVRPX1JELiBJZiB3ZSB0aW1lZCBvdXQsXFxuK1xcdCAqIGNoZWNrIGlmIENUUkwuUlNUIGlzIGNsZWFyZWQsIHdoaWNoIGlzIHdoYXQgUUVNVSB1c2VzIHRvIHNpZ25hbCByZXNldFxcbitcXHQgKiBjb21wbGV0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldHJpZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZClcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcXG4rICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXFxuKyAqIHZpYSBWRklPLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHR1NjQgaW92YV90eCwgaW92YV9yeDtcXG4rXFx0dTMyIGN0cmwsIHJjdGw7XFxuK1xcdHUxNiBjbWRfcmVnO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4rXFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XFxuK1xcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXFxuK1xcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXFxuK1xcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXFxuK1xcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxcbitcXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcdFZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cXG4rXFx0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcXG4rXFx0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxcbitcXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcXG4rXFx0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFxcXCJXaGVuIHVzaW5nIHRoZVxcbitcXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcXFwiLCBzbyBzZXR0aW5nIExCTV9NQUNcXG4rXFx0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcXG4rXFx0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xcbitcXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxcbitcXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXFxuK1xcdCAqIGNvZGUgcGF0aHMuXFxuK1xcdCAqL1xcbitcXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxcbitcXHQgKlxcbitcXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xcbitcXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcXG4rXFx0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxcbitcXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXFxuK1xcdCAqXFxuK1xcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cXG4rXFx0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxcbitcXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXFxuK1xcdCAqXFxuK1xcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXFxuK1xcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcXG4rXFx0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXFxuK1xcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXFxuK1xcdCAqXFxuK1xcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcXG4rXFx0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXFxuK1xcdGlnYi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IDA7XFxuK1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XFxuK1xcbitcXHRpZ2ItXFx1MDAzZWJhcjAgPSBkZXZpY2UtXFx1MDAzZWJhcnNbMF0udmFkZHI7XFxuK1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXFxuK1xcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxcbitcXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcXG4rXFx0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxcbitcXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxcbitcXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cXG4rXFx0ICovXFxuK1xcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXFxuK1xcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXFxcIklmIGFueSBiaXRzIGFyZSBzZXRcXG4rXFx0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXFxcIiwgd2hpY2ggcnVsZXMgb3V0XFxuK1xcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXFxuK1xcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXFxuK1xcdFxcdFxcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xcbiBcXG4raW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxcbkBAIC04NCw2ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cylcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC0xMDgsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuIHtcXG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiB7XFxuIFxcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTE2LDYgKzE2LDcgQEAgTElCVkZJT19DICs9IGRyaXZlcnMvZHNhL2RzYS5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA1LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTIzNyw5ICsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByZXRyaWVzID0gMjA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldHJpZXMtLSBcXHUwMDNlIDApO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfRVEociwgMCwgXFxcImlvY3RsKGRldmljZS1cXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTYsOCArNiw4IEBAXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuICNlbmRpZlxcbi1cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIG52X2ZhbGNvbl9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuQEAgLTE1LDYgKzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4gI2VuZGlmXFxuIFxcdFxcdTAwMjZudl9mYWxjb25fb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gfTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfZHJpdmVyX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6MjcuMjI2MzczNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAyMjUxNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwNjoxMjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5AQCAtMCwwICsxIEBAXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGFkYWQxNWYxNmEwZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTc5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpbnQgcmV0cmllcyA9IDIwO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rXHQvKlxuK1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuK1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbitcdCAqIDQuMi4xLjYuMSkuICBUaGUgZGVsYXkgYWxzbyBlbnN1cmVzIHRoZSByZXNldCBoYXMgdGFrZW4gZWZmZWN0IGFuZFxuK1x0ICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDApO1xuK1xuK1x0LypcbitcdCAqIFBvbGwgTlZNIEF1dG8gUmVhZCBEb25lIHJhdGhlciB0aGFuIENUUkwuUlNULCBtYXRjaGluZ1xuK1x0ICogaWdiX2dldF9hdXRvX3JkX2RvbmUoKSBpbiB0aGUgaWdiIGRyaXZlcjogQVVUT19SRCBpbXBsaWVzIGJvdGggdGhhdFxuK1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4rXHQgKiBjb25maWd1cmF0aW9uIGZyb20gTlZNLCB3aGljaCBpcyB3aGF0IGFjdHVhbGx5IG1ha2VzIGl0IHVzYWJsZS5cbitcdCAqL1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcbitcdC8qXG4rXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbiBkb2VzIG5vdCBzZXQgRTEwMDBfRUVDRF9BVVRPX1JELiBJZiB3ZSB0aW1lZCBvdXQsXG4rXHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbitcdCAqIGNvbXBsZXRpb24uXG4rXHQgKi9cbitcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4rXHRcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QsIDAsXG4rXHRcdFx0ICAgICAgIFwiRGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwiKTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICpcbitcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuK1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbitcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbitcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuK1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcbitcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbitcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuK1x0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFwiV2hlbiB1c2luZyB0aGVcbitcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwiLCBzbyBzZXR0aW5nIExCTV9NQUNcbitcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4rXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4rXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxuK1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuK1x0ICogY29kZSBwYXRocy5cbitcdCAqL1xuK1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XG4rXG4rXHQvKlxuK1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuK1x0ICpcbitcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4rXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbitcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbitcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbitcdCAqXG4rXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4rXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4rXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4rXHQgKlxuK1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbitcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcbitcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuK1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbitcdCAqXG4rXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4rXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXG4rXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xuK1xuK1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXG4rXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbitcdGlnYi1cdTAwM2V0eF90YWlsID0gMDtcbitcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbitcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XG4rXG4rXHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuK1xuK1x0aWdiX3Jlc2V0KGlnYik7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbitcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuK1x0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXG4rXHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4rXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuK1x0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXG4rXHQgKi9cbitcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdC8qXG4rXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4rXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwiSWYgYW55IGJpdHMgYXJlIHNldFxuK1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCIsIHdoaWNoIHJ1bGVzIG91dFxuK1x0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcbitcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcbitcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbitcdHUzMiBpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4rXHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuK1x0XHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cbitcdFx0ICovXG4rXHRcdHJtYigpO1xuK1xuK1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuK1xuK1x0aWdiX2lycV9lbmFibGUoaWdiKTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xuK1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbitcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4rXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcbitcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4rXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4rXHQgKiBpcyByZXF1aXJlZC5cbitcdCAqL1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiArODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xNiw2ICsxNiw3IEBAIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19DICs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCAyODg2ODM0M2YyYWI1Li40MDYzYTBlMmIzZGYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMjM3LDkgKzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcdGludCByO1xuK1xuK1x0ZG8ge1xuK1x0XHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdFx0aWYgKHIgPT0gLUVBR0FJTilcbitcdFx0XHR1c2xlZXAoMTAwMDApO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXRyaWVzLS0gXHUwMDNlIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCJpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXG5cIik7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCArNiw4IEBAXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuICNlbmRpZlxuLVxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG5AQCAtMTUsNiArMTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbitcdFx1MDAyNmlnYl9vcHMsXG4gfTtcbiBcbiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwNjoxMjoyNy4yMjYzNzQ5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDIyNDc5NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBWRklPIFNlbGZ0ZXN0IFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYW4gYGlnYmAgZHJpdmVyIHRvIFZGSU8gc2VsZnRlc3RzLiBJbml0aWFsbHksIEkgc2VlIGNoYW5nZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBpZ2IuY2Agd2hpY2ggaW1wbGVtZW50cyBhIFZGSU8gZHJpdmVyIHRvIHRlc3QgdGhlIEludGVsIDgyNTc2IEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlci4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdmZpb19wY2lfZGV2aWNlLmNgLlxuXG5Ob3csIHRoZSBwcm9tcHQgZ2l2ZXMgbWUgc3BlY2lmaWMgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gSSBuZWVkIHRvIGNhcmVmdWxseSBldmFsdWF0ZSB0aGlzLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBjb2RlIHRoYXQgc3l6a2FsbGVyLCBvdXIgcHJpbWFyeSBmdXp6ZXIsIHRhcmdldHMuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwcm9tcHQncyBjcml0ZXJpYSByZXZlYWxzIGEgbGlzdCBvZiBtb2RpZmljYXRpb25zIHRoYXQgZG9uJ3Qgd2FycmFudCBmdXp6aW5nLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICpzZWxmdGVzdHMqLCB1c2Vyc3BhY2UgcHJvZ3JhbXMgZGVzaWduZWQgdG8gdGVzdCB0aGUga2VybmVsJ3MgVkZJTyBmdW5jdGlvbmFsaXR5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgc3l6a2FsbGVyIGRpcmVjdGx5IGZ1enplcyB0aGUgKmtlcm5lbCogaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0ZXN0IHRvb2xzLiBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBub3QgdXNlci1zcGFjZSB0ZXN0cy5cblxuTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgY2hlY2sgdGhlIGRpZmYgb2YgdGhlIHBhdGNoIGFnYWluIGFuZCBjb25maXJtLiBUaGUgcGF0Y2ggYWRkcyBgaWdiLmNgLCBtb2RpZmllcyBzZXZlcmFsIG90aGVyIGZpbGVzIGFuZCBoZWFkZXJzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AgZGlyZWN0b3J5LlxuXG5TaW5jZSB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFyZSBzb2xlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeSwgYW5kIGl0IGRvZXNuJ3QgdG91Y2ggYW55IGNvcmUga2VybmVsIGNvZGUsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEknbSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gQWx0aG91Z2ggdGhlIHByb21wdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBgdG9vbHMvYCBvciBgc2VsZnRlc3RzL2AsIGl0IGRvZXMgc2F5IHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgaXQgKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdGhhdCBkb24ndCBhZmZlY3Qga2VybmVsIGxvZ2ljLlxuXG5JIHJlLXJlYWQgdGhlIHByb21wdCwganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEl0IGRvZXMgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyAqKldvcnRoRnV6emluZz1mYWxzZSoqIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODQsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6NDEuMjQ4ODU4Njk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv289b[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-31 05:37:29 +0000 UTC FinishedAt: 2026-07-31 06:12:42 +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+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLyBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMDI3ZDFjNDdlZDc2ZTdlMjA0MDczOTUzMWYwODBmNTEyMGVkYmJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDMxIDA2OjEyOjI1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGFkYWQxNWYxNmEwZFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU3OSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldHJpZXMgPSAyMDtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbiYjNDM7XHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbiYjNDM7XHQgKiBpZ2JfZ2V0X2F1dG9fcmRfZG9uZSgpIGluIHRoZSBpZ2IgZHJpdmVyOiBBVVRPX1JEIGltcGxpZXMgYm90aCB0aGF0XG4mIzQzO1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcbiYjNDM7XHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbiYjNDM7XHQgKiBjb21wbGV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LyogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDA7XG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuJiM0MztcdFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR1c2xlZXAoMTApO1xuJiM0MztcdH1cbiYjNDM7XHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDpcbiYjNDM7XHQgKlxuJiM0MztcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4mIzQzO1x0ICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApXG4mIzQzO1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuJiM0MztcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbiYjNDM7XHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4mIzQzO1x0ICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbiYjNDM7XHQgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlXG4mIzQzO1x0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXG4mIzQzO1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiAmIzQzOzg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NtZF9jbGVhcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUxNiBiaXRzKVxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxuIHtcbiBcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcJiMzNDt3cml0ZSB0b1wmIzM0OyA6IFwmIzM0O3JlYWQgZnJvbVwmIzM0OywgY29uZmlnKTtcbiB9XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuJiM0MztcdGludCByZXRyaWVzID0gMjA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0dXNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJpZXMtLSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwmIzM0O2lvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxcblwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCAmIzQzOzYsOCBAQFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiAjZW5kaWZcbi1cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuIH07XG4gXG4gdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzMxIDA2OjEyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1bCAzMSAwNjoxMjoyNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLjRhZGFkMTVmMTZhMGQKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1NzkgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0cmllcyA9IDIwOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmQKJiM0MzsJICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nCiYjNDM7CSAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXQKJiM0MzsJICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDAgJmFtcDsmYW1wOyAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSAmYW1wOyBFMTAwMF9FRUNEX0FVVE9fUkQpKQomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LAomIzQzOwkgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXQKJiM0MzsJICogY29tcGxldGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyaWVzICZsdDsgMCkgewomIzQzOwkJVkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpICZhbXA7IEUxMDAwX0NUUkxfUlNULCAwLAomIzQzOwkJCSAgICAgICAmIzM0O0RldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZCkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXQKJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0CiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkCiYjNDM7ICogdmlhIFZGSU8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXU2NCBpb3ZhX3R4LCBpb3ZhX3J4OwomIzQzOwl1MzIgY3RybCwgcmN0bDsKJiM0MzsJdTE2IGNtZF9yZWc7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDtyeF9yaW5nKTsKJiM0MzsKJiM0MzsKJiM0MzsKJiM0MzsJLyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi8KJiM0MzsJY21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTsKJiM0MzsJaWYgKChjbWRfcmVnICZhbXA7IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPQomIzQzOwkgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHsKJiM0MzsJCWNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiYjNDM7CQl2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovCiYjNDM7CWlnYl9zZXR1cF9sb29wYmFjayhpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2CiYjNDM7CSAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6ICYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGEKJiM0MzsJICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbAomIzQzOwkgKiBkZXNjcmlwdG9ycy4mIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIKJiM0MzsJICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3IKJiM0MzsJICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXMKJiM0MzsJICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG8KJiM0MzsJICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OAomIzQzOwkgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi8KJiM0MzsJcmV0cmllcyA9IDIwMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpICZhbXA7IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpICZhbXA7JmFtcDsKJiM0MzsJCSAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgJmFtcDsgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl1c2xlZXAoMTApOwomIzQzOwl9CiYjNDM7CVZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFByb2dyYW0gTVNJLVggaW50ZXJydXB0IHJvdXRpbmcgcGVyIDgyNTc2IGRhdGFzaGVldDoKJiM0MzsJICoKJiM0MzsJICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG8KJiM0MzsJICogcm91dGUgaW50ZXJydXB0IGNhdXNlcyB0aHJvdWdoIElWQVIgbWFwcGluZywgYW5kIEVJQU1FIChiaXQgMzApCiYjNDM7CSAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHkKJiM0MzsJICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLgomIzQzOwkgKgomIzQzOwkgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuCiYjNDM7CSAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGUKJiM0MzsJICogdGVzdCBjYW4gc2VlIHNwdXJpb3VzIGludGVycnVwdHMgb24gdGhlIG5leHQgbWVtY3B5IGJhdGNoLgomIzQzOwkgKgomIzQzOwkgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvbgomIzQzOwkgKiBNU0ktWCBhc3NlcnRpb24gKGVmZmVjdGl2ZSBiZWNhdXNlIEVJQU1FIGlzIHNldCksIHNvIGEgc2luZ2xlCiYjNDM7CSAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZQomIzQzOwkgKiByZS1hc3NlcnRzIGJlZm9yZSBzb2Z0d2FyZSByZS1lbmFibGVzIHRoZSBtYXNrLgomIzQzOwkgKgomIzQzOwkgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYCiYjNDM7CSAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBpbnRlcnJ1cHRzIG9uIHZlY3RvciAwICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7CiYjNDM7CS8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqLwomIzQzOwlpZ2ItJmd0O3R4X3RhaWwgPSAwOwomIzQzOwlpZ2ItJmd0O3J4X3RhaWwgPSAwOwomIzQzOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7CiYjNDM7CWRldmljZS0mZ3Q7ZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0dFKGRldmljZS0mZ3Q7ZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpOwomIzQzOwomIzQzOwlpZ2ItJmd0O2JhcjAgPSBkZXZpY2UtJmd0O2JhcnNbMF0udmFkZHI7CiYjNDM7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLgomIzQzOwkgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGUKJiM0MzsJICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nCiYjNDM7CSAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS4KJiM0MzsJICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXQKJiM0MzsJICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuCiYjNDM7CSAqLwomIzQzOwl2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTsKJiM0MzsKJiM0MzsJaWdiX2h3X2luaXQoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTsKJiM0MzsJaWdiX3Jlc2V0KGlnYik7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwkvKgomIzQzOwkgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDCiYjNDM7CSAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgJiMzNDtJZiBhbnkgYml0cyBhcmUgc2V0CiYjNDM7CSAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZCYjMzQ7LCB3aGljaCBydWxlcyBvdXQKJiM0MzsJICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGwKJiM0MzsJICogY2xlYXJlZCBieSB3cml0aW5nIDEuCiYjNDM7CSAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYywKJiM0MzsJCQkgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJc3RydWN0IGlnYl90eF9kZXNjICp0eDsKJiM0MzsJdTMyIGk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZGlzYWJsZShpZ2IpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgY291bnQ7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl0eCA9ICZhbXA7aWdiLSZndDt0eF9yaW5nW2lnYi0mZ3Q7dHhfdGFpbF07CiYjNDM7CQlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW2lnYi0mZ3Q7cnhfdGFpbF07CiYjNDM7CiYjNDM7CQltZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTsKJiM0MzsJCW1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwomIzQzOwkJcngtJmd0O3JlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpOwomIzQzOwkJcngtJmd0O3JlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTsKJiM0MzsKJiM0MzsJCXR4LSZndDtyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTsKJiM0MzsJCS8qCiYjNDM7CQkgKiBCdWlsZCBhbiBhZHZhbmNlZCBkYXRhIGRlc2NyaXB0b3IgcGVyIDgyNTc2IGRhdGFzaGVldAomIzQzOwkJICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZAomIzQzOwkJICogKHJlcXVpcmVkIGJ5IGhhcmR3YXJlKTsgRFRZUD1kYXRhIHNlbGVjdHMgdGhlIGRhdGEKJiM0MzsJCSAqIGRlc2NyaXB0b3I7IElGQ1MgYXNrcyB0aGUgTUFDIHRvIGFwcGVuZCB0aGUgRXRoZXJuZXQKJiM0MzsJCSAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpOwomIzQzOwkJICogRU9QIG1hcmtzIGVuZCBvZiBwYWNrZXQuICBEVEFMRU4gaXMgdGhlIGJ1ZmZlciBsZW5ndGgKJiM0MzsJCSAqIGluIGJpdHMgMTU6MCBvZiBjbWRfdHlwZV9sZW4uCiYjNDM7CQkgKi8KJiM0MzsJCXR4LSZndDtyZWFkLmNtZF90eXBlX2xlbiA9IGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9ERVhUIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9JRkNTIHwKJiM0MzsJCQlFMTAwMF9BRFZUWERfRENNRF9FT1ApOwomIzQzOwkJLyoKJiM0MzsJCSAqIFBBWUxFTiAoc2VjdGlvbiA3LjIuMi4zLjExKSBpcyB0aGUgdG90YWwgcGF5bG9hZCBzaXplCiYjNDM7CQkgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQub2xpbmZvX3N0YXR1cyA9CiYjNDM7CQkJY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgJmx0OyZsdDsgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7CiYjNDM7CiYjNDM7CQlpZ2ItJmd0O3R4X3RhaWwgPSAoaWdiLSZndDt0eF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwkJaWdiLSZndDtyeF90YWlsID0gKGlnYi0mZ3Q7cnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLSZndDtyeF90YWlsKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi0mZ3Q7dHhfdGFpbCk7CiYjNDM7fQomIzQzOwomIzQzOy8qCiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kCiYjNDM7ICogcmUtcHJvZ3JhbSBpdC4gIFZGSU9fREVWSUNFX1JFU0VUIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlIE1TSS1YCiYjNDM7ICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlcgomIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZAomIzQzOyAqIGV2ZW50ZmQgcmVtYWlucyB2YWxpZC4KJiM0MzsgKgomIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXQKJiM0MzsgKiA0LjIuMS41LjE6IGEgUEYgRkxSIGlzICYjMzQ7ZXF1aXZhbGVudCB0byBhIEQwLSZndDtEMy0mZ3Q7RDAgdHJhbnNpdGlvbiYjMzQ7KSwgc28KJiM0MzsgKiBFSU1TIGFuZCBFSUNSIGNvbWUgYmFjayBhcyAwIGZyb20gdGhlaXIgcmVnaXN0ZXItZGVmaW5lZCBpbml0aWFsCiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dAomIzQzOyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmUKJiM0MzsgKiBzdWJtaXNzaW9uLCBzbyBubyBleHBsaWNpdCBJTUMvRUlDUiB3cml0ZXMgb3IgcmluZyBtZW1zZXRzIGFyZQomIzQzOyAqIG5lZWRlZCBoZXJlLgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIGlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwl2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpOwomIzQzOwlpZ2JfaHdfaW5pdChkZXZpY2UpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTsKJiM0MzsJc3RydWN0IGlnYl9yeF9kZXNjICpyeDsKJiM0MzsJdTMyIHN0YXR1cyA9IDA7CiYjNDM7CXUzMiBwcmV2X3RhaWw7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlwcmV2X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFOwomIzQzOwlyeCA9ICZhbXA7aWdiLSZndDtyeF9yaW5nW3ByZXZfdGFpbF07CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLgomIzQzOwkgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQiwKJiM0MzsJICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdAomIzQzOwkgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSwKJiM0MzsJICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2sKJiM0MzsJICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZzsKJiM0MzsJICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0CiYjNDM7CSAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BCiYjNDM7CSAqIHRlc3RzIGJvdW5kZWQuCiYjNDM7CSAqLwomIzQzOwlyZXRyaWVzID0gMjAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJc3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LSZndDt3Yi5zdGF0dXNfZXJyb3IpKTsKJiM0MzsJCWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCQlicmVhazsKJiM0MzsJCXVzbGVlcCgxMDAwKTsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3RhdHVzICZhbXA7IDEpCiYjNDM7CQkvKgomIzQzOwkJICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUEKJiM0MzsJCSAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZQomIzQzOwkJICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuCiYjNDM7CQkgKi8KJiM0MzsJCXJtYigpOwomIzQzOwomIzQzOwlpZ2JfaXJxX2NsZWFyKGlnYik7CiYjNDM7CiYjNDM7CWlnYl9pcnFfZW5hYmxlKGlnYik7CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXMKJiM0MzsJICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWwKJiM0MzsJICogdW5tYXBwZWQtSU9WQSB0ZXN0czsgdGhlIGZhdWx0IGxlYXZlcyB0aGUgZGVzY3JpcHRvciBlbmdpbmUKJiM0MzsJICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lCiYjNDM7CSAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkCiYjNDM7CSAqIGZvciB0aGUgY3VycmVudCBwcm9jZXNzLCBzbyBhIGJyb2FkZXIgVkZJT19ERVZJQ0VfUkVTRVQgKEZMUikKJiM0MzsJICogaXMgcmVxdWlyZWQuCiYjNDM7CSAqLwomIzQzOwlpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChkZXZpY2UpOwomIzQzOwomIzQzOwlyZXR1cm4gLUVUSU1FRE9VVDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX3NlbmRfbXNpKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1MsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzO30KJiM0MzsKJiM0Mztjb25zdCBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzID0gewomIzQzOwkubmFtZSA9ICYjMzQ7aWdiJiMzNDssCiYjNDM7CS5wcm9iZSA9IGlnYl9wcm9iZSwKJiM0MzsJLmluaXQgPSBpZ2JfaW5pdCwKJiM0MzsJLnJlbW92ZSA9IGlnYl9yZW1vdmUsCiYjNDM7CS5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LAomIzQzOwkubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsCiYjNDM7CS5zZW5kX21zaSA9IGlnYl9zZW5kX21zaSwKJiM0Mzt9OwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCmluZGV4IDU5YWNlZjM4MWQwNTYuLmUxOWJkOTRiOGRkMmEgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKQEAgLTQzLDYgJiM0Mzs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9jbGVhbnVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7CiAKIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsCkBAIC04NCw2ICYjNDM7ODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpCiB2b2lkIHZmaW9fcGNpX2lycV9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiAJCQkgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpOwomIzQzO3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAomIzQzOwkJCSAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7CiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpCkBAIC0xMDgsNiAmIzQzOzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7CiB9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCSB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAogCQkJCQl1MzIgdmVjdG9yLCBpbnQgY291bnQpCiB7CkBAIC0xMTksNiAmIzQzOzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKIAl2ZmlvX3BjaV9pcnFfZGlzYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwKJiM0MzsJCQkJCSAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJdmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgaW50IF9fdG9faW92YShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHZvaWQgKnZhZGRyLCBpb3ZhX3QgKmlvdmEpCiB7CiAJcmV0dXJuIF9faW9tbXVfaHZhMmlvdmEoZGV2aWNlLSZndDtpb21tdSwgdmFkZHIsIGlvdmEpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCkBAIC0xNiw2ICYjNDM7MTYsNyBAQCBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvZHNhL2RzYS5jCiBlbmRpZgogCiBMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jCiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuYwogCiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpbwogCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jCkBAIC0xLDUgJiM0MzsxLDYgQEAKIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKICNpbmNsdWRlICZsdDtkaXJlbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7ZXJybm8uaCZndDsKICNpbmNsdWRlICZsdDtmY250bC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpYmdlbi5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGludC5oJmd0OwpAQCAtMTA1LDYgJiM0MzsxMDYsMjggQEAgdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCkKIAl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpOwogfQogCiYjNDM7LyoKJiM0MzsgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZwomIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlCiYjNDM7ICogaW50ZXJydXB0cyBhZnRlciBhIFZGSU9fREVWSUNFX1JFU0VULCB3aGljaCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZQomIzQzOyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlCiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpcwomIzQzOyAqIGhlbHBlciBkZWxpYmVyYXRlbHkgcHJlc2VydmVzIHRoZW0uCiYjNDM7ICovCiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KQomIzQzO3sKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWNoZWNrX3N1cHBvcnRlZF9pcnFfaW5kZXgoaW5kZXgpOwomIzQzOwomIzQzOwlmb3IgKGkgPSB2ZWN0b3I7IGkgJmx0OyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KQomIzQzOwkJVkZJT19BU1NFUlRfR0UoZGV2aWNlLSZndDttc2lfZXZlbnRmZHNbaV0sIDAsCiYjNDM7CQkJICAgICAgICYjMzQ7dmVjdG9yICVkIGV2ZW50ZmQgbm90IGFsbG9jYXRlZFxuJiMzNDssIGkpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS0mZ3Q7bXNpX2V2ZW50ZmRzICYjNDM7IHZlY3Rvcik7CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKQogewpAQCAtMjM3LDkgJiM0MzsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSwKIAkJICAgICAgIHdyaXRlID8gJiMzNDt3cml0ZSB0byYjMzQ7IDogJiMzNDtyZWFkIGZyb20mIzM0OywgY29uZmlnKTsKIH0KIAomIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiYjNDM7ewomIzQzOwlpZiAoaW9jdGwoZGV2aWNlLSZndDtmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpKQomIzQzOwkJcmV0dXJuIC1lcnJubzsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwogdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogewotCWlvY3RsX2Fzc2VydChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7CiYjNDM7CWludCByZXRyaWVzID0gMjA7CiYjNDM7CWludCByOwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTsKJiM0MzsJCWlmIChyID09IC1FQUdBSU4pCiYjNDM7CQkJdXNsZWVwKDEwMDAwKTsKJiM0MzsJfSB3aGlsZSAociA9PSAtRUFHQUlOICZhbXA7JmFtcDsgcmV0cmllcy0tICZndDsgMCk7CiYjNDM7CiYjNDM7CVZGSU9fQVNTRVJUX0VRKHIsIDAsICYjMzQ7aW9jdGwoZGV2aWNlLSZndDtmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxuJiMzNDspOwogfQogCiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwppbmRleCAxNTNiZjRhN2ExOWY5Li41ZTY1NDM0ZDIzMThiIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYwpAQCAtNiw4ICYjNDM7Niw4IEBACiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgZHNhX29wczsKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wczsKICNlbmRpZgotCiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wczsKJiM0MztleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wczsKIAogc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7CiAjaWZkZWYgX194ODZfNjRfXwpAQCAtMTUsNiAmIzQzOzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7CiAJJmFtcDtpb2F0X29wcywKICNlbmRpZgogCSZhbXA7bnZfZmFsY29uX29wcywKJiM0MzsJJmFtcDtpZ2Jfb3BzLAogfTsKIAogdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8zMSAwNjoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjk4NAoJCQkJCQkJb3V0cHV0OiA2NQoJCQkJCQkJdGhvdWdodHM6IDEwMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIFZGSU8gU2VsZnRlc3QgUGF0Y2ggZm9yIEZ1enppbmcgRWxpZ2liaWxpdHkqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggYWRkaW5nIGFuIGBpZ2JgIGRyaXZlciB0byBWRklPIHNlbGZ0ZXN0cy4gSW5pdGlhbGx5LCBJIHNlZSBjaGFuZ2VzIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9gIGFuZCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCwgc3BlY2lmaWNhbGx5IGFkZGluZyBgaWdiLmNgIHdoaWNoIGltcGxlbWVudHMgYSBWRklPIGRyaXZlciB0byB0ZXN0IHRoZSBJbnRlbCA4MjU3NiBHaWdhYml0IEV0aGVybmV0IENvbnRyb2xsZXIuIFRoZSBwYXRjaCBhbHNvIHRvdWNoZXMgYHZmaW9fcGNpX2RldmljZS5jYC4KCk5vdywgdGhlIHByb21wdCBnaXZlcyBtZSBzcGVjaWZpYyBjcml0ZXJpYSBmb3IgZGV0ZXJtaW5pbmcgaWYgYSBwYXRjaCBpcyAmIzM0O1dvcnRoRnV6emluZz1mYWxzZSYjMzQ7LiBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV2YWx1YXRlIHRoaXMuIFRoZSBrZXkgaXMgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIHBhdGNoIGltcGFjdHMgdGhlIGNvZGUgdGhhdCBzeXprYWxsZXIsIG91ciBwcmltYXJ5IGZ1enplciwgdGFyZ2V0cy4KCkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwcm9tcHQmIzM5O3MgY3JpdGVyaWEgcmV2ZWFscyBhIGxpc3Qgb2YgbW9kaWZpY2F0aW9ucyB0aGF0IGRvbiYjMzk7dCB3YXJyYW50IGZ1enppbmcuIENydWNpYWxseSwgdGhpcyBwYXRjaCAqb25seSogbW9kaWZpZXMgY29kZSB3aXRoaW4gdGhlIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AgZGlyZWN0b3J5LiBUaGVzZSBhcmUgKnNlbGZ0ZXN0cyosIHVzZXJzcGFjZSBwcm9ncmFtcyBkZXNpZ25lZCB0byB0ZXN0IHRoZSBrZXJuZWwmIzM5O3MgVkZJTyBmdW5jdGlvbmFsaXR5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgc3l6a2FsbGVyIGRpcmVjdGx5IGZ1enplcyB0aGUgKmtlcm5lbCogaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0ZXN0IHRvb2xzLiBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBub3QgdXNlci1zcGFjZSB0ZXN0cy4KCkxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnl0aGluZy4gSSBjaGVjayB0aGUgZGlmZiBvZiB0aGUgcGF0Y2ggYWdhaW4gYW5kIGNvbmZpcm0uIFRoZSBwYXRjaCBhZGRzIGBpZ2IuY2AsIG1vZGlmaWVzIHNldmVyYWwgb3RoZXIgZmlsZXMgYW5kIGhlYWRlcnMgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvYCBkaXJlY3RvcnkuCgpTaW5jZSB0aGUgcGF0Y2gmIzM5O3MgY2hhbmdlcyBhcmUgc29sZWx5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIHNlbGZ0ZXN0cyBkaXJlY3RvcnksIGFuZCBpdCBkb2VzbiYjMzk7dCB0b3VjaCBhbnkgY29yZSBrZXJuZWwgY29kZSwgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gQWx0aG91Z2ggdGhlIHByb21wdCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYHRvb2xzL2Agb3IgYHNlbGZ0ZXN0cy9gLCBpdCBkb2VzIHNheSB0byByZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIGl0ICpvbmx5KiBjb250YWlucyBtb2RpZmljYXRpb25zIHRoYXQgZG9uJiMzOTt0IGFmZmVjdCBrZXJuZWwgbG9naWMuCgpJIHJlLXJlYWQgdGhlIHByb21wdCwganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEl0IGRvZXMgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIGNvZGUuCgpUaGVyZWZvcmUsIG15IGZpbmFsIGRldGVybWluYXRpb24gaXMgKipXb3J0aEZ1enppbmc9ZmFsc2UqKiBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vYCBhbmQgZG9lcyBub3QgbWFrZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgY29kZSBpdHNlbGYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMzEgMDY6MTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwNjoxMjoyNi43Nzg2MzY5M1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NDcwMjYxNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6MjYuNzc4NjQ4MzhaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0Njg3NjUxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzRcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBKdWwgMzEgMDY6MTI6MjUgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxcbkBAIC0wLDAgKzEgQEBcXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjFcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfcmVncy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjRhZGFkMTVmMTZhMGRcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcXG5AQCAtMCwwICsxLDU3OSBAQFxcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuKyNpbmNsdWRlIFxcdTAwM2N1bmlzdGQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2lvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfcmVncy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpX2lkcy5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgva2VybmVsLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jb21waWxlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjYXNtL2JhcnJpZXIuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21paS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcdTAwM2VcXG4rXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF9yZWdzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF9kZWZpbmVzLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJlMTAwMF84MjU3NS5oXFxcIlxcbitcXG4rI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2IDB4MTBDOVxcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XFxuKyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxcbisjZGVmaW5lIE1TSVhfVkVDVE9SX01BU0sgKDEgXFx1MDAzY1xcdTAwM2MgTVNJWF9WRUNUT1IpXFxuKyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cXG4rXFxuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xcbitcXHRcXHRcXHR1MzIgY21kX3R5cGVfbGVuOyAvKiBDb21tYW5kL1R5cGUvTGVuZ3RoICovXFxuK1xcdFxcdFxcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cXG4rXFx0XFx0XFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xcbitcXHRcXHR9IHdiO1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHRcXHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xcbitcXHRcXHR9IHJlYWQ7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHUxNiBwa3RfaW5mbzsgICAgIC8qIFJTUyB0eXBlLCBQYWNrZXQgdHlwZSAqL1xcbitcXHRcXHRcXHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXFxuK1xcdFxcdFxcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXFxuK1xcdFxcdFxcdHUzMiBzdGF0dXNfZXJyb3I7IC8qIGV4dCBzdGF0dXMvZXJyb3IgKi9cXG4rXFx0XFx0XFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xcbitcXHRcXHRcXHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xcbitcXHRcXHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cXG4rXFx0fTtcXG4rfTtcXG4rXFxuK3N0cnVjdCBpZ2Ige1xcbitcXHR2b2lkICpiYXIwO1xcbitcXHR1MzIgdHhfdGFpbDtcXG4rXFx0dTMyIHJ4X3RhaWw7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyB0eF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XFxuK307XFxuK1xcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnZhZGRyO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKVxcbit7XFxuK1xcdHdyaXRlbCh2YWwsIGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxcbit7XFxuK1xcdHJldHVybiByZWFkbChpZ2ItXFx1MDAzZWJhcjAgKyByZWcpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcXG4re1xcbitcXHR1MzIgbWRpYztcXG4rXFx0aW50IGk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBXcml0ZSBhIFBIWSByZWdpc3RlciBvdmVyIE1ESU8uXFxuK1xcdCAqXFxuK1xcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcXG4rXFx0ICogU1dfRldfU1lOQyBQSFkgYml0KSBhY3Jvc3MgdGhlIE1ESU8gdHJhbnNhY3Rpb24gdG8gc2VyaWFsaXplIGFnYWluc3QgdGhlXFxuK1xcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cXG4rXFx0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxcbitcXHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxcbitcXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cXG4rXFx0ICovXFxuK1xcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxcbitcXHRcXHQob2Zmc2V0IFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XFxuK1xcdFxcdCgxIFxcdTAwM2NcXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XFxuK1xcdFxcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyAxMDAwOyBpKyspIHtcXG4rXFx0XFx0dXNsZWVwKDUwKTtcXG4rXFx0XFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcXG4rXFx0XFx0aWYgKG1kaWMgXFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0fVxcbitcXG4rXFx0aWYgKCEobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxcbitcXHRcXHRyZXR1cm4gLTE7XFxuK1xcbitcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKlxcbisgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xcbisgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlXFxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cXG4rICpcXG4rICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gXFxcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcXG4rICogb24gdGhlIDgyNTc2XFxcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXFxcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxcbisgKiBvbiB0aGlzIGRldmljZS5cXFwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXFxuKyAqIHJhdGlvbmFsZS5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0dTMyIGN0cmw7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xcbitcXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXFxuK1xcdCAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsXFxuK1xcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcXG4rXFx0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxcbitcXHQgKiBuby1vcCB0aGVyZS5cXG4rXFx0ICovXFxuK1xcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XFxuK1xcbitcXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cXG4rXFx0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9MT09QQkFDSyB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX1NQRUVEMTAwMCB8XFxuK1xcdFxcdFxcdCAgICBCTUNSX0ZVTExEUExYKTtcXG4rXFx0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcXFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXFxcIik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sXFxuK1xcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcXG4rXFx0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcXG4rXFx0ICogdGhlIGxpbmsgc3RhdGUgdGhlIGRlc2NyaXB0b3IgZW5naW5lIGRvZXMgbm90IHJ1biwgc2luY2UgdGhlIGNoaXBcXG4rXFx0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX1NQRF9TRUw7XFxuK1xcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxcbitcXHRcXHRFMTAwMF9DVFJMX0ZEIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TTFU7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QncyBtc2xlZXAoNTAwKVxcbitcXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcXG4rXFx0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoNTAwMDAwKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aW50IHJldHJpZXMgPSAyMDtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xcbitcXHQvKlxcbitcXHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXFxuK1xcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXFxuK1xcdCAqIDQuMi4xLjYuMSkuICBUaGUgZGVsYXkgYWxzbyBlbnN1cmVzIHRoZSByZXNldCBoYXMgdGFrZW4gZWZmZWN0IGFuZFxcbitcXHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxcbitcXHQgKi9cXG4rXFx0dXNsZWVwKDEwMDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nXFxuK1xcdCAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXRcXG4rXFx0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXFxuK1xcdCAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLlxcbitcXHQgKi9cXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDAgXFx1MDAyNlxcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXFx1MDAyNiBFMTAwMF9FRUNEX0FVVE9fUkQpKVxcbitcXHRcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbiBkb2VzIG5vdCBzZXQgRTEwMDBfRUVDRF9BVVRPX1JELiBJZiB3ZSB0aW1lZCBvdXQsXFxuK1xcdCAqIGNoZWNrIGlmIENUUkwuUlNUIGlzIGNsZWFyZWQsIHdoaWNoIGlzIHdoYXQgUUVNVSB1c2VzIHRvIHNpZ25hbCByZXNldFxcbitcXHQgKiBjb21wbGV0aW9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHJldHJpZXMgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcIkRldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZClcXFwiKTtcXG4rXFx0fVxcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpO1xcbit9XFxuK1xcbisvKlxcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcXG4rICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkXFxuKyAqIHZpYSBWRklPLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXHR1NjQgaW92YV90eCwgaW92YV9yeDtcXG4rXFx0dTMyIGN0cmwsIHJjdGw7XFxuK1xcdHUxNiBjbWRfcmVnO1xcbitcXHRpbnQgcmV0cmllcztcXG4rXFxuK1xcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVxcdTAwM2V0eF9yaW5nKTtcXG4rXFx0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXJ4X3JpbmcpO1xcbitcXG4rXFxuK1xcbitcXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0VYVF9EUlZfTE9BRDtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xcbitcXG4rXFx0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xcbitcXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xcbitcXHRpZiAoKGNtZF9yZWcgXFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cXG4rXFx0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XFxuK1xcdFxcdGNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7XFxuK1xcdFxcdHZmaW9fcGNpX2NvbmZpZ193cml0ZXcoZGV2aWNlLCBQQ0lfQ09NTUFORCwgY21kX3JlZyk7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXFxuK1xcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XFxuK1xcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXFxuK1xcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXFxuK1xcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXFxuK1xcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxcbitcXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXFxuK1xcdCAqL1xcbitcXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xcbitcXG4rXFx0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXFx1MDAzZVxcdTAwM2UgMzIpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UWERDVEwoMCksIEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBTCgwKSwgKHUzMilpb3ZhX3J4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2XFxuK1xcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFxcXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxcbitcXHQgKiB2YWx1ZSBvdGhlciB0aGFuIDAwMGIgZm9yIHRoZSA4MjU3NiB0byB3cml0ZSBiYWNrIHRoZSBzcGVjaWFsXFxuK1xcdCAqIGRlc2NyaXB0b3JzLlxcXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXFxuK1xcdCAqIHdyaXRlYmFjayBsYXlvdXQgKHNlY3Rpb24gNy4xLjUuMiksIHNvIHBvbGxpbmcgcngud2Iuc3RhdHVzX2Vycm9yXFxuK1xcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIGRpcmVjdCB3cml0ZSBhbHNvIHplcm9lcyBTUlJDVEwuQlNJWkVQQUNLRVQsIHdoaWNoIGlzXFxuK1xcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXFxuK1xcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcXG4rXFx0ICogYnl0ZXMgLS0gYW1wbGUgZm9yIHRoZSBsb29wYmFjayBmcmFtZXMgaGVyZS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cXG4rXFx0cmV0cmllcyA9IDIwMDA7XFxuK1xcdHdoaWxlIChyZXRyaWVzLS0gXFx1MDAzZSAwKSB7XFxuK1xcdFxcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpIFxcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR1c2xlZXAoMTApO1xcbitcXHR9XFxuK1xcdFZGSU9fQVNTRVJUX0dFKHJldHJpZXMsIDApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogRW5hYmxlIFJlY2VpdmVyIGFuZCBUcmFuc21pdHRlci4gIFJDVEwuTEJNX01BQyBpcyBzZXQgaW4gYWRkaXRpb25cXG4rXFx0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcXG4rXFx0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxcbitcXHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcXG4rXFx0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFxcXCJXaGVuIHVzaW5nIHRoZVxcbitcXHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcXFwiLCBzbyBzZXR0aW5nIExCTV9NQUNcXG4rXFx0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcXG4rXFx0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xcbitcXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxcbitcXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXFxuK1xcdCAqIGNvZGUgcGF0aHMuXFxuK1xcdCAqL1xcbitcXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxcbitcXHQgKlxcbitcXHQgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0b1xcbitcXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcXG4rXFx0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxcbitcXHQgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuXFxuK1xcdCAqXFxuK1xcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cXG4rXFx0ICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZVxcbitcXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXFxuK1xcdCAqXFxuK1xcdCAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uXFxuK1xcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcXG4rXFx0ICogaW50ZXJydXB0IGlzIGRlbGl2ZXJlZCBwZXIgbWVtY3B5IGJhdGNoIGV2ZW4gaWYgdGhlIGNhdXNlXFxuK1xcdCAqIHJlLWFzc2VydHMgYmVmb3JlIHNvZnR3YXJlIHJlLWVuYWJsZXMgdGhlIG1hc2suXFxuK1xcdCAqXFxuK1xcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcXG4rXFx0ICogY2F1c2UgMCB0byBNU0ktWCB2ZWN0b3IgMCBhbmQgbWFyayB0aGUgZW50cnkgdmFsaWQuXFxuK1xcdCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK1xcbitcXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XFxuK1xcbitcXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogSW5pdGlhbGl6ZSBkcml2ZXIgc3RhdGUgYW5kIGNhcGFiaWxpdHkgbGltaXRzICovXFxuK1xcdGlnYi1cXHUwMDNldHhfdGFpbCA9IDA7XFxuK1xcdGlnYi1cXHUwMDNlcnhfdGFpbCA9IDA7XFxuK1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XFxuK1xcdGRldmljZS1cXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVxcdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XFxuK1xcbitcXHRpZ2ItXFx1MDAzZWJhcjAgPSBkZXZpY2UtXFx1MDAzZWJhcnNbMF0udmFkZHI7XFxuK1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBNU0ktWCB2aWEgVkZJTyBiZWZvcmUgZGV2aWNlLXNpZGUgcmVnaXN0ZXIgcHJvZ3JhbW1pbmcuXFxuK1xcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxcbitcXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcXG4rXFx0ICogZGVwZW5kZW5jeSBvbiB0aGUgZGV2aWNlLXNpZGUgd3JpdGVzIHBlcmZvcm1lZCBieSBpZ2JfaHdfaW5pdCgpLlxcbitcXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxcbitcXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cXG4rXFx0ICovXFxuK1xcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xcbitcXG4rXFx0aWdiX2h3X2luaXQoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xcbitcXHRpZ2JfcmVzZXQoaWdiKTtcXG4rXFxuK1xcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxcbit7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2NsZWFyKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHQvKlxcbitcXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXFxuK1xcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXFxcIklmIGFueSBiaXRzIGFyZSBzZXRcXG4rXFx0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXFxcIiwgd2hpY2ggcnVsZXMgb3V0XFxuK1xcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXFxuK1xcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXFxuK1xcdFxcdFxcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcXG4rXFx0dTMyIGk7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xcbiBcXG4raW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxcbkBAIC04NCw2ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cylcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC0xMDgsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuIHtcXG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiB7XFxuIFxcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTE2LDYgKzE2LDcgQEAgTElCVkZJT19DICs9IGRyaXZlcnMvZHNhL2RzYS5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA1LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTIzNyw5ICsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByZXRyaWVzID0gMjA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldHJpZXMtLSBcXHUwMDNlIDApO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfRVEociwgMCwgXFxcImlvY3RsKGRldmljZS1cXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTYsOCArNiw4IEBAXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuICNlbmRpZlxcbi1cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIG52X2ZhbGNvbl9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuQEAgLTE1LDYgKzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4gI2VuZGlmXFxuIFxcdFxcdTAwMjZudl9mYWxjb25fb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gfTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfZHJpdmVyX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6MjcuMjI2MzczNzFaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxNDAyMjUxNjQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDAyN2QxYzQ3ZWQ3NmU3ZTIwNDA3Mzk1MzFmMDgwZjUxMjBlZGJiYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEp1bCAzMSAwNjoxMjoyNSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF84MjU3NS5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NlxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXG5AQCAtMCwwICsxIEBAXG4rLi4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwX2RlZmluZXMuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmM3MzM2MzQxNzFiYjFcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uNGFkYWQxNWYxNmEwZFxuLS0tIC9kZXYvbnVsbFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgKzEsNTc5IEBAXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuKyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjZXJybm8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY3N0ZGludC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfaWRzLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2Nhc20vYmFycmllci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXHUwMDNlXG4rXG4rI2luY2x1ZGUgXCJlMTAwMF9yZWdzLmhcIlxuKyNpbmNsdWRlIFwiZTEwMDBfZGVmaW5lcy5oXCJcbisjaW5jbHVkZSBcImUxMDAwXzgyNTc1LmhcIlxuK1xuKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzlcbisjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0XG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxIFx1MDAzY1x1MDAzYyBNU0lYX1ZFQ1RPUilcbisjZGVmaW5lIFJJTkdfU0laRSA0MDk2IC8qIE51bWJlciBvZiBkZXNjcmlwdG9ycyBpbiByaW5nICovXG4rXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXG4rXHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuK1x0XHRcdHUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovXG4rXHRcdH0gcmVhZDtcbitcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcnN2ZDsgICAgICAgIC8qIFJlc2VydmVkICovXG4rXHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbitcdFx0XHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXG4rXHRcdH0gd2I7XG4rXHR9O1xuK307XG4rXG4rc3RydWN0IGlnYl9yeF9kZXNjIHtcbitcdHVuaW9uIHtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHRcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXG4rXHRcdH0gcmVhZDtcbitcdFx0c3RydWN0IHtcbitcdFx0XHR1MTYgcGt0X2luZm87ICAgICAvKiBSU1MgdHlwZSwgUGFja2V0IHR5cGUgKi9cbitcdFx0XHR1MTYgaGRyX2luZm87ICAgICAvKiBTcGxpdCBIZWFkLCBidWYgbGVuICovXG4rXHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbitcdFx0XHR1MzIgc3RhdHVzX2Vycm9yOyAvKiBleHQgc3RhdHVzL2Vycm9yICovXG4rXHRcdFx0dTE2IGxlbmd0aDsgICAgICAgLyogUGFja2V0IGxlbmd0aCAqL1xuK1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4rXHRcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2Ige1xuK1x0dm9pZCAqYmFyMDtcbitcdHUzMiB0eF90YWlsO1xuK1x0dTMyIHJ4X3RhaWw7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuK1x0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbit9O1xuK1xuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbit9XG4rXG4rc3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbit7XG4rXHR3cml0ZWwodmFsLCBpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuK3tcbitcdHJldHVybiByZWFkbChpZ2ItXHUwMDNlYmFyMCArIHJlZyk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuK3tcbitcdHUzMiBtZGljO1xuK1x0aW50IGk7XG4rXG4rXHQvKlxuK1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuK1x0ICpcbitcdCAqIEEgcHJvZHVjdGlvbiBkcml2ZXIgd291bGQgaG9sZCB0aGUgU1cvRlcgc2VtYXBob3JlIChTV1NNLlNXRVNNQkkgKyB0aGVcbitcdCAqIFNXX0ZXX1NZTkMgUEhZIGJpdCkgYWNyb3NzIHRoZSBNRElPIHRyYW5zYWN0aW9uIHRvIHNlcmlhbGl6ZSBhZ2FpbnN0IHRoZVxuK1x0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuK1x0ICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eVxuK1x0ICogY29udGVuZGluZyBmb3IgdGhlIFBIWSwgc28gdGhlIHN5bmMgaXMgb21pdHRlZDsgaXQgc2hvdWxkIGJlIGFkZGVkIGhlcmVcbitcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuK1x0ICovXG4rXHRtZGljID0gKCgodTMyKWRhdGEpIHxcbitcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbitcdFx0KDEgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUEhZX1NISUZUKSB8XG4rXHRcdEUxMDAwX01ESUNfT1BfV1JJVEUpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9NRElDLCBtZGljKTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkrKykge1xuK1x0XHR1c2xlZXAoNTApO1xuK1x0XHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xuK1x0XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSlcbitcdFx0XHRicmVhaztcbitcdH1cbitcbitcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuK1x0XHRyZXR1cm4gLTE7XG4rXG4rXHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qXG4rICogQ29uZmlndXJlIHRoZSBkZXZpY2UgZm9yIFBIWSBpbnRlcm5hbCBsb29wYmFjayBwZXIgODI1NzYgZGF0YXNoZWV0XG4rICogc2VjdGlvbiAzLjUuNi4zLjEuICBGb3JjZSB0aGUgUEhZIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbG9vcGJhY2tcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4rICogd3JhcHMgZGF0YSBhdCB0aGUgZW5kIG9mIHRoZSBQSFkgZGF0YXBhdGggKHNlY3Rpb24gMy41LjYuMyksIHNvIHRoZVxuKyAqIHBoeXNpY2FsIGxpbmsgc3RhdGUgaXMgaXJyZWxldmFudC5cbisgKlxuKyAqIFNlY3Rpb24gMy41LjYuMSBkaXJlY3RzIHRvIFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xuKyAqIG9uIHRoZSA4MjU3NlwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcIk1BQyBMb29wYmFjayBpcyBub3QgdXNlZFxuKyAqIG9uIHRoaXMgZGV2aWNlLlwiICBSQ1RMLkxCTV9NQUMgaXMgc3RpbGwgc2V0IGVsc2V3aGVyZSBhcyBhIFFFTVUtb25seVxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcbisgKiByYXRpb25hbGUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHR1MzIgY3RybDtcbitcdGludCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogS2ljayB0aGUgYXV0b25lZyBtYWNoaW5lcnkgc29sZWx5IHRvIGJyaW5nIFNUQVRVUy5MVSB1cCB1bmRlclxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXG4rXHQgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoXG4rXHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuK1x0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxuK1x0ICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYVxuK1x0ICogbm8tb3AgdGhlcmUuXG4rXHQgKi9cbitcdCh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbitcbitcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuK1x0cmV0ID0gaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuK1x0XHRcdCAgICBCTUNSX0xPT1BCQUNLIHxcbitcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuK1x0XHRcdCAgICBCTUNSX0ZVTExEUExYKTtcbitcdFZGSU9fQVNTRVJUX0VRKHJldCwgMCwgXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcIik7XG4rXG4rXHQvKlxuK1x0ICogQnJpZWYgZGVsYXkgYmVmb3JlIGZvcmNpbmcgdGhlIE1BQywgbWlycm9yaW5nIHRoZSBrZXJuZWwgZXRodG9vbFxuK1x0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxuK1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMCk7XG4rXG4rXHQvKlxuK1x0ICogRm9yY2UgdGhlIE1BQyB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxpbmsgdXAuICBXaXRob3V0IGZvcmNpbmdcbitcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4rXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cbitcdCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9TUERfU0VMO1xuK1x0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XG4rXHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbitcdFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XG4rXHRcdEUxMDAwX0NUUkxfRkQgfFxuK1x0XHRFMTAwMF9DVFJMX1NMVTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgY3RybCk7XG4rXG4rXHQvKlxuK1x0ICogU2V0dGxpbmcgZGVsYXkgbWF0Y2hpbmcgdGhlIGtlcm5lbCBldGh0b29sIHNlbGZ0ZXN0J3MgbXNsZWVwKDUwMClcbitcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuK1x0ICogdGhlIGRhdGFzaGVldDsgZW1waXJpY2FsLCBhbmQgaW5oZXJpdGVkIGZyb20gdGhlIGtlcm5lbCBkcml2ZXIuXG4rXHQgKi9cbitcdHVzbGVlcCg1MDAwMDApO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpbnQgcmV0cmllcyA9IDIwO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4rXHQvKlxuK1x0ICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZVxuK1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbitcdCAqIDQuMi4xLjYuMSkuICBUaGUgZGVsYXkgYWxzbyBlbnN1cmVzIHRoZSByZXNldCBoYXMgdGFrZW4gZWZmZWN0IGFuZFxuK1x0ICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy5cbitcdCAqL1xuK1x0dXNsZWVwKDEwMDApO1xuK1xuK1x0LypcbitcdCAqIFBvbGwgTlZNIEF1dG8gUmVhZCBEb25lIHJhdGhlciB0aGFuIENUUkwuUlNULCBtYXRjaGluZ1xuK1x0ICogaWdiX2dldF9hdXRvX3JkX2RvbmUoKSBpbiB0aGUgaWdiIGRyaXZlcjogQVVUT19SRCBpbXBsaWVzIGJvdGggdGhhdFxuK1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4rXHQgKiBjb25maWd1cmF0aW9uIGZyb20gTlZNLCB3aGljaCBpcyB3aGF0IGFjdHVhbGx5IG1ha2VzIGl0IHVzYWJsZS5cbitcdCAqL1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4rXHRcdHVzbGVlcCgxMDAwKTtcbitcbitcdC8qXG4rXHQgKiBRRU1VJ3MgaWdiIGVtdWxhdGlvbiBkb2VzIG5vdCBzZXQgRTEwMDBfRUVDRF9BVVRPX1JELiBJZiB3ZSB0aW1lZCBvdXQsXG4rXHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbitcdCAqIGNvbXBsZXRpb24uXG4rXHQgKi9cbitcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4rXHRcdFZGSU9fQVNTRVJUX0VRKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSBcdTAwMjYgRTEwMDBfQ1RSTF9SU1QsIDAsXG4rXHRcdFx0ICAgICAgIFwiRGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwiKTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSU1DLCAweEZGRkZGRkZGKTtcbit9XG4rXG4rLypcbisgKiBQcm9ncmFtIHRoZSBkZXZpY2UgaW50byBhIHVzYWJsZSBzdGF0ZS4gIFNwbGl0IG91dCBvZiBpZ2JfaW5pdCgpIHNvIGl0XG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuKyAqIENUUkwuUlNUIGNsZWFycy4gIEV4cGVjdHMgYmFyMCB0byBiZSBtYXBwZWQgYW5kIE1TSS1YIGFscmVhZHkgZW5hYmxlZFxuKyAqIHZpYSBWRklPLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9od19pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xuK1x0dTMyIGN0cmwsIHJjdGw7XG4rXHR1MTYgY21kX3JlZztcbitcdGludCByZXRyaWVzO1xuK1xuK1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4rXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cdTAwM2VyeF9yaW5nKTtcbitcbitcbitcbitcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfRVhUX0xJTktfTU9ERV9NQVNLO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4rXG4rXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXG4rXHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuK1x0aWYgKChjbWRfcmVnIFx1MDAyNiAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkgIT1cbitcdCAgICAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKSkge1xuK1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuK1x0XHR2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpO1xuK1x0fVxuK1xuK1x0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cbitcdGlnYl9zZXR1cF9sb29wYmFjayhpZ2IpO1xuK1xuK1x0LypcbitcdCAqIERpc2FibGUgRE1BIHJlLXNlbmQgb24gUENJZSBjb21wbGV0aW9uIHRpbWVvdXQgKDgyNTc2IGRhdGFzaGVldFxuK1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbitcdCAqIG1peF9hbmRfbWF0Y2ggdGVzdCBpbnRlbnRpb25hbGx5IHN1Ym1pdHMgZGVzY3JpcHRvcnMgdGFyZ2V0aW5nXG4rXHQgKiB1bm1hcHBlZCBJT1ZBczsgd2l0aCB0aGUgZGVmYXVsdCAoc2V0KSB2YWx1ZSwgdGhlIGRldmljZSBrZWVwc1xuK1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4rXHQgKiBJT01NVSBlcnJvciBoYW5kbGluZyBidXN5IGFuZCBpbnRlcmZlcmVzIHdpdGggcmVzZXQgcmVjb3ZlcnkuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbitcdGN0cmwgXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpO1xuK1xuK1x0LyogQ29uZmlndXJlIFRYIGFuZCBSWCBkZXNjcmlwdG9yIHJpbmdzICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REQkFMKDApLCAodTMyKWlvdmFfdHgpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApLCBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFx1MDAzZVx1MDAzZSAzMikpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRFQoMCksIDApO1xuK1xuK1x0LypcbitcdCAqIFNlbGVjdCB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlciBkZXNjcmlwdG9yIGZvcm1hdC4gIFBlciA4MjU3NlxuK1x0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXCJTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuK1x0ICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbFxuK1x0ICogZGVzY3JpcHRvcnMuXCIgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4rXHQgKiB3cml0ZWJhY2sgbGF5b3V0IChzZWN0aW9uIDcuMS41LjIpLCBzbyBwb2xsaW5nIHJ4LndiLnN0YXR1c19lcnJvclxuK1x0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxuK1x0ICpcbitcdCAqIFRoZSBkaXJlY3Qgd3JpdGUgYWxzbyB6ZXJvZXMgU1JSQ1RMLkJTSVpFUEFDS0VULCB3aGljaCBpc1xuK1x0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cbitcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbitcdCAqIGJ5dGVzIC0tIGFtcGxlIGZvciB0aGUgbG9vcGJhY2sgZnJhbWVzIGhlcmUuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSwgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHQvKiBXYWl0IGZvciBUWCBhbmQgUlggcXVldWVzIHRvIGJlIGVuYWJsZWQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuK1x0ICogdG8gUEhZIGxvb3BiYWNrIGFzIGEgUUVNVS1vbmx5IGFjY29tbW9kYXRpb246IFFFTVUncyBlbXVsYXRlZCBpZ2JcbitcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbitcdCAqIHJlbGllcyBvbiBSQ1RMLkxCTV9NQUMgdG8gd3JhcCBUWCBkZXNjcmlwdG9ycyBiYWNrIHRvIHRoZSBSWFxuK1x0ICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzIFwiV2hlbiB1c2luZyB0aGVcbitcdCAqIGludGVybmFsIFBIWSwgTEJNIHNob3VsZCByZW1haW4gc2V0IHRvIDAwYlwiLCBzbyBzZXR0aW5nIExCTV9NQUNcbitcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4rXHQgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrXG4rXHQgKiBpcyBub3QgaW1wbGVtZW50ZWQgKGRhdGFzaGVldCAzLjUuNi4yKS4gIFNldHRpbmcgYm90aCBsZXRzIHRoZVxuK1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuK1x0ICogY29kZSBwYXRocy5cbitcdCAqL1xuK1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX01QRSB8ICAgICAgLyogTXVsdGljYXN0IFByb21pc2N1b3VzICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfU0VDUkM7ICAgICAvKiBTdHJpcCBDUkMgKG5lZWRlZCBmb3IgbWVtY21wKSAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTik7XG4rXG4rXHQvKlxuK1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuK1x0ICpcbitcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXG4rXHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbitcdCAqIHRvIGFwcGx5IEVJQU0gb24gTVNJLVggYXNzZXJ0aW9uICh3aXRob3V0IEVJQU1FLCBFSUFNIG9ubHlcbitcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cbitcdCAqXG4rXHQgKiBFSUFDIChzZWN0aW9uIDguOC41KTogZW5hYmxlIGF1dG8tY2xlYXIgb2YgRUlDUiBmb3IgdmVjdG9yIDAuXG4rXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXG4rXHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4rXHQgKlxuK1x0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cbitcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KSwgc28gYSBzaW5nbGVcbitcdCAqIGludGVycnVwdCBpcyBkZWxpdmVyZWQgcGVyIG1lbWNweSBiYXRjaCBldmVuIGlmIHRoZSBjYXVzZVxuK1x0ICogcmUtYXNzZXJ0cyBiZWZvcmUgc29mdHdhcmUgcmUtZW5hYmxlcyB0aGUgbWFzay5cbitcdCAqXG4rXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXG4rXHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbitcdCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlBTSwgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXG4rXHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xuK1xuK1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rXG4rXHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbitcdGlnYi1cdTAwM2V0eF90YWlsID0gMDtcbitcdGlnYi1cdTAwM2VyeF90YWlsID0gMDtcbitcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcbitcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cdTAwM2Vkcml2ZXIucmVnaW9uLnNpemUsIHNpemVvZihzdHJ1Y3QgaWdiKSk7XG4rXG4rXHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuK1xuK1x0aWdiX3Jlc2V0KGlnYik7XG4rXG4rXHQvKlxuK1x0ICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy5cbitcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuK1x0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXG4rXHQgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuXG4rXHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuK1x0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXG4rXHQgKi9cbitcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuK1xuK1x0aWdiX2h3X2luaXQoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX3JlbW92ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcbitcdGlnYl9yZXNldChpZ2IpO1xuK1xuK1x0dmZpb19wY2lfbXNpeF9kaXNhYmxlKGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfZGlzYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKVxuK3tcbitcdC8qXG4rXHQgKiBVc2Ugd3JpdGUtdG8tY2xlYXIgKGRhdGFzaGVldCA3LjMuNC4yKS4gIEluIE1TSS1YIG1vZGUgd2l0aCBFSUFDXG4rXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwiSWYgYW55IGJpdHMgYXJlIHNldFxuK1x0ICogaW4gRUlBQywgdGhlIEVJQ1IgcmVnaXN0ZXIgc2hvdWxkIG5vdCBiZSByZWFkXCIsIHdoaWNoIHJ1bGVzIG91dFxuK1x0ICogdGhlIHJlYWQtdG8tY2xlYXIgcGF0aCBpbiA3LjMuNC4zLiAgQml0cyBub3QgaW4gRUlBQyBhcmUgc3RpbGxcbitcdCAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQ1IsIDB4RkZGRkZGRkYpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfbWVtY3B5X3N0YXJ0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgaW92YV90IHNyYyxcbitcdFx0XHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuK1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbitcdHUzMiBpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4rXHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuK1x0XHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cbitcdFx0ICovXG4rXHRcdHJtYigpO1xuK1xuK1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuK1xuK1x0aWdiX2lycV9lbmFibGUoaWdiKTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xuK1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbitcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4rXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcbitcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4rXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4rXHQgKiBpcyByZXF1aXJlZC5cbitcdCAqL1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiArODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xNiw2ICsxNiw3IEBAIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19DICs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCAyODg2ODM0M2YyYWI1Li40MDYzYTBlMmIzZGYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMjM3LDkgKzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcdGludCByO1xuK1xuK1x0ZG8ge1xuK1x0XHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdFx0aWYgKHIgPT0gLUVBR0FJTilcbitcdFx0XHR1c2xlZXAoMTAwMDApO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXRyaWVzLS0gXHUwMDNlIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCJpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXG5cIik7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCArNiw4IEBAXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuICNlbmRpZlxuLVxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG5AQCAtMTUsNiArMTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbitcdFx1MDAyNmlnYl9vcHMsXG4gfTtcbiBcbiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0zMVQwNjoxMjoyNy4yMjYzNzQ5MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0MDIyNDc5NTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBWRklPIFNlbGZ0ZXN0IFBhdGNoIGZvciBGdXp6aW5nIEVsaWdpYmlsaXR5KipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYW4gYGlnYmAgZHJpdmVyIHRvIFZGSU8gc2VsZnRlc3RzLiBJbml0aWFsbHksIEkgc2VlIGNoYW5nZXMgaW4gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9gLCBzcGVjaWZpY2FsbHkgYWRkaW5nIGBpZ2IuY2Agd2hpY2ggaW1wbGVtZW50cyBhIFZGSU8gZHJpdmVyIHRvIHRlc3QgdGhlIEludGVsIDgyNTc2IEdpZ2FiaXQgRXRoZXJuZXQgQ29udHJvbGxlci4gVGhlIHBhdGNoIGFsc28gdG91Y2hlcyBgdmZpb19wY2lfZGV2aWNlLmNgLlxuXG5Ob3csIHRoZSBwcm9tcHQgZ2l2ZXMgbWUgc3BlY2lmaWMgY3JpdGVyaWEgZm9yIGRldGVybWluaW5nIGlmIGEgcGF0Y2ggaXMgXCJXb3J0aEZ1enppbmc9ZmFsc2VcIi4gSSBuZWVkIHRvIGNhcmVmdWxseSBldmFsdWF0ZSB0aGlzLiBUaGUga2V5IGlzIHRvIHVuZGVyc3RhbmQgaWYgdGhpcyBwYXRjaCBpbXBhY3RzIHRoZSBjb2RlIHRoYXQgc3l6a2FsbGVyLCBvdXIgcHJpbWFyeSBmdXp6ZXIsIHRhcmdldHMuXG5cbkEgcXVpY2sgcmV2aWV3IG9mIHRoZSBwcm9tcHQncyBjcml0ZXJpYSByZXZlYWxzIGEgbGlzdCBvZiBtb2RpZmljYXRpb25zIHRoYXQgZG9uJ3Qgd2FycmFudCBmdXp6aW5nLiBDcnVjaWFsbHksIHRoaXMgcGF0Y2ggKm9ubHkqIG1vZGlmaWVzIGNvZGUgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGRpcmVjdG9yeS4gVGhlc2UgYXJlICpzZWxmdGVzdHMqLCB1c2Vyc3BhY2UgcHJvZ3JhbXMgZGVzaWduZWQgdG8gdGVzdCB0aGUga2VybmVsJ3MgVkZJTyBmdW5jdGlvbmFsaXR5LiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgc3l6a2FsbGVyIGRpcmVjdGx5IGZ1enplcyB0aGUgKmtlcm5lbCogaXRzZWxmLCBub3QgdGhlIHVzZXJzcGFjZSB0ZXN0IHRvb2xzLiBTeXprYWxsZXIgaXMgZm9jdXNlZCBvbiB0aGUgY29yZSBrZXJuZWwgbG9naWMgYW5kIGRyaXZlcnMsIGFuZCBub3QgdXNlci1zcGFjZSB0ZXN0cy5cblxuTGV0IG1lIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcuIEkgY2hlY2sgdGhlIGRpZmYgb2YgdGhlIHBhdGNoIGFnYWluIGFuZCBjb25maXJtLiBUaGUgcGF0Y2ggYWRkcyBgaWdiLmNgLCBtb2RpZmllcyBzZXZlcmFsIG90aGVyIGZpbGVzIGFuZCBoZWFkZXJzIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2AgZGlyZWN0b3J5LlxuXG5TaW5jZSB0aGUgcGF0Y2gncyBjaGFuZ2VzIGFyZSBzb2xlbHkgY29udGFpbmVkIHdpdGhpbiB0aGUgc2VsZnRlc3RzIGRpcmVjdG9yeSwgYW5kIGl0IGRvZXNuJ3QgdG91Y2ggYW55IGNvcmUga2VybmVsIGNvZGUsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIEknbSBjb25maWRlbnQgdGhhdCBpdCBkb2VzICpub3QqIHdhcnJhbnQgZnV6emluZy4gQWx0aG91Z2ggdGhlIHByb21wdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBgdG9vbHMvYCBvciBgc2VsZnRlc3RzL2AsIGl0IGRvZXMgc2F5IHRvIHJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgaXQgKm9ubHkqIGNvbnRhaW5zIG1vZGlmaWNhdGlvbnMgdGhhdCBkb24ndCBhZmZlY3Qga2VybmVsIGxvZ2ljLlxuXG5JIHJlLXJlYWQgdGhlIHByb21wdCwganVzdCB0byBiZSBjb21wbGV0ZWx5IGNlcnRhaW4uIEl0IGRvZXMgbWVudGlvbiBtb2RpZmljYXRpb25zIHRvIGtlcm5lbCBsb2dpYywgZHJpdmVycyBvciBhcmNoaXRlY3R1cmVzIHNob3VsZCBiZSBmdXp6ZWQsIGJ1dCB0aGlzIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIGNvZGUuXG5cblRoZXJlZm9yZSwgbXkgZmluYWwgZGV0ZXJtaW5hdGlvbiBpcyAqKldvcnRoRnV6emluZz1mYWxzZSoqIGJlY2F1c2UgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlcnNwYWNlIHNlbGZ0ZXN0cyBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5ODQsIk91dHB1dFRva2VucyI6NjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDE2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMzFUMDY6MTI6NDEuMjQ4ODU4Njk5WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTU3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW10sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXJzcGFjZSBzZWxmdGVzdHMgaW4gdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8gYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2Vyc3BhY2Ugc2VsZnRlc3RzIGluIHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowv289b[1] Phase: Running StartedAt: 2026-07-31 06:12:52 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowv289b[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-07-31 06:12:52 +0000 UTC FinishedAt: 2026-07-31 06:12:57 +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,}