Name: series-workflow742sd Phase: Failed StartedAt: 2026-08-05 00:38:39 +0000 UTC FinishedAt: 2026-08-05 00:41:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow742sd[0] Phase: Succeeded StartedAt: 2026-08-05 00:38:39 +0000 UTC FinishedAt: 2026-08-05 00:40:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow742sd[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 00:38:39 +0000 UTC FinishedAt: 2026-08-05 00:40:54 +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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE5MGZjZTI1OGFlNmI3OTI1NDFmYzFiZDdiMTlmM2I1Yjk5MmJhMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjQwOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQ5ZTA1ZDc3ZWE0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU4NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldHJpZXMgPSAyMDtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbiYjNDM7XHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbiYjNDM7XHQgKiBpZ2JfZ2V0X2F1dG9fcmRfZG9uZSgpIGluIHRoZSBpZ2IgZHJpdmVyOiBBVVRPX1JEIGltcGxpZXMgYm90aCB0aGF0XG4mIzQzO1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcbiYjNDM7XHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbiYjNDM7XHQgKiBjb21wbGV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4gfCBFMTAwMF9UQ1RMX1BTUCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMXG4mIzQzO1x0ICogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKDguMTAuMTAvOC4xMi4xMyksIHRoZSBwZXItcXVldWUgZW5hYmxlIGJpdFxuJiM0MztcdCAqIFwmIzM0O3JlbWFpbnMgemVyb1wmIzM0OyB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc29cbiYjNDM7XHQgKiBFMTAwMF9SQ1RMX0VOIGFuZCBFMTAwMF9UQ1RMX0VOIG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIGFib3ZlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDAwO1xuJiM0MztcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbiYjNDM7XHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbiYjNDM7XHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4mIzQzO1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuJiM0MztcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbiYjNDM7XHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuJiM0MztcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0Uoc2l6ZSwgNjAsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7SUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiAmIzQzOzg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NtZF9jbGVhcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUxNiBiaXRzKVxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxuIHtcbiBcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcJiMzNDt3cml0ZSB0b1wmIzM0OyA6IFwmIzM0O3JlYWQgZnJvbVwmIzM0OywgY29uZmlnKTtcbiB9XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuJiM0MztcdGludCByZXRyaWVzID0gMjA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0dXNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJpZXMtLSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwmIzM0O2lvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxcblwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCAmIzQzOzYsOCBAQFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiAjZW5kaWZcbi1cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuIH07XG4gXG4gdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTBmY2UyNThhZTZiNzkyNTQxZmMxYmQ3YjE5ZjNiNWI5OTJiYTI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMDo0MDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkOWUwNWQ3N2VhNGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1ODUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0cmllcyA9IDIwOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmQKJiM0MzsJICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nCiYjNDM7CSAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXQKJiM0MzsJICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDAgJmFtcDsmYW1wOyAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSAmYW1wOyBFMTAwMF9FRUNEX0FVVE9fUkQpKQomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LAomIzQzOwkgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXQKJiM0MzsJICogY29tcGxldGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyaWVzICZsdDsgMCkgewomIzQzOwkJVkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpICZhbXA7IEUxMDAwX0NUUkxfUlNULCAwLAomIzQzOwkJCSAgICAgICAmIzM0O0RldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZCkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXQKJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0CiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkCiYjNDM7ICogdmlhIFZGSU8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXU2NCBpb3ZhX3R4LCBpb3ZhX3J4OwomIzQzOwl1MzIgY3RybCwgcmN0bDsKJiM0MzsJdTE2IGNtZF9yZWc7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDtyeF9yaW5nKTsKJiM0MzsKJiM0MzsKJiM0MzsKJiM0MzsJLyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi8KJiM0MzsJY21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTsKJiM0MzsJaWYgKChjbWRfcmVnICZhbXA7IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPQomIzQzOwkgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHsKJiM0MzsJCWNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiYjNDM7CQl2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovCiYjNDM7CWlnYl9zZXR1cF9sb29wYmFjayhpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2CiYjNDM7CSAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6ICYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGEKJiM0MzsJICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbAomIzQzOwkgKiBkZXNjcmlwdG9ycy4mIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIKJiM0MzsJICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3IKJiM0MzsJICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXMKJiM0MzsJICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG8KJiM0MzsJICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OAomIzQzOwkgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTiB8IEUxMDAwX1RDVExfUFNQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMCiYjNDM7CSAqIHJlZ2lzdGVyIGRlZmluaXRpb25zICg4LjEwLjEwLzguMTIuMTMpLCB0aGUgcGVyLXF1ZXVlIGVuYWJsZSBiaXQKJiM0MzsJICogJiMzNDtyZW1haW5zIHplcm8mIzM0OyB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc28KJiM0MzsJICogRTEwMDBfUkNUTF9FTiBhbmQgRTEwMDBfVENUTF9FTiBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwlWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OgomIzQzOwkgKgomIzQzOwkgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0bwomIzQzOwkgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMCkKJiM0MzsJICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seQomIzQzOwkgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuCiYjNDM7CSAqCiYjNDM7CSAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC4KJiM0MzsJICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZQomIzQzOwkgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guCiYjNDM7CSAqCiYjNDM7CSAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uCiYjNDM7CSAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KS4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShzaXplLCA2MCwKJiM0MzsJCSAgICAgICAmIzM0O0lHQiBkcml2ZXIgcmVxdWlyZXMgbWVtY3B5IHNpemUgdG8gYmUgYXQgbGVhc3QgNjAgYnl0ZXMgKEV0aGVybmV0IG1pbmltdW0gcGF5bG9hZCBzaXplKSYjMzQ7KTsKJiM0MzsKJiM0MzsJaWdiX2lycV9kaXNhYmxlKGlnYik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXR4ID0gJmFtcDtpZ2ItJmd0O3R4X3JpbmdbaWdiLSZndDt0eF90YWlsXTsKJiM0MzsJCXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbaWdiLSZndDtyeF90YWlsXTsKJiM0MzsKJiM0MzsJCW1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwkJbWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApOwomIzQzOwomIzQzOwkJdHgtJmd0O3JlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0CiYjNDM7CQkgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkCiYjNDM7CQkgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YQomIzQzOwkJICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldAomIzQzOwkJICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7CiYjNDM7CQkgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aAomIzQzOwkJICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7CiYjNDM7CQkvKgomIzQzOwkJICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemUKJiM0MzsJCSAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5vbGluZm9fc3RhdHVzID0KJiM0MzsJCQljcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSAmbHQ7Jmx0OyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTsKJiM0MzsKJiM0MzsJCWlnYi0mZ3Q7dHhfdGFpbCA9IChpZ2ItJmd0O3R4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CQlpZ2ItJmd0O3J4X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItJmd0O3J4X3RhaWwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLSZndDt0eF90YWlsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmQKJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVgKJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyCiYjNDM7ICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkCiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLgomIzQzOyAqCiYjNDM7ICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldAomIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtJmd0O0QzLSZndDtEMCB0cmFuc2l0aW9uJiMzNDspLCBzbwomIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWwKJiM0MzsgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0CiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZQomIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlCiYjNDM7ICogbmVlZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7CiYjNDM7CXZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJdTMyIHByZXZfdGFpbDsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CXByZXZfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7CiYjNDM7CXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbcHJldl90YWlsXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuCiYjNDM7CSAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLAomIzQzOwkgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0CiYjNDM7CSAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLAomIzQzOwkgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFjawomIzQzOwkgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nOwomIzQzOwkgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3QKJiM0MzsJICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUEKJiM0MzsJICogdGVzdHMgYm91bmRlZC4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtJmd0O3diLnN0YXR1c19lcnJvcikpOwomIzQzOwkJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2VzbiYjMzk7dCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQQomIzQzOwkJICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlCiYjNDM7CQkgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJcm1iKCk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfY2xlYXIoaWdiKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9lbmFibGUoaWdiKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpcwomIzQzOwkgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbAomIzQzOwkgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZQomIzQzOwkgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmUKJiM0MzsJICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWQKJiM0MzsJICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKQomIzQzOwkgKiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaApAQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpOwogc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIAomIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpOwogdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIAogdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSwKQEAgLTg0LDYgJiM0Mzs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cykKIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX3RyaWdnZXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsIHUzMiB2ZWN0b3IpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZCkKQEAgLTEwOCw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmMKIGVuZGlmCiAKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmMKJiM0MztMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvaWdiL2lnYi5jCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliZ2VuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KQogCXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nCiYjNDM7ICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2UKJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlCiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGUKJiM0MzsgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzCiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHZlY3RvcjsgaSAmbHQ7IHZlY3RvciAmIzQzOyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O21zaV9ldmVudGZkc1tpXSwgMCwKJiM0MzsJCQkgICAgICAgJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXG4mIzM0OywgaSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLSZndDttc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pCiB7CkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogCQkgICAgICAgd3JpdGUgPyAmIzM0O3dyaXRlIHRvJiMzNDsgOiAmIzM0O3JlYWQgZnJvbSYjMzQ7LCBjb25maWcpOwogfQogCiYjNDM7aW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmIChpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW9jdGxfYXNzZXJ0KGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTsKJiM0MzsJaW50IHJldHJpZXMgPSAyMDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwkJaWYgKHIgPT0gLUVBR0FJTikKJiM0MzsJCQl1c2xlZXAoMTAwMDApOwomIzQzOwl9IHdoaWxlIChyID09IC1FQUdBSU4gJmFtcDsmYW1wOyByZXRyaWVzLS0gJmd0OyAwKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfRVEociwgMCwgJiMzNDtpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXG4mIzM0Oyk7CiB9CiAKIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCmluZGV4IDE1M2JmNGE3YTE5ZjkuLjVlNjU0MzRkMjMxOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC02LDggJiM0Mzs2LDggQEAKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwogI2VuZGlmCi0KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKIAkmYW1wO2lvYXRfb3BzLAogI2VuZGlmCiAJJmFtcDtudl9mYWxjb25fb3BzLAomIzQzOwkmYW1wO2lnYl9vcHMsCiB9OwogCiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTEzCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogOTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYW4gYGlnYmAgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MuIFRoZSBwYXRjaCB0b3VjaGVzIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWc6IHNlbGZ0ZXN0cyBhcmUgKnVzZXItc3BhY2UqLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byB2YWxpZGF0ZSBrZXJuZWwgYmVoYXZpb3IsIGJ1dCBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGl0c2VsZi4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHNjb3BlLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY2AsIGFuZCBzdXBwb3J0aW5nIGZpbGVzLiBBbHJpZ2h0LCBzbywgdGhlc2UgZmlsZXMgYXJlOgoKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaGAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNgCgpPa2F5LCBzbyBub25lIG9mIHRoZXNlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gSSBoYXZlIHRvIGxvb2sgY2xvc2VseSBiZWNhdXNlIHNlbGZ0ZXN0cyBvZnRlbiBuZWVkIHRvIG1vY2sgb3IgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgY29tcG9uZW50cy4gSG93ZXZlciwgdGhpcyBsb29rcyBwcmV0dHkgY29udGFpbmVkLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0byBldmFsdWF0ZSByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBzaW5jZSB0aGlzIGlzIGFsbCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgaXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgc2VsZnRlc3QgY29kZS4gTXkgcmVhc29uaW5nOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaXRzZWxmLiBXZSBhcmUgZ29vZCB0byBjYWxsIHNldC1yZXN1bHRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMi41MjcyNjAzMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxNzg2OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMi41MjcyNjYzNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDAxODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5MGZjZTI1OGFlNmI3OTI1NDFmYzFiZDdiMTlmM2I1Yjk5MmJhMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDo0MDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQ5ZTA1ZDc3ZWE0Ylxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTg1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcXHUwMDNjXFx1MDAzYyBNU0lYX1ZFQ1RPUilcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cXG4rXFx0ICpcXG4rXFx0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSArIHRoZVxcbitcXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcXG4rXFx0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxcbitcXHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XFxuK1xcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXFxuK1xcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxcbitcXHQgKi9cXG4rXFx0bWRpYyA9ICgoKHUzMilkYXRhKSB8XFxuK1xcdFxcdChvZmZzZXQgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcXG4rXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcXG4rXFx0XFx0RTEwMDBfTURJQ19PUF9XUklURSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHR1c2xlZXAoNTApO1xcbitcXHRcXHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xcbitcXHRcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxcbisgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXFxuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcXG4rICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxcbisgKlxcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcXFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xcbisgKiBvbiB0aGUgODI1NzZcXFwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcXFwiTUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXFxuKyAqIG9uIHRoaXMgZGV2aWNlLlxcXCIgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XFxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcXG4rICogcmF0aW9uYWxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcXG4rXFx0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXFxuK1xcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcXG4rXFx0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcXG4rXFx0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxcbitcXHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXFxuK1xcdCAqIG5vLW9wIHRoZXJlLlxcbitcXHQgKi9cXG4rXFx0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcXG4rXFxuK1xcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0xPT1BCQUNLIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xcbitcXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFxcXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcXG4rXFx0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxcbitcXHQgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xcbitcXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxcbitcXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRlJDRFBYIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRkQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NMVTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXFxuK1xcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxcbitcXHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpbnQgcmV0cmllcyA9IDIwO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS4gIFRoZSBkZWxheSBhbHNvIGVuc3VyZXMgdGhlIHJlc2V0IGhhcyB0YWtlbiBlZmZlY3QgYW5kXFxuK1xcdCAqIGNsZWFyZWQgRUVDRC5BVVRPX1JEIGJlZm9yZSBpdCBpcyBwb2xsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcXG4rXFx0ICogaWdiX2dldF9hdXRvX3JkX2RvbmUoKSBpbiB0aGUgaWdiIGRyaXZlcjogQVVUT19SRCBpbXBsaWVzIGJvdGggdGhhdFxcbitcXHQgKiB0aGUgcmVzZXQgY29tcGxldGVkIGFuZCB0aGF0IHRoZSBkZXZpY2UgZmluaXNoZWQgcmUtcmVhZGluZyBpdHNcXG4rXFx0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXFxuK1xcdCAqL1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSBcXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcXG4rXFx0ICogY2hlY2sgaWYgQ1RSTC5SU1QgaXMgY2xlYXJlZCwgd2hpY2ggaXMgd2hhdCBRRU1VIHVzZXMgdG8gc2lnbmFsIHJlc2V0XFxuK1xcdCAqIGNvbXBsZXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0cmllcyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFxcdTAwMjYgRTEwMDBfQ1RSTF9SU1QsIDAsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiRGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXG4rXFxuK1xcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpO1xcbitcXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XFxuK1xcbitcXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXFxuK1xcdGNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7XFxuK1xcdGlmICgoY21kX3JlZyBcXHUwMDI2IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPVxcbitcXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcXG4rXFx0XFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcXG4rXFx0XFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cXG4rXFx0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcXG4rXFx0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcXG4rXFx0ICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmdcXG4rXFx0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcXG4rXFx0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXFxuK1xcdCAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XFxuK1xcbitcXHQvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFxcdTAwM2VcXHUwMDNlIDMyKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcXG4rXFx0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXFxcIlNSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhXFxuK1xcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcXG4rXFx0ICogZGVzY3JpcHRvcnMuXFxcIiAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXJcXG4rXFx0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcXG4rXFx0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcXG4rXFx0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cXG4rXFx0ICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OFxcbitcXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXFxuK1xcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXFxuK1xcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcXG4rXFx0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXFxuK1xcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcXFwiV2hlbiB1c2luZyB0aGVcXG4rXFx0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXFxcIiwgc28gc2V0dGluZyBMQk1fTUFDXFxuK1xcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXFxuK1xcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcXG4rXFx0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcXG4rXFx0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxcbitcXHQgKiBjb2RlIHBhdGhzLlxcbitcXHQgKi9cXG4rXFx0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOIHwgRTEwMDBfVENUTF9QU1ApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMXFxuK1xcdCAqIHJlZ2lzdGVyIGRlZmluaXRpb25zICg4LjEwLjEwLzguMTIuMTMpLCB0aGUgcGVyLXF1ZXVlIGVuYWJsZSBiaXRcXG4rXFx0ICogXFxcInJlbWFpbnMgemVyb1xcXCIgdW50aWwgdGhlIGdsb2JhbCBSQ1RMLlJYRU4vVENUTC5UWEVOIGFyZSBzZXQsIHNvXFxuK1xcdCAqIEUxMDAwX1JDVExfRU4gYW5kIEUxMDAwX1RDVExfRU4gbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwMDtcXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMCk7XFxuK1xcdH1cXG4rXFx0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLlxcbitcXHQgKlxcbitcXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXFxuK1xcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xcbitcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAwO1xcbitcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAwO1xcbitcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xcbitcXG4rXFx0aWdiLVxcdTAwM2ViYXIwID0gZGV2aWNlLVxcdTAwM2ViYXJzWzBdLnZhZGRyO1xcbitcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xcbitcXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFxcXCJJZiBhbnkgYml0cyBhcmUgc2V0XFxuK1xcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFxcXCIsIHdoaWNoIHJ1bGVzIG91dFxcbitcXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxcbitcXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxcbitcXHRcXHRcXHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0Uoc2l6ZSwgNjAsXFxuK1xcdFxcdCAgICAgICBcXFwiSUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXFxcIik7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xcbiBcXG4raW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxcbkBAIC04NCw2ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cylcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC0xMDgsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuIHtcXG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiB7XFxuIFxcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTE2LDYgKzE2LDcgQEAgTElCVkZJT19DICs9IGRyaXZlcnMvZHNhL2RzYS5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA1LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTIzNyw5ICsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByZXRyaWVzID0gMjA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldHJpZXMtLSBcXHUwMDNlIDApO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfRVEociwgMCwgXFxcImlvY3RsKGRldmljZS1cXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTYsOCArNiw4IEBAXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuICNlbmRpZlxcbi1cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIG52X2ZhbGNvbl9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuQEAgLTE1LDYgKzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4gI2VuZGlmXFxuIFxcdFxcdTAwMjZudl9mYWxjb25fb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gfTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfZHJpdmVyX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MzMuMDE3OTY3NDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4MjcxNTcwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTkwZmNlMjU4YWU2Yjc5MjU0MWZjMWJkN2IxOWYzYjViOTkyYmEyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDA6NDA6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkOWUwNWQ3N2VhNGJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5AQCAtMCwwICsxLDU4NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2JhcnJpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZTEwMDBfcmVncy5oXCJcbisjaW5jbHVkZSBcImUxMDAwX2RlZmluZXMuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF84MjU3NS5oXCJcbitcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxuKyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xuK1xuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xuK1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbitcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuK1x0XHR9IHJlYWQ7XG4rXG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xuK1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4rXHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuK1x0XHR9IHdiO1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbitcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHR9IHJlYWQ7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4rXHRcdFx0dTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqL1xuK1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4rXHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuK1x0XHRcdHUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi9cbitcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuK1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbitcdH07XG4rfTtcbitcbitzdHJ1Y3QgaWdiIHtcbitcdHZvaWQgKmJhcjA7XG4rXHR1MzIgdHhfdGFpbDtcbitcdHUzMiByeF90YWlsO1xuK1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4rfTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0d3JpdGVsKHZhbCwgaWdiLVx1MDAzZWJhcjAgKyByZWcpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbit7XG4rXHRyZXR1cm4gcmVhZGwoaWdiLVx1MDAzZWJhcjAgKyByZWcpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbit7XG4rXHR1MzIgbWRpYztcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cbitcdCAqXG4rXHQgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICsgdGhlXG4rXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbitcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cbitcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbitcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXG4rXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cbitcdCAqL1xuK1x0bWRpYyA9ICgoKHUzMilkYXRhKSB8XG4rXHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4rXHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuK1x0XHRFMTAwMF9NRElDX09QX1dSSVRFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpKyspIHtcbitcdFx0dXNsZWVwKDUwKTtcbitcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbitcdFx0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuKyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbisgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuXG4rICpcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcbisgKiBvbiB0aGUgODI1NzZcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCJNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWRcbisgKiBvbiB0aGlzIGRldmljZS5cIiAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXG4rICogcmF0aW9uYWxlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0dTMyIGN0cmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcbitcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuK1x0ICogYXV0b25lZy1kb25lIHRpbWVyLCBhbmQgd2l0aG91dCBMVSBzZXQgaXRzIHJlY2VpdmUgcGF0aFxuK1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbitcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbitcdCAqIGJlbG93IGNsZWFycyB0aGUgYXV0b25lZy1lbmFibGUgYml0LCBzbyB0aGlzIGlzIGVmZmVjdGl2ZWx5IGFcbitcdCAqIG5vLW9wIHRoZXJlLlxuK1x0ICovXG4rXHQodm9pZClpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4rXHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4rXG4rXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbitcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9MT09QQkFDSyB8XG4rXHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbitcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4rXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCIpO1xuK1xuK1x0LypcbitcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbitcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcbitcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuK1x0ICovXG4rXHR1c2xlZXAoNTAwMDApO1xuK1xuK1x0LypcbitcdCAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nXG4rXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuK1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxuK1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4rXHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuK1x0XHRFMTAwMF9DVFJMX0ZEIHxcbitcdFx0RTEwMDBfQ1RSTF9TTFU7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXG4rXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbitcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuK1x0ICovXG4rXHR1c2xlZXAoNTAwMDAwKTtcbit9XG4rXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuK1x0LypcbitcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcbitcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4rXHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbitcdCAqIGNsZWFyZWQgRUVDRC5BVVRPX1JEIGJlZm9yZSBpdCBpcyBwb2xsZWQgYmVsb3cuXG4rXHQgKi9cbitcdHVzbGVlcCgxMDAwKTtcbitcbitcdC8qXG4rXHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbitcdCAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXRcbitcdCAqIHRoZSByZXNldCBjb21wbGV0ZWQgYW5kIHRoYXQgdGhlIGRldmljZSBmaW5pc2hlZCByZS1yZWFkaW5nIGl0c1xuK1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4rXHQgKi9cbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0VFQ0QpIFx1MDAyNiBFMTAwMF9FRUNEX0FVVE9fUkQpKVxuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXG4rXHQvKlxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LFxuK1x0ICogY2hlY2sgaWYgQ1RSTC5SU1QgaXMgY2xlYXJlZCwgd2hpY2ggaXMgd2hhdCBRRU1VIHVzZXMgdG8gc2lnbmFsIHJlc2V0XG4rXHQgKiBjb21wbGV0aW9uLlxuK1x0ICovXG4rXHRpZiAocmV0cmllcyBcdTAwM2MgMCkge1xuK1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZClcIik7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4rXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxuK1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuK1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4rXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCJXaGVuIHVzaW5nIHRoZVxuK1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xuK1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbitcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbitcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4rXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4rXHQgKiBjb2RlIHBhdGhzLlxuK1x0ICovXG4rXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOIHwgRTEwMDBfVENUTF9QU1ApO1xuK1xuK1x0LypcbitcdCAqIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZC4gIFBlciB0aGUgUlhEQ1RML1RYRENUTFxuK1x0ICogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKDguMTAuMTAvOC4xMi4xMyksIHRoZSBwZXItcXVldWUgZW5hYmxlIGJpdFxuK1x0ICogXCJyZW1haW5zIHplcm9cIiB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc29cbitcdCAqIEUxMDAwX1JDVExfRU4gYW5kIEUxMDAwX1RDVExfRU4gbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gYWJvdmUuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4rXHQgKlxuK1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbitcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuK1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuK1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuK1x0ICpcbitcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbitcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbitcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbitcdCAqXG4rXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuK1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLlxuK1x0ICpcbitcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbitcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcbitcdC8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4rXG4rXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcbitcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xuK1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuK1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuK1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbitcbitcdGlnYi1cdTAwM2ViYXIwID0gZGV2aWNlLVx1MDAzZWJhcnNbMF0udmFkZHI7XG4rXG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuK1x0ICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlXG4rXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcbitcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbitcdCAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0XG4rXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cbitcdCAqL1xuK1x0dmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuK1x0aWdiX3Jlc2V0KGlnYik7XG4rXG4rXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0LypcbitcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbitcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXCJJZiBhbnkgYml0cyBhcmUgc2V0XG4rXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcIiwgd2hpY2ggcnVsZXMgb3V0XG4rXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuK1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuK1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xuK1x0dTMyIGk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShzaXplLCA2MCxcbitcdFx0ICAgICAgIFwiSUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXCIpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4rXHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuK1x0XHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cbitcdFx0ICovXG4rXHRcdHJtYigpO1xuK1xuK1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuK1xuK1x0aWdiX2lycV9lbmFibGUoaWdiKTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xuK1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbitcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4rXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcbitcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4rXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4rXHQgKiBpcyByZXF1aXJlZC5cbitcdCAqL1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiArODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xNiw2ICsxNiw3IEBAIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19DICs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCAyODg2ODM0M2YyYWI1Li40MDYzYTBlMmIzZGYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMjM3LDkgKzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcdGludCByO1xuK1xuK1x0ZG8ge1xuK1x0XHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdFx0aWYgKHIgPT0gLUVBR0FJTilcbitcdFx0XHR1c2xlZXAoMTAwMDApO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXRyaWVzLS0gXHUwMDNlIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCJpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXG5cIik7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCArNiw4IEBAXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuICNlbmRpZlxuLVxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG5AQCAtMTUsNiArMTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbitcdFx1MDAyNmlnYl9vcHMsXG4gfTtcbiBcbiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMy4wMTc5Njg5MjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyNzEzMzY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBhbiBgaWdiYCBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogc2VsZnRlc3RzIGFyZSAqdXNlci1zcGFjZSouIFRoZXkncmUgZGVzaWduZWQgdG8gdmFsaWRhdGUga2VybmVsIGJlaGF2aW9yLCBidXQgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGl0c2VsZi5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBzY29wZS4gVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgLCBhbmQgc3VwcG9ydGluZyBmaWxlcy4gQWxyaWdodCwgc28sIHRoZXNlIGZpbGVzIGFyZTpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jYFxuXG5Pa2F5LCBzbyBub25lIG9mIHRoZXNlIGxvb2sgbGlrZSB0aGV5J3JlIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBJIGhhdmUgdG8gbG9vayBjbG9zZWx5IGJlY2F1c2Ugc2VsZnRlc3RzIG9mdGVuIG5lZWQgdG8gbW9jayBvciBpbnRlcmFjdCB3aXRoIGtlcm5lbCBjb21wb25lbnRzLiBIb3dldmVyLCB0aGlzIGxvb2tzIHByZXR0eSBjb250YWluZWQuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIGV2YWx1YXRlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSwgYW5kIHNpbmNlIHRoaXMgaXMgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBpdCBkb2Vzbid0IG1vZGlmeSB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgc2VsZnRlc3QgY29kZS4gTXkgcmVhc29uaW5nOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaXRzZWxmLiBXZSBhcmUgZ29vZCB0byBjYWxsIHNldC1yZXN1bHRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExMywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjQzLjg0NTEwNDkyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow742sd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 00:38:39 +0000 UTC FinishedAt: 2026-08-05 00:40:45 +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+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAwMDo0MDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE5MGZjZTI1OGFlNmI3OTI1NDFmYzFiZDdiMTlmM2I1Yjk5MmJhMjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEF1ZyA1IDAwOjQwOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxuQEAgLTAsMCAmIzQzOzEgQEBcbiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi45Zjk3ZjQzMzAwODY2XG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgJiM0MzsxIEBAXG4mIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQ5ZTA1ZDc3ZWE0YlxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNcbkBAIC0wLDAgJiM0MzsxLDU4NSBAQFxuJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4mIzQzOyNpbmNsdWRlIFx1MDAzY3VuaXN0ZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaW8uaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaV9pZHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9rZXJuZWwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2FzbS9iYXJyaWVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbWlpLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7ZTEwMDBfcmVncy5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O2UxMDAwX2RlZmluZXMuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtlMTAwMF84MjU3NS5oXCYjMzQ7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4mIzQzOyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcbiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwXG4mIzQzOyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4mIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi9cbiYjNDM7XG4mIzQzO3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3ImIzM5O3MgZGF0YSBidWZmZXIgKi9cbiYjNDM7XHRcdFx0dTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqL1xuJiM0MztcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcbiYjNDM7XHRcdHN0cnVjdCB7XG4mIzQzO1x0XHRcdHU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi9cbiYjNDM7XHRcdFx0dTMyIG54dHNlcV9zZWVkOyAvKiBOZXh0IHNlcXVlbmNlIHNlZWQgKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuJiM0MztcdFx0fSB3YjtcbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYl9yeF9kZXNjIHtcbiYjNDM7XHR1bmlvbiB7XG4mIzQzO1x0XHRzdHJ1Y3Qge1xuJiM0MztcdFx0XHR1NjQgcGt0X2FkZHI7IC8qIFBhY2tldCBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuJiM0MztcdFx0fSByZWFkO1xuJiM0MztcdFx0c3RydWN0IHtcbiYjNDM7XHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4mIzQzO1x0XHRcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cbiYjNDM7XHRcdFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cbiYjNDM7XHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuJiM0MztcdFx0XHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXG4mIzQzO1x0XHRcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXG4mIzQzO1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbiYjNDM7XHR9O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGlnYiB7XG4mIzQzO1x0dm9pZCAqYmFyMDtcbiYjNDM7XHR1MzIgdHhfdGFpbDtcbiYjNDM7XHR1MzIgcnhfdGFpbDtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi52YWRkcjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGlnYl93cml0ZTMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZywgdTMyIHZhbClcbiYjNDM7e1xuJiM0MztcdHdyaXRlbCh2YWwsIGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHJlYWRsKGlnYi1cdTAwM2ViYXIwICYjNDM7IHJlZyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIG1kaWM7XG4mIzQzO1x0aW50IGk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSAmIzQzOyB0aGVcbiYjNDM7XHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbiYjNDM7XHQgKiBkZXZpY2UmIzM5O3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxuJiM0MztcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbiYjNDM7XHQgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZVxuJiM0MztcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxuJiM0MztcdCAqL1xuJiM0MztcdG1kaWMgPSAoKCh1MzIpZGF0YSkgfFxuJiM0MztcdFx0KG9mZnNldCBcdTAwM2NcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcbiYjNDM7XHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuJiM0MztcdFx0RTEwMDBfTURJQ19PUF9XUklURSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIDEwMDA7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR1c2xlZXAoNTApO1xuJiM0MztcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbiYjNDM7XHRcdGlmIChtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmICghKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpKVxuJiM0MztcdFx0cmV0dXJuIC0xO1xuJiM0MztcbiYjNDM7XHRpZiAobWRpYyBcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcbiYjNDM7XHRcdHJldHVybiAtMTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xuJiM0MzsgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXG4mIzQzOyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxuJiM0MzsgKlxuJiM0MzsgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrXG4mIzQzOyAqIG9uIHRoZSA4MjU3NlwmIzM0OywgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXG4mIzQzOyAqIG9uIHRoaXMgZGV2aWNlLlwmIzM0OyAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZVxuJiM0MzsgKiByYXRpb25hbGUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0dTMyIGN0cmw7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBLaWNrIHRoZSBhdXRvbmVnIG1hY2hpbmVyeSBzb2xlbHkgdG8gYnJpbmcgU1RBVFVTLkxVIHVwIHVuZGVyXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuJiM0MztcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcbiYjNDM7XHQgKiAoZTEwMDB4X2h3X3J4X2VuYWJsZWQpIGRyb3BzIGV2ZXJ5IGxvb3BiYWNrIGZyYW1lLiAgT24gcmVhbFxuJiM0MztcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbiYjNDM7XHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXG4mIzQzO1x0ICogbm8tb3AgdGhlcmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxuJiM0MztcdFx0XHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcbiYjNDM7XG4mIzQzO1x0LyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xuJiM0MztcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbiYjNDM7XHRcdFx0ICAgIEJNQ1JfTE9PUEJBQ0sgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9TUEVFRDEwMDAgfFxuJiM0MztcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4mIzQzO1x0VkZJT19BU1NFUlRfRVEocmV0LCAwLCBcJiMzNDtGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcJiMzNDspO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbiYjNDM7XHQgKiBzZWxmdGVzdCBpbiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnkgdGhlXG4mIzQzO1x0ICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0dXNsZWVwKDUwMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xuJiM0MztcdCAqIHRoZSBsaW5rIHN0YXRlIHRoZSBkZXNjcmlwdG9yIGVuZ2luZSBkb2VzIG5vdCBydW4sIHNpbmNlIHRoZSBjaGlwXG4mIzQzO1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRlJDU1BEIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfRlJDRFBYIHxcbiYjNDM7XHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuJiM0MztcdFx0RTEwMDBfQ1RSTF9GRCB8XG4mIzQzO1x0XHRFMTAwMF9DVFJMX1NMVTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCYjMzk7cyBtc2xlZXAoNTAwKVxuJiM0MztcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxuJiM0MztcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCg1MDAwMDApO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXZmaW9fcGNpX2RldmljZV9tYXRjaChkZXZpY2UsIFBDSV9WRU5ET1JfSURfSU5URUwsIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYpKVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVzZXQoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldHJpZXMgPSAyMDtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBNdXN0IHdhaXQgYXQgbGVhc3QgMSBtaWxsaXNlY29uZCBhZnRlciBzZXR0aW5nIHRoZSByZXNldCBiaXQgYmVmb3JlXG4mIzQzO1x0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cbiYjNDM7XHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbiYjNDM7XHQgKiBjbGVhcmVkIEVFQ0QuQVVUT19SRCBiZWZvcmUgaXQgaXMgcG9sbGVkIGJlbG93LlxuJiM0MztcdCAqL1xuJiM0MztcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbiYjNDM7XHQgKiBpZ2JfZ2V0X2F1dG9fcmRfZG9uZSgpIGluIHRoZSBpZ2IgZHJpdmVyOiBBVVRPX1JEIGltcGxpZXMgYm90aCB0aGF0XG4mIzQzO1x0ICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzXG4mIzQzO1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCBcdTAwMjZcdTAwMjYgIShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfRUVDRCkgXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXG4mIzQzO1x0XHR1c2xlZXAoMTAwMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcbiYjNDM7XHQgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXRcbiYjNDM7XHQgKiBjb21wbGV0aW9uLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXRyaWVzIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuJiM0MztcdFx0XHQgICAgICAgXCYjMzQ7RGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qXG4mIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcbiYjNDM7ICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxuJiM0MzsgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbiYjNDM7ICogdmlhIFZGSU8uXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHR1NjQgaW92YV90eCwgaW92YV9yeDtcbiYjNDM7XHR1MzIgY3RybCwgcmN0bDtcbiYjNDM7XHR1MTYgY21kX3JlZztcbiYjNDM7XHRpbnQgcmV0cmllcztcbiYjNDM7XG4mIzQzO1x0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNldHhfcmluZyk7XG4mIzQzO1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4mIzQzO1xuJiM0MztcbiYjNDM7XG4mIzQzO1x0LyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi9cbiYjNDM7XHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkxfRVhUKTtcbiYjNDM7XHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuJiM0MztcdGN0cmwgXHUwMDI2PSB+RTEwMDBfQ1RSTF9FWFRfTElOS19NT0RFX01BU0s7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi9cbiYjNDM7XHRjbWRfcmVnID0gdmZpb19wY2lfY29uZmlnX3JlYWR3KGRldmljZSwgUENJX0NPTU1BTkQpO1xuJiM0MztcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4mIzQzO1x0ICAgIChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSB7XG4mIzQzO1x0XHRjbWRfcmVnIHw9IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpO1xuJiM0MztcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4mIzQzO1x0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRGlzYWJsZSBETUEgcmUtc2VuZCBvbiBQQ0llIGNvbXBsZXRpb24gdGltZW91dCAoODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcbiYjNDM7XHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuJiM0MztcdCAqIHVubWFwcGVkIElPVkFzOyB3aXRoIHRoZSBkZWZhdWx0IChzZXQpIHZhbHVlLCB0aGUgZGV2aWNlIGtlZXBzXG4mIzQzO1x0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXG4mIzQzO1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuJiM0MztcdCAqL1xuJiM0MztcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcbiYjNDM7XHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XG4mIzQzO1xuJiM0MztcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUwoMCksICh1MzIpaW92YV90eCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERUKDApLCAwKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbiYjNDM7XHQgKiBkYXRhc2hlZXQgc2VjdGlvbiA3LjEuNS4yOiBcJiMzNDtTUlJDVExbbl0uREVTQ1RZUEUgbXVzdCBiZSBzZXQgdG8gYVxuJiM0MztcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbiYjNDM7XHQgKiBkZXNjcmlwdG9ycy5cJiMzNDsgIHN0cnVjdCBpZ2JfcnhfZGVzYyBtYXRjaGVzIHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyXG4mIzQzO1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbiYjNDM7XHQgKiByZXF1aXJlcyB0aGlzIGZvcm1hdC4gIFNlY3Rpb24gOC4xMC4yIHNwZWNpZmllcyBERVNDVFlQRVsyNzoyNV0uXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbiYjNDM7XHQgKiBpbnRlbnRpb25hbDogcGVyIHNlY3Rpb24gNy4xLjMuMSBhIHplcm8gQlNJWkVQQUNLRVQgZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIHRoZSBSQ1RMLkJTSVpFIGJ1ZmZlciBzaXplLCB3aG9zZSByZXNldCBkZWZhdWx0ICgwMGIpIGlzIDIwNDhcbiYjNDM7XHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuJiM0MztcdCAqL1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfU1JSQ1RMKDApLCBFMTAwMF9TUlJDVExfREVTQ1RZUEVfQURWX09ORUJVRik7XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvblxuJiM0MztcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJiMzOTtzIGVtdWxhdGVkIGlnYlxuJiM0MztcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcbiYjNDM7XHQgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlhcbiYjNDM7XHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCYjMzQ7V2hlbiB1c2luZyB0aGVcbiYjNDM7XHQgKiBpbnRlcm5hbCBQSFksIExCTSBzaG91bGQgcmVtYWluIHNldCB0byAwMGJcJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQ1xuJiM0MztcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXG4mIzQzO1x0ICogbm8gb2JzZXJ2YWJsZSBlZmZlY3Qgb24gcmVhbCA4MjU3NiBoYXJkd2FyZSBiZWNhdXNlIE1BQyBsb29wYmFja1xuJiM0MztcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4mIzQzO1x0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxuJiM0MztcdCAqIGNvZGUgcGF0aHMuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9VUEUgfCAgICAgIC8qIFVuaWNhc3QgUHJvbWlzY3VvdXMgKGZvciBkdW1teSBNQUMpICovXG4mIzQzO1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xuJiM0MztcdCAgICAgICBFMTAwMF9SQ1RMX0xCTV9NQUMgfCAgLyogTUFDIExvb3BiYWNrIC0gZm9yIFFFTVUgZW11bGF0aW9uIG9ubHkgKi9cbiYjNDM7XHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIEUxMDAwX1RDVExfRU4gfCBFMTAwMF9UQ1RMX1BTUCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMXG4mIzQzO1x0ICogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKDguMTAuMTAvOC4xMi4xMyksIHRoZSBwZXItcXVldWUgZW5hYmxlIGJpdFxuJiM0MztcdCAqIFwmIzM0O3JlbWFpbnMgemVyb1wmIzM0OyB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc29cbiYjNDM7XHQgKiBFMTAwMF9SQ1RMX0VOIGFuZCBFMTAwMF9UQ1RMX0VOIG11c3QgYWxyZWFkeSBiZSB3cml0dGVuIGFib3ZlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldHJpZXMgPSAyMDAwO1xuJiM0MztcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbiYjNDM7XHRcdGlmICgoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSkgXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0dXNsZWVwKDEwKTtcbiYjNDM7XHR9XG4mIzQzO1x0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OlxuJiM0MztcdCAqXG4mIzQzO1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbiYjNDM7XHQgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMClcbiYjNDM7XHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XG4mIzQzO1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxuJiM0MztcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbiYjNDM7XHQgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuJiM0MztcdCAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbiYjNDM7XHQgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBNYXAgdmVjdG9yIDAgdG8gaW50ZXJydXB0IGNhdXNlIDAgYW5kIG1hcmsgaXQgdmFsaWQgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lWQVIwLCBFMTAwMF9JVkFSX1ZBTElEKTtcbiYjNDM7XG4mIzQzO1x0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spO1xuJiM0MztcbiYjNDM7XHQvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi9cbiYjNDM7XHRpZ2ItXHUwMDNldHhfdGFpbCA9IDA7XG4mIzQzO1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuJiM0MztcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfc2l6ZSA9IElHQl9NQVhfQ0hVTktfU0laRTtcbiYjNDM7XHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuJiM0MztcdGRldmljZS1cdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRWRklPX0FTU0VSVF9HRShkZXZpY2UtXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xuJiM0MztcbiYjNDM7XHRpZ2ItXHUwMDNlYmFyMCA9IGRldmljZS1cdTAwM2ViYXJzWzBdLnZhZGRyO1xuJiM0MztcbiYjNDM7XHRpZ2JfcmVzZXQoaWdiKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuJiM0MztcdCAqIHZmaW9fcGNpX21zaXhfZW5hYmxlKCkgb25seSB0b3VjaGVzIHRoZSBWRklPIElSUSBtYWNoaW5lcnkgYW5kIHRoZVxuJiM0MztcdCAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZ1xuJiM0MztcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbiYjNDM7XHQgKiBQbGFjaW5nIGl0IGhlcmUga2VlcHMgaWdiX2h3X2luaXQoKSByZXVzYWJsZSBmcm9tIHRoZSByZXNldFxuJiM0MztcdCAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLlxuJiM0MztcdCAqL1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZW5hYmxlKGRldmljZSwgTVNJWF9WRUNUT1IsIDEpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcbiYjNDM7XHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIDApO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7XG4mIzQzO1x0aWdiX3Jlc2V0KGlnYik7XG4mIzQzO1xuJiM0MztcdHZmaW9fcGNpX21zaXhfZGlzYWJsZShkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpZ2JfaXJxX2Rpc2FibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1DLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9lbmFibGUoc3RydWN0IGlnYiAqaWdiKVxuJiM0Mzt7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbiYjNDM7XHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFwmIzM0O0lmIGFueSBiaXRzIGFyZSBzZXRcbiYjNDM7XHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcJiMzNDssIHdoaWNoIHJ1bGVzIG91dFxuJiM0MztcdCAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsXG4mIzQzO1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsXG4mIzQzO1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuJiM0MztcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4mIzQzO1x0c3RydWN0IGlnYl90eF9kZXNjICp0eDtcbiYjNDM7XHR1MzIgaTtcbiYjNDM7XG4mIzQzO1x0VkZJT19BU1NFUlRfR0Uoc2l6ZSwgNjAsXG4mIzQzO1x0XHQgICAgICAgXCYjMzQ7SUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNvdW50OyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHggPSBcdTAwMjZpZ2ItXHUwMDNldHhfcmluZ1tpZ2ItXHUwMDNldHhfdGFpbF07XG4mIzQzO1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbiYjNDM7XG4mIzQzO1x0XHRtZW1zZXQodHgsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3R4X2Rlc2MpKTtcbiYjNDM7XHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuJiM0MztcbiYjNDM7XHRcdHJ4LVx1MDAzZXJlYWQucGt0X2FkZHIgPSBjcHVfdG9fbGU2NChkc3QpO1xuJiM0MztcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuJiM0MztcbiYjNDM7XHRcdHR4LVx1MDAzZXJlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0XG4mIzQzO1x0XHQgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkXG4mIzQzO1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuJiM0MztcdFx0ICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldFxuJiM0MztcdFx0ICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7XG4mIzQzO1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuJiM0MztcdFx0ICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfFxuJiM0MztcdFx0XHRFMTAwMF9BRFZUWERfRENNRF9ERVhUIHxcbiYjNDM7XHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4mIzQzO1x0XHRcdEUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbiYjNDM7XHRcdCAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuJiM0MztcdFx0XHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcdTAwM2NcdTAwM2MgRTEwMDBfQURWVFhEX1BBWUxFTl9TSElGVCk7XG4mIzQzO1xuJiM0MztcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7XG4mIzQzO1x0XHRpZ2ItXHUwMDNlcnhfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cdTAwM2V0eF90YWlsKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVzZXQgdGhlIGRldmljZSB2aWEgVkZJT19ERVZJQ0VfUkVTRVQgKFBDSWUgRkxSIG9uIHRoZSA4MjU3NikgYW5kXG4mIzQzOyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyXG4mIzQzOyAqIHZpYSB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBiZWZvcmUgcmVwcm9ncmFtbWluZyBzbyBhbnkgY2FsbGVyLWNhY2hlZFxuJiM0MzsgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4mIzQzOyAqXG4mIzQzOyAqIEZMUiBjbGVhcnMgZGV2aWNlLXNpZGUgc3RhdGUgdG8gcG93ZXItb24gcmVzZXQgdmFsdWVzIChkYXRhc2hlZXRcbiYjNDM7ICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtXHUwMDNlRDMtXHUwMDNlRDAgdHJhbnNpdGlvblwmIzM0OyksIHNvXG4mIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbiYjNDM7ICogdmFsdWVzLCBhbmQgaWdiX2h3X2luaXQoKSByZXNldHMgdHhfdGFpbC9yeF90YWlsIHRvIDAuICBUaGUgbmV4dFxuJiM0MzsgKiBpZ2JfbWVtY3B5X3N0YXJ0KCkgd2lsbCBtZW1zZXQgZWFjaCBkZXNjcmlwdG9yIGl0IHRvdWNoZXMgYmVmb3JlXG4mIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4mIzQzOyAqIG5lZWRlZCBoZXJlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiM0Mzt7XG4mIzQzO1x0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XG4mIzQzO1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbiYjNDM7XHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGlnYl9tZW1jcHlfd2FpdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XHRzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4O1xuJiM0MztcdHUzMiBzdGF0dXMgPSAwO1xuJiM0MztcdHUzMiBwcmV2X3RhaWw7XG4mIzQzO1x0aW50IHJldHJpZXM7XG4mIzQzO1xuJiM0MztcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCAmIzQzOyBSSU5HX1NJWkUgLSAxKSAlIFJJTkdfU0laRTtcbiYjNDM7XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW3ByZXZfdGFpbF07XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuXG4mIzQzO1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4mIzQzO1x0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxuJiM0MztcdCAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLFxuJiM0MztcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4mIzQzO1x0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcbiYjNDM7XHQgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3RcbiYjNDM7XHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuJiM0MztcdCAqIHRlc3RzIGJvdW5kZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0cmllcyA9IDIwMDtcbiYjNDM7XHR3aGlsZSAocmV0cmllcy0tIFx1MDAzZSAwKSB7XG4mIzQzO1x0XHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXHUwMDNld2Iuc3RhdHVzX2Vycm9yKSk7XG4mIzQzO1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdHVzbGVlcCgxMDAwKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogRW5zdXJlIHRoZSB0ZXN0IGNvZGUgZG9lc24mIzM5O3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcbiYjNDM7XHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuJiM0MztcdFx0ICogZGVzY3JpcHRvciB3cml0ZWJhY2sgaXMgY29tcGxldGUuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHJtYigpO1xuJiM0MztcbiYjNDM7XHRpZ2JfaXJxX2NsZWFyKGlnYik7XG4mIzQzO1xuJiM0MztcdGlnYl9pcnFfZW5hYmxlKGlnYik7XG4mIzQzO1xuJiM0MztcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBUaGUgZGVzY3JpcHRvciBuZXZlciBjb21wbGV0ZWQuICBPbiByZWFsIDgyNTc2IGhhcmR3YXJlIHRoaXNcbiYjNDM7XHQgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbFxuJiM0MztcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4mIzQzO1x0ICogdW5hYmxlIHRvIHNlcnZpY2Ugc3Vic2VxdWVudCB2YWxpZCBkZXNjcmlwdG9ycy4gIENUUkwuUlNUIGFsb25lXG4mIzQzO1x0ICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWRcbiYjNDM7XHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4mIzQzO1x0ICogaXMgcmVxdWlyZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGlnYl9zZW5kX21zaShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbiYjNDM7XG4mIzQzO1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7Y29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbiYjNDM7XHQubmFtZSA9IFwmIzM0O2lnYlwmIzM0OyxcbiYjNDM7XHQucHJvYmUgPSBpZ2JfcHJvYmUsXG4mIzQzO1x0LmluaXQgPSBpZ2JfaW5pdCxcbiYjNDM7XHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbiYjNDM7XHQubWVtY3B5X3N0YXJ0ID0gaWdiX21lbWNweV9zdGFydCxcbiYjNDM7XHQubWVtY3B5X3dhaXQgPSBpZ2JfbWVtY3B5X3dhaXQsXG4mIzQzO1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuJiM0Mzt9O1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5AQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKnZmaW9fcGNpX2RldmljZV9pbml0KGNvbnN0IGNoYXIgKmJkZiwgc3RydWN0IGlvbW11ICppb21tdSk7XG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuJiM0MztpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiAmIzQzOzg1LDggQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX2NtZF9jbGVhcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUxNiBiaXRzKVxuIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcbiB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KTtcbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgJiM0MzsxMTEsMTIgQEAgc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcbiYjNDM7XHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4mIzQzO3tcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxuIFx0XHRcdFx0XHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4ge1xuQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4mIzQzO1x0XHRcdFx0XHQgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxuIHtcbiBcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cdTAwM2Vpb21tdSwgdmFkZHIsIGlvdmEpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmNcbiBlbmRpZlxuIFxuIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcbiYjNDM7TElCVkZJT19DICYjNDM7PSBkcml2ZXJzL2lnYi9pZ2IuY1xuIFxuIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvXG4gXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xuQEAgLTEsNSAmIzQzOzEsNiBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAjaW5jbHVkZSBcdTAwM2NkaXJlbnQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxuIFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCAwLCAwLCBOVUxMKTtcbiB9XG4gXG4mIzQzOy8qXG4mIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4mIzQzOyAqIHRoZSBleGlzdGluZyBldmVudGZkcy4gIEludGVuZGVkIGZvciBkcml2ZXJzIHRoYXQgbmVlZCB0byByZS1hcm0gZGV2aWNlXG4mIzQzOyAqIGludGVycnVwdHMgYWZ0ZXIgYSBWRklPX0RFVklDRV9SRVNFVCwgd2hpY2ggdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGVcbiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbiYjNDM7ICogZXZlbnRmZHMgd291bGQgaW52YWxpZGF0ZSBhbnkgdGVzdC1maXh0dXJlIGNhY2hlIG9mIHRoZSBmZCwgc28gdGhpc1xuJiM0MzsgKiBoZWxwZXIgZGVsaWJlcmF0ZWx5IHByZXNlcnZlcyB0aGVtLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXG4mIzQzO1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiYjNDM7e1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbiYjNDM7XG4mIzQzO1x0Zm9yIChpID0gdmVjdG9yOyBpIFx1MDAzYyB2ZWN0b3IgJiM0MzsgY291bnQ7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbiYjNDM7XHRcdFx0ICAgICAgIFwmIzM0O3ZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXG5cJiMzNDssIGkpO1xuJiM0MztcbiYjNDM7XHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIHZlY3RvciwgY291bnQsIGRldmljZS1cdTAwM2Vtc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxuIHtcbkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcJiMzNDt3cml0ZSB0b1wmIzM0OyA6IFwmIzM0O3JlYWQgZnJvbVwmIzM0OywgY29uZmlnKTtcbiB9XG4gXG4mIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4mIzQzO3tcbiYjNDM7XHRpZiAoaW9jdGwoZGV2aWNlLVx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXG4mIzQzO1x0XHRyZXR1cm4gLWVycm5vO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuJiM0MztcdGludCByZXRyaWVzID0gMjA7XG4mIzQzO1x0aW50IHI7XG4mIzQzO1xuJiM0MztcdGRvIHtcbiYjNDM7XHRcdHIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuJiM0MztcdFx0aWYgKHIgPT0gLUVBR0FJTilcbiYjNDM7XHRcdFx0dXNsZWVwKDEwMDAwKTtcbiYjNDM7XHR9IHdoaWxlIChyID09IC1FQUdBSU4gXHUwMDI2XHUwMDI2IHJldHJpZXMtLSBcdTAwM2UgMCk7XG4mIzQzO1xuJiM0MztcdFZGSU9fQVNTRVJUX0VRKHIsIDAsIFwmIzM0O2lvY3RsKGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQpIGZhaWxlZFxcblwmIzM0Oyk7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCAmIzQzOzYsOCBAQFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpb2F0X29wcztcbiAjZW5kaWZcbi1cbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgbnZfZmFsY29uX29wcztcbiYjNDM7ZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHM7XG4gXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XG4gI2lmZGVmIF9feDg2XzY0X19cbkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbiYjNDM7XHRcdTAwMjZpZ2Jfb3BzLFxuIH07XG4gXG4gdm9pZCB2ZmlvX3BjaV9kcml2ZXJfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhOTBmY2UyNThhZTZiNzkyNTQxZmMxYmQ3YjE5ZjNiNWI5OTJiYTI3CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAwMDo0MDozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OTgKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oCkBAIC0wLDAgJiM0MzsxIEBACiYjNDM7Li4vLi4vLi4vLi4vLi4vLi4vLi4vZHJpdmVycy9uZXQvZXRoZXJuZXQvaW50ZWwvaWdiL2UxMDAwXzgyNTc1LmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uOWY5N2Y0MzMwMDg2NgotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaApAQCAtMCwwICYjNDM7MSBAQAomIzQzOy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmgKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkOWUwNWQ3N2VhNGIKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuYwpAQCAtMCwwICYjNDM7MSw1ODUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7I2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpbnQuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW8uaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX3JlZ3MuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcGNpX2lkcy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9rZXJuZWwuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY29tcGlsZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7YXNtL2JhcnJpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbWlpLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgmZ3Q7CiYjNDM7CiYjNDM7I2luY2x1ZGUgJiMzNDtlMTAwMF9yZWdzLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7ZTEwMDBfZGVmaW5lcy5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O2UxMDAwXzgyNTc1LmgmIzM0OwomIzQzOwomIzQzOyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NiAweDEwQzkKJiM0MzsjZGVmaW5lIElHQl9NQVhfQ0hVTktfU0laRSAxMDI0CiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUiAwCiYjNDM7I2RlZmluZSBNU0lYX1ZFQ1RPUl9NQVNLICgxICZsdDsmbHQ7IE1TSVhfVkVDVE9SKQomIzQzOyNkZWZpbmUgUklOR19TSVpFIDQwOTYgLyogTnVtYmVyIG9mIGRlc2NyaXB0b3JzIGluIHJpbmcgKi8KJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3R4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBidWZmZXJfYWRkcjsgLyogQWRkcmVzcyBvZiBkZXNjcmlwdG9yJiMzOTtzIGRhdGEgYnVmZmVyICovCiYjNDM7CQkJdTMyIGNtZF90eXBlX2xlbjsgLyogQ29tbWFuZC9UeXBlL0xlbmd0aCAqLwomIzQzOwkJCXUzMiBvbGluZm9fc3RhdHVzOyAvKiBDb250ZXh0L0J1ZmZlciBpbmZvICovCiYjNDM7CQl9IHJlYWQ7CiYjNDM7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCByc3ZkOyAgICAgICAgLyogUmVzZXJ2ZWQgKi8KJiM0MzsJCQl1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqLwomIzQzOwkJCXUzMiBzdGF0dXM7ICAgICAgLyogRGVzY3JpcHRvciBzdGF0dXMgKi8KJiM0MzsJCX0gd2I7CiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiX3J4X2Rlc2MgewomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3QgewomIzQzOwkJCXU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovCiYjNDM7CQkJdTY0IGhkcl9hZGRyOyAvKiBIZWFkZXIgYnVmZmVyIGFkZHJlc3MgKi8KJiM0MzsJCX0gcmVhZDsKJiM0MzsJCXN0cnVjdCB7CiYjNDM7CQkJdTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovCiYjNDM7CQkJdTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqLwomIzQzOwkJCXUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovCiYjNDM7CQkJdTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqLwomIzQzOwkJCXUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi8KJiM0MzsJCQl1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqLwomIzQzOwkJfSB3YjsgLyogd3JpdGViYWNrICovCiYjNDM7CX07CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaWdiIHsKJiM0MzsJdm9pZCAqYmFyMDsKJiM0MzsJdTMyIHR4X3RhaWw7CiYjNDM7CXUzMiByeF90YWlsOwomIzQzOwlzdHJ1Y3QgaWdiX3R4X2Rlc2MgdHhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgcnhfcmluZ1tSSU5HX1NJWkVdIF9fYXR0cmlidXRlX18oKGFsaWduZWQoMTI4KSkpOwomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgaWdiICp0b19pZ2Jfc3RhdGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJcmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLSZndDtkcml2ZXIucmVnaW9uLnZhZGRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaWdiX3dyaXRlMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnLCB1MzIgdmFsKQomIzQzO3sKJiM0MzsJd3JpdGVsKHZhbCwgaWdiLSZndDtiYXIwICYjNDM7IHJlZyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdTMyIGlnYl9yZWFkMzIoc3RydWN0IGlnYiAqaWdiLCB1MzIgcmVnKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlYWRsKGlnYi0mZ3Q7YmFyMCAmIzQzOyByZWcpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSkKJiM0Mzt7CiYjNDM7CXUzMiBtZGljOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV3JpdGUgYSBQSFkgcmVnaXN0ZXIgb3ZlciBNRElPLgomIzQzOwkgKgomIzQzOwkgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICYjNDM7IHRoZQomIzQzOwkgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGUKJiM0MzsJICogZGV2aWNlJiMzOTtzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb24KJiM0MzsJICogZXhjbHVzaXZlbHkgb24gYSBkZWRpY2F0ZWQgdGVzdCBkZXZpY2Ugd2l0aCBubyBhY3RpdmUgbWFuYWdlYWJpbGl0eQomIzQzOwkgKiBjb250ZW5kaW5nIGZvciB0aGUgUEhZLCBzbyB0aGUgc3luYyBpcyBvbWl0dGVkOyBpdCBzaG91bGQgYmUgYWRkZWQgaGVyZQomIzQzOwkgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy4KJiM0MzsJICovCiYjNDM7CW1kaWMgPSAoKCh1MzIpZGF0YSkgfAomIzQzOwkJKG9mZnNldCAmbHQ7Jmx0OyBFMTAwMF9NRElDX1JFR19TSElGVCkgfAomIzQzOwkJKDEgJmx0OyZsdDsgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHwKJiM0MzsJCUUxMDAwX01ESUNfT1BfV1JJVEUpOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpOwomIzQzOwomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgMTAwMDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXVzbGVlcCg1MCk7CiYjNDM7CQltZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpOwomIzQzOwkJaWYgKG1kaWMgJmFtcDsgRTEwMDBfTURJQ19SRUFEWSkKJiM0MzsJCQlicmVhazsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIShtZGljICZhbXA7IEUxMDAwX01ESUNfUkVBRFkpKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlpZiAobWRpYyAmYW1wOyBFMTAwMF9NRElDX0VSUk9SKQomIzQzOwkJcmV0dXJuIC0xOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBDb25maWd1cmUgdGhlIGRldmljZSBmb3IgUEhZIGludGVybmFsIGxvb3BiYWNrIHBlciA4MjU3NiBkYXRhc2hlZXQKJiM0MzsgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFjawomIzQzOyAqIGVuYWJsZWQsIHRoZW4gZm9yY2UgdGhlIE1BQyBsaW5rIHN0YXRlIHRvIG1hdGNoLiAgSW50ZXJuYWwgbG9vcGJhY2sKJiM0MzsgKiB3cmFwcyBkYXRhIGF0IHRoZSBlbmQgb2YgdGhlIFBIWSBkYXRhcGF0aCAoc2VjdGlvbiAzLjUuNi4zKSwgc28gdGhlCiYjNDM7ICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LgomIzQzOyAqCiYjNDM7ICogU2VjdGlvbiAzLjUuNi4xIGRpcmVjdHMgdG8gJiMzNDtVc2UgUEhZIExvb3BiYWNrIGluc3RlYWQgb2YgTUFDIExvb3BiYWNrCiYjNDM7ICogb24gdGhlIDgyNTc2JiMzNDssIGFuZCBzZWN0aW9uIDMuNS42LjIgc3RhdGVzICYjMzQ7TUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkCiYjNDM7ICogb24gdGhpcyBkZXZpY2UuJiMzNDsgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5CiYjNDM7ICogYWNjb21tb2RhdGlvbjsgc2VlIHRoZSBSQ1RMIHByb2dyYW1taW5nIGluIHRoZSBjYWxsZXIgZm9yIHRoZQomIzQzOyAqIHJhdGlvbmFsZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2V0dXBfbG9vcGJhY2soc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJdTMyIGN0cmw7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXIKJiM0MzsJICogUUVNVSYjMzk7cyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0cwomIzQzOwkgKiBhdXRvbmVnLWRvbmUgdGltZXIsIGFuZCB3aXRob3V0IExVIHNldCBpdHMgcmVjZWl2ZSBwYXRoCiYjNDM7CSAqIChlMTAwMHhfaHdfcnhfZW5hYmxlZCkgZHJvcHMgZXZlcnkgbG9vcGJhY2sgZnJhbWUuICBPbiByZWFsCiYjNDM7CSAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGUKJiM0MzsJICogYmVsb3cgY2xlYXJzIHRoZSBhdXRvbmVnLWVuYWJsZSBiaXQsIHNvIHRoaXMgaXMgZWZmZWN0aXZlbHkgYQomIzQzOwkgKiBuby1vcCB0aGVyZS4KJiM0MzsJICovCiYjNDM7CSh2b2lkKWlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUiwKJiM0MzsJCQkgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTsKJiM0MzsKJiM0MzsJLyogUEhZIGNvbnRyb2w6IGxvb3BiYWNrICYjNDM7IDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqLwomIzQzOwlyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsCiYjNDM7CQkJICAgIEJNQ1JfTE9PUEJBQ0sgfAomIzQzOwkJCSAgICBCTUNSX1NQRUVEMTAwMCB8CiYjNDM7CQkJICAgIEJNQ1JfRlVMTERQTFgpOwomIzQzOwlWRklPX0FTU0VSVF9FUShyZXQsIDAsICYjMzQ7RmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyJiMzNDspOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBCcmllZiBkZWxheSBiZWZvcmUgZm9yY2luZyB0aGUgTUFDLCBtaXJyb3JpbmcgdGhlIGtlcm5lbCBldGh0b29sCiYjNDM7CSAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGUKJiM0MzsJICogZGF0YXNoZWV0LCBidXQgZW1waXJpY2FsbHkgcmVxdWlyZWQgYnkgdGhlIGtlcm5lbCBkcml2ZXIuCiYjNDM7CSAqLwomIzQzOwl1c2xlZXAoNTAwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZwomIzQzOwkgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcAomIzQzOwkgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX1NQRF9TRUw7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfAomIzQzOwkJRTEwMDBfQ1RSTF9GUkNEUFggfAomIzQzOwkJRTEwMDBfQ1RSTF9TUERfMTAwMCB8CiYjNDM7CQlFMTAwMF9DVFJMX0ZEIHwKJiM0MzsJCUUxMDAwX0NUUkxfU0xVOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBTZXR0bGluZyBkZWxheSBtYXRjaGluZyB0aGUga2VybmVsIGV0aHRvb2wgc2VsZnRlc3QmIzM5O3MgbXNsZWVwKDUwMCkKJiM0MzsJICogYXQgdGhlIHRhaWwgb2YgaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5CiYjNDM7CSAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLgomIzQzOwkgKi8KJiM0MzsJdXNsZWVwKDUwMDAwMCk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpCiYjNDM7ewomIzQzOwlpbnQgcmV0cmllcyA9IDIwOwomIzQzOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMKSB8IEUxMDAwX0NUUkxfUlNUKTsKJiM0MzsJLyoKJiM0MzsJICogTXVzdCB3YWl0IGF0IGxlYXN0IDEgbWlsbGlzZWNvbmQgYWZ0ZXIgc2V0dGluZyB0aGUgcmVzZXQgYml0IGJlZm9yZQomIzQzOwkgKiBjaGVja2luZyBpZiB0aGlzIGRldmljZSBpcyByZWFkeSB0byBiZSB1c2VkICg4MjU3NiBkYXRhc2hlZXQgc2VjdGlvbgomIzQzOwkgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmQKJiM0MzsJICogY2xlYXJlZCBFRUNELkFVVE9fUkQgYmVmb3JlIGl0IGlzIHBvbGxlZCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CXVzbGVlcCgxMDAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUG9sbCBOVk0gQXV0byBSZWFkIERvbmUgcmF0aGVyIHRoYW4gQ1RSTC5SU1QsIG1hdGNoaW5nCiYjNDM7CSAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXQKJiM0MzsJICogdGhlIHJlc2V0IGNvbXBsZXRlZCBhbmQgdGhhdCB0aGUgZGV2aWNlIGZpbmlzaGVkIHJlLXJlYWRpbmcgaXRzCiYjNDM7CSAqIGNvbmZpZ3VyYXRpb24gZnJvbSBOVk0sIHdoaWNoIGlzIHdoYXQgYWN0dWFsbHkgbWFrZXMgaXQgdXNhYmxlLgomIzQzOwkgKi8KJiM0MzsJd2hpbGUgKHJldHJpZXMtLSAmZ3Q7IDAgJmFtcDsmYW1wOyAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSAmYW1wOyBFMTAwMF9FRUNEX0FVVE9fUkQpKQomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBRRU1VJiMzOTtzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LAomIzQzOwkgKiBjaGVjayBpZiBDVFJMLlJTVCBpcyBjbGVhcmVkLCB3aGljaCBpcyB3aGF0IFFFTVUgdXNlcyB0byBzaWduYWwgcmVzZXQKJiM0MzsJICogY29tcGxldGlvbi4KJiM0MzsJICovCiYjNDM7CWlmIChyZXRyaWVzICZsdDsgMCkgewomIzQzOwkJVkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpICZhbXA7IEUxMDAwX0NUUkxfUlNULCAwLAomIzQzOwkJCSAgICAgICAmIzM0O0RldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZCkmIzM0Oyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JTUMsIDB4RkZGRkZGRkYpOwomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXQKJiM0MzsgKiBjYW4gYmUgcmV1c2VkIGFmdGVyIGEgZGV2aWNlIHJlc2V0IHRvIHJlLXByb2dyYW0gdGhlIHJlZ2lzdGVycyB0aGF0CiYjNDM7ICogQ1RSTC5SU1QgY2xlYXJzLiAgRXhwZWN0cyBiYXIwIHRvIGJlIG1hcHBlZCBhbmQgTVNJLVggYWxyZWFkeSBlbmFibGVkCiYjNDM7ICogdmlhIFZGSU8uCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2h3X2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXU2NCBpb3ZhX3R4LCBpb3ZhX3J4OwomIzQzOwl1MzIgY3RybCwgcmN0bDsKJiM0MzsJdTE2IGNtZF9yZWc7CiYjNDM7CWludCByZXRyaWVzOwomIzQzOwomIzQzOwlpb3ZhX3R4ID0gdG9faW92YShkZXZpY2UsIGlnYi0mZ3Q7dHhfcmluZyk7CiYjNDM7CWlvdmFfcnggPSB0b19pb3ZhKGRldmljZSwgaWdiLSZndDtyeF9yaW5nKTsKJiM0MzsKJiM0MzsKJiM0MzsKJiM0MzsJLyogU2lnbmFsIHRoYXQgdGhlIGRyaXZlciBpcyBsb2FkZWQgKi8KJiM0MzsJY3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7CiYjNDM7CWN0cmwgfD0gRTEwMDBfQ1RSTF9FWFRfRFJWX0xPQUQ7CiYjNDM7CWN0cmwgJmFtcDs9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7CiYjNDM7CiYjNDM7CS8qIEVuYWJsZSBQQ0kgQnVzIE1hc3Rlci4gKi8KJiM0MzsJY21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTsKJiM0MzsJaWYgKChjbWRfcmVnICZhbXA7IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPQomIzQzOwkgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHsKJiM0MzsJCWNtZF9yZWcgfD0gKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSk7CiYjNDM7CQl2ZmlvX3BjaV9jb25maWdfd3JpdGV3KGRldmljZSwgUENJX0NPTU1BTkQsIGNtZF9yZWcpOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovCiYjNDM7CWlnYl9zZXR1cF9sb29wYmFjayhpZ2IpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXQKJiM0MzsJICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGUKJiM0MzsJICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmcKJiM0MzsJICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHMKJiM0MzsJICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kCiYjNDM7CSAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS4KJiM0MzsJICovCiYjNDM7CWN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTsKJiM0MzsJY3RybCAmYW1wOz0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HQ1IsIGN0cmwpOwomIzQzOwomIzQzOwkvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCAmZ3Q7Jmd0OyAzMikpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUwoMCksICh1MzIpaW92YV9yeCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRCQUgoMCksICh1MzIpKGlvdmFfcnggJmd0OyZndDsgMzIpKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SRExFTigwKSwgUklOR19TSVpFICogc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JESCgwKSwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogU2VsZWN0IHRoZSBhZHZhbmNlZCBvbmUtYnVmZmVyIGRlc2NyaXB0b3IgZm9ybWF0LiAgUGVyIDgyNTc2CiYjNDM7CSAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6ICYjMzQ7U1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGEKJiM0MzsJICogdmFsdWUgb3RoZXIgdGhhbiAwMDBiIGZvciB0aGUgODI1NzYgdG8gd3JpdGUgYmFjayB0aGUgc3BlY2lhbAomIzQzOwkgKiBkZXNjcmlwdG9ycy4mIzM0OyAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIKJiM0MzsJICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3IKJiM0MzsJICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLgomIzQzOwkgKgomIzQzOwkgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXMKJiM0MzsJICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG8KJiM0MzsJICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OAomIzQzOwkgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTsKJiM0MzsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBFbmFibGUgUmVjZWl2ZXIgYW5kIFRyYW5zbWl0dGVyLiAgUkNUTC5MQk1fTUFDIGlzIHNldCBpbiBhZGRpdGlvbgomIzQzOwkgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSYjMzk7cyBlbXVsYXRlZCBpZ2IKJiM0MzsJICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZAomIzQzOwkgKiByZWxpZXMgb24gUkNUTC5MQk1fTUFDIHRvIHdyYXAgVFggZGVzY3JpcHRvcnMgYmFjayB0byB0aGUgUlgKJiM0MzsJICogcXVldWUuICBEYXRhc2hlZXQgOC4xMC4xIChSQ1RMIHJlZ2lzdGVyKSBhZHZpc2VzICYjMzQ7V2hlbiB1c2luZyB0aGUKJiM0MzsJICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiJiMzNDssIHNvIHNldHRpbmcgTEJNX01BQwomIzQzOwkgKiBoZXJlIGRldmlhdGVzIGZyb20gZGF0YXNoZWV0IGd1aWRhbmNlOyBlbXBpcmljYWxseSB0aGUgYml0IGhhcwomIzQzOwkgKiBubyBvYnNlcnZhYmxlIGVmZmVjdCBvbiByZWFsIDgyNTc2IGhhcmR3YXJlIGJlY2F1c2UgTUFDIGxvb3BiYWNrCiYjNDM7CSAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlCiYjNDM7CSAqIHNlbGZ0ZXN0IHdvcmsgb24gYm90aCByZWFsIGhhcmR3YXJlIGFuZCBRRU1VIHdpdGhvdXQgY29uZGl0aW9uYWwKJiM0MzsJICogY29kZSBwYXRocy4KJiM0MzsJICovCiYjNDM7CXJjdGwgPSBFMTAwMF9SQ1RMX0VOIHwgICAgICAgLyogUmVjZWl2ZXIgRW5hYmxlICovCiYjNDM7CSAgICAgICBFMTAwMF9SQ1RMX1VQRSB8ICAgICAgLyogVW5pY2FzdCBQcm9taXNjdW91cyAoZm9yIGR1bW15IE1BQykgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfQkFNIHwgICAgICAvKiBCcm9hZGNhc3QgQWNjZXB0IE1vZGUgKi8KJiM0MzsJICAgICAgIEUxMDAwX1JDVExfTEJNX01BQyB8ICAvKiBNQUMgTG9vcGJhY2sgLSBmb3IgUUVNVSBlbXVsYXRpb24gb25seSAqLwomIzQzOwkgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgcmN0bCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgRTEwMDBfVENUTF9FTiB8IEUxMDAwX1RDVExfUFNQKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMCiYjNDM7CSAqIHJlZ2lzdGVyIGRlZmluaXRpb25zICg4LjEwLjEwLzguMTIuMTMpLCB0aGUgcGVyLXF1ZXVlIGVuYWJsZSBiaXQKJiM0MzsJICogJiMzNDtyZW1haW5zIHplcm8mIzM0OyB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc28KJiM0MzsJICogRTEwMDBfUkNUTF9FTiBhbmQgRTEwMDBfVENUTF9FTiBtdXN0IGFscmVhZHkgYmUgd3JpdHRlbiBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDAwOwomIzQzOwl3aGlsZSAocmV0cmllcy0tICZndDsgMCkgewomIzQzOwkJaWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSAmYW1wOyBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9SWERDVEwoMCkpICZhbXA7IEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwKTsKJiM0MzsJfQomIzQzOwlWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUHJvZ3JhbSBNU0ktWCBpbnRlcnJ1cHQgcm91dGluZyBwZXIgODI1NzYgZGF0YXNoZWV0OgomIzQzOwkgKgomIzQzOwkgKiBHUElFIChzZWN0aW9uIDcuMy4yLjExLCBUYWJsZSA3LTQ3KTogc2V0IE11bHRpcGxlX01TSVggKGJpdCA0KSB0bwomIzQzOwkgKiByb3V0ZSBpbnRlcnJ1cHQgY2F1c2VzIHRocm91Z2ggSVZBUiBtYXBwaW5nLCBhbmQgRUlBTUUgKGJpdCAzMCkKJiM0MzsJICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seQomIzQzOwkgKiBhcHBsaWVzIG9uIEVJQ1IgcmVhZC93cml0ZSkuCiYjNDM7CSAqCiYjNDM7CSAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC4KJiM0MzsJICogV2l0aG91dCBhdXRvLWNsZWFyIHRoZSBjYXVzZSBzdGF5cyBzZXQgYWZ0ZXIgZGVsaXZlcnkgYW5kIHRoZQomIzQzOwkgKiB0ZXN0IGNhbiBzZWUgc3B1cmlvdXMgaW50ZXJydXB0cyBvbiB0aGUgbmV4dCBtZW1jcHkgYmF0Y2guCiYjNDM7CSAqCiYjNDM7CSAqIEVJQU0gKHNlY3Rpb24gOC44LjYpOiBlbmFibGUgYXV0by1tYXNrIG9mIEVJTVMgZm9yIHZlY3RvciAwIG9uCiYjNDM7CSAqIE1TSS1YIGFzc2VydGlvbiAoZWZmZWN0aXZlIGJlY2F1c2UgRUlBTUUgaXMgc2V0KS4KJiM0MzsJICoKJiM0MzsJICogSVZBUiAoc2VjdGlvbiA3LjMuMS4yLCByZWdpc3RlciBkZWZpbml0aW9uIGluIDguOC4xMyk6IG1hcCBSWAomIzQzOwkgKiBjYXVzZSAwIHRvIE1TSS1YIHZlY3RvciAwIGFuZCBtYXJrIHRoZSBlbnRyeSB2YWxpZC4KJiM0MzsJICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR1BJRSwgRTEwMDBfR1BJRV9NU0lYX01PREUgfCBFMTAwMF9HUElFX0VJQU1FKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFDLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTsKJiM0MzsKJiM0MzsJLyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovCiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpOwomIzQzOwomIzQzOwkvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqLwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTVMsIE1TSVhfVkVDVE9SX01BU0spOwomIzQzOwomIzQzOwkvKiBJbml0aWFsaXplIGRyaXZlciBzdGF0ZSBhbmQgY2FwYWJpbGl0eSBsaW1pdHMgKi8KJiM0MzsJaWdiLSZndDt0eF90YWlsID0gMDsKJiM0MzsJaWdiLSZndDtyeF90YWlsID0gMDsKJiM0MzsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFOwomIzQzOwlkZXZpY2UtJmd0O2RyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTsKJiM0MzsJZGV2aWNlLSZndDtkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O2RyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTsKJiM0MzsKJiM0MzsJaWdiLSZndDtiYXIwID0gZGV2aWNlLSZndDtiYXJzWzBdLnZhZGRyOwomIzQzOwomIzQzOwlpZ2JfcmVzZXQoaWdiKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogRW5hYmxlIE1TSS1YIHZpYSBWRklPIGJlZm9yZSBkZXZpY2Utc2lkZSByZWdpc3RlciBwcm9ncmFtbWluZy4KJiM0MzsJICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlCiYjNDM7CSAqIFBDSSBNU0ktWCBjYXBhYmlsaXR5IHZpYSBjb25maWcgc3BhY2U7IGl0IGhhcyBubyBvcmRlcmluZwomIzQzOwkgKiBkZXBlbmRlbmN5IG9uIHRoZSBkZXZpY2Utc2lkZSB3cml0ZXMgcGVyZm9ybWVkIGJ5IGlnYl9od19pbml0KCkuCiYjNDM7CSAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0CiYjNDM7CSAqIHJlY292ZXJ5IHBhdGggKHdoaWNoIGNhbGxzIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGluc3RlYWQpLgomIzQzOwkgKi8KJiM0MzsJdmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVENUTCwgMCk7CiYjNDM7CWlnYl9yZXNldChpZ2IpOwomIzQzOwomIzQzOwl2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNQywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfZW5hYmxlKHN0cnVjdCBpZ2IgKmlnYikKJiM0Mzt7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlNUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlnYl9pcnFfY2xlYXIoc3RydWN0IGlnYiAqaWdiKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQwomIzQzOwkgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzICYjMzQ7SWYgYW55IGJpdHMgYXJlIHNldAomIzQzOwkgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWQmIzM0Oywgd2hpY2ggcnVsZXMgb3V0CiYjNDM7CSAqIHRoZSByZWFkLXRvLWNsZWFyIHBhdGggaW4gNy4zLjQuMy4gIEJpdHMgbm90IGluIEVJQUMgYXJlIHN0aWxsCiYjNDM7CSAqIGNsZWFyZWQgYnkgd3JpdGluZyAxLgomIzQzOwkgKi8KJiM0MzsJaWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNSLCAweEZGRkZGRkZGKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaWdiX21lbWNweV9zdGFydChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGlvdmFfdCBzcmMsCiYjNDM7CQkJICAgICBpb3ZhX3QgZHN0LCB1NjQgc2l6ZSwgdTY0IGNvdW50KQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CXN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7CiYjNDM7CXN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7CiYjNDM7CXUzMiBpOwomIzQzOwomIzQzOwlWRklPX0FTU0VSVF9HRShzaXplLCA2MCwKJiM0MzsJCSAgICAgICAmIzM0O0lHQiBkcml2ZXIgcmVxdWlyZXMgbWVtY3B5IHNpemUgdG8gYmUgYXQgbGVhc3QgNjAgYnl0ZXMgKEV0aGVybmV0IG1pbmltdW0gcGF5bG9hZCBzaXplKSYjMzQ7KTsKJiM0MzsKJiM0MzsJaWdiX2lycV9kaXNhYmxlKGlnYik7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBjb3VudDsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCXR4ID0gJmFtcDtpZ2ItJmd0O3R4X3JpbmdbaWdiLSZndDt0eF90YWlsXTsKJiM0MzsJCXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbaWdiLSZndDtyeF90YWlsXTsKJiM0MzsKJiM0MzsJCW1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpOwomIzQzOwkJbWVtc2V0KHJ4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl9yeF9kZXNjKSk7CiYjNDM7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5wa3RfYWRkciA9IGNwdV90b19sZTY0KGRzdCk7CiYjNDM7CQlyeC0mZ3Q7cmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApOwomIzQzOwomIzQzOwkJdHgtJmd0O3JlYWQuYnVmZmVyX2FkZHIgPSBjcHVfdG9fbGU2NChzcmMpOwomIzQzOwkJLyoKJiM0MzsJCSAqIEJ1aWxkIGFuIGFkdmFuY2VkIGRhdGEgZGVzY3JpcHRvciBwZXIgODI1NzYgZGF0YXNoZWV0CiYjNDM7CQkgKiBzZWN0aW9uIDcuMi4yLjMuICBERVhUIG1hcmtzIHRoZSBkZXNjcmlwdG9yIGFzIGFkdmFuY2VkCiYjNDM7CQkgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YQomIzQzOwkJICogZGVzY3JpcHRvcjsgSUZDUyBhc2tzIHRoZSBNQUMgdG8gYXBwZW5kIHRoZSBFdGhlcm5ldAomIzQzOwkJICogRkNTICh3aXRob3V0IGl0IHRoZSBmcmFtZSBpcyBkcm9wcGVkIGFzIG1hbGZvcm1lZCk7CiYjNDM7CQkgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aAomIzQzOwkJICogaW4gYml0cyAxNTowIG9mIGNtZF90eXBlX2xlbi4KJiM0MzsJCSAqLwomIzQzOwkJdHgtJmd0O3JlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EVFlQX0RBVEEgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0RFWFQgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfAomIzQzOwkJCUUxMDAwX0FEVlRYRF9EQ01EX0VPUCk7CiYjNDM7CQkvKgomIzQzOwkJICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemUKJiM0MzsJCSAqIGluIG9saW5mb19zdGF0dXNbMzE6MTRdLgomIzQzOwkJICovCiYjNDM7CQl0eC0mZ3Q7cmVhZC5vbGluZm9fc3RhdHVzID0KJiM0MzsJCQljcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSAmbHQ7Jmx0OyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTsKJiM0MzsKJiM0MzsJCWlnYi0mZ3Q7dHhfdGFpbCA9IChpZ2ItJmd0O3R4X3RhaWwgJiM0MzsgMSkgJSBSSU5HX1NJWkU7CiYjNDM7CQlpZ2ItJmd0O3J4X3RhaWwgPSAoaWdiLSZndDtyeF90YWlsICYjNDM7IDEpICUgUklOR19TSVpFOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItJmd0O3J4X3RhaWwpOwomIzQzOwlpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLSZndDt0eF90YWlsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZXNldCB0aGUgZGV2aWNlIHZpYSBWRklPX0RFVklDRV9SRVNFVCAoUENJZSBGTFIgb24gdGhlIDgyNTc2KSBhbmQKJiM0MzsgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVgKJiM0MzsgKiB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdCwgc28gcmUtYXJtIHRoZSB0cmlnZ2VyCiYjNDM7ICogdmlhIHZmaW9fcGNpX2lycV9yZWVuYWJsZSgpIGJlZm9yZSByZXByb2dyYW1taW5nIHNvIGFueSBjYWxsZXItY2FjaGVkCiYjNDM7ICogZXZlbnRmZCByZW1haW5zIHZhbGlkLgomIzQzOyAqCiYjNDM7ICogRkxSIGNsZWFycyBkZXZpY2Utc2lkZSBzdGF0ZSB0byBwb3dlci1vbiByZXNldCB2YWx1ZXMgKGRhdGFzaGVldAomIzQzOyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgJiMzNDtlcXVpdmFsZW50IHRvIGEgRDAtJmd0O0QzLSZndDtEMCB0cmFuc2l0aW9uJiMzNDspLCBzbwomIzQzOyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWwKJiM0MzsgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0CiYjNDM7ICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZQomIzQzOyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlCiYjNDM7ICogbmVlZGVkIGhlcmUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJdmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7CiYjNDM7CXZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7CiYjNDM7CWlnYl9od19pbml0KGRldmljZSk7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpOwomIzQzOwlzdHJ1Y3QgaWdiX3J4X2Rlc2MgKnJ4OwomIzQzOwl1MzIgc3RhdHVzID0gMDsKJiM0MzsJdTMyIHByZXZfdGFpbDsKJiM0MzsJaW50IHJldHJpZXM7CiYjNDM7CiYjNDM7CXByZXZfdGFpbCA9IChpZ2ItJmd0O3J4X3RhaWwgJiM0MzsgUklOR19TSVpFIC0gMSkgJSBSSU5HX1NJWkU7CiYjNDM7CXJ4ID0gJmFtcDtpZ2ItJmd0O3J4X3JpbmdbcHJldl90YWlsXTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogUmVhbCA4MjU3NiBoYXJkd2FyZSBwcm9jZXNzZXMgdGhlIGRlc2NyaXB0b3IgcmluZyBhdCBsaW5lIHJhdGUuCiYjNDM7CSAqIG1heF9tZW1jcHlfc2l6ZSA9IChSSU5HX1NJWkUgLSAxKSAqIElHQl9NQVhfQ0hVTktfU0laRSB+PSA0IE1CLAomIzQzOwkgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0CiYjNDM7CSAqIHZhbGlkIG1lbWNweSB0YWtlcyB+MzIgbXMgb24gdGhlIHdpcmUsIHBsdXMgcGVyLWZyYW1lIHByZWFtYmxlLAomIzQzOwkgKiBTRkQsIElGRyBhbmQgRkNTIG92ZXJoZWFkICh+MyUpIGFuZCBkZXNjcmlwdG9yIGZldGNoL3dyaXRlYmFjawomIzQzOwkgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nOwomIzQzOwkgKiB+NnggdGhlIGxpbmUtcmF0ZSBmbG9vciBsZWF2ZXMgY29tZm9ydGFibGUgaGVhZHJvb20gZm9yIGhvc3QKJiM0MzsJICogc2NoZWR1bGluZyBqaXR0ZXIgd2hpbGUga2VlcGluZyB0aGUgaW50ZW50aW9uYWwgaW52YWxpZC1ETUEKJiM0MzsJICogdGVzdHMgYm91bmRlZC4KJiM0MzsJICovCiYjNDM7CXJldHJpZXMgPSAyMDA7CiYjNDM7CXdoaWxlIChyZXRyaWVzLS0gJmd0OyAwKSB7CiYjNDM7CQlzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtJmd0O3diLnN0YXR1c19lcnJvcikpOwomIzQzOwkJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJCWJyZWFrOwomIzQzOwkJdXNsZWVwKDEwMDApOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzdGF0dXMgJmFtcDsgMSkKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2VzbiYjMzk7dCBzcGVjdWxhdGl2ZWx5IHJlYWQgdGhlIERNQQomIzQzOwkJICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlCiYjNDM7CQkgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS4KJiM0MzsJCSAqLwomIzQzOwkJcm1iKCk7CiYjNDM7CiYjNDM7CWlnYl9pcnFfY2xlYXIoaWdiKTsKJiM0MzsKJiM0MzsJaWdiX2lycV9lbmFibGUoaWdiKTsKJiM0MzsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyAxKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpcwomIzQzOwkgKiB0eXBpY2FsbHkgZm9sbG93cyBhIERNQS1yZWFkIGZhdWx0IGZyb20gb25lIG9mIHRoZSBpbnRlbnRpb25hbAomIzQzOwkgKiB1bm1hcHBlZC1JT1ZBIHRlc3RzOyB0aGUgZmF1bHQgbGVhdmVzIHRoZSBkZXNjcmlwdG9yIGVuZ2luZQomIzQzOwkgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmUKJiM0MzsJICogcmVpbml0aWFsaXplcyB0aGUgcXVldWUgcmVnaXN0ZXJzIGJ1dCBsZWF2ZXMgdGhlIGVuZ2luZSB3ZWRnZWQKJiM0MzsJICogZm9yIHRoZSBjdXJyZW50IHByb2Nlc3MsIHNvIGEgYnJvYWRlciBWRklPX0RFVklDRV9SRVNFVCAoRkxSKQomIzQzOwkgKiBpcyByZXF1aXJlZC4KJiM0MzsJICovCiYjNDM7CWlnYl9lcnJvcl9yZXNldF9hbmRfcmVpbml0KGRldmljZSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQomIzQzO3sKJiM0MzsJc3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7CiYjNDM7CiYjNDM7CWlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUywgTVNJWF9WRUNUT1JfTUFTSyk7CiYjNDM7fQomIzQzOwomIzQzO2NvbnN0IHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlnYl9vcHMgPSB7CiYjNDM7CS5uYW1lID0gJiMzNDtpZ2ImIzM0OywKJiM0MzsJLnByb2JlID0gaWdiX3Byb2JlLAomIzQzOwkuaW5pdCA9IGlnYl9pbml0LAomIzQzOwkucmVtb3ZlID0gaWdiX3JlbW92ZSwKJiM0MzsJLm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsCiYjNDM7CS5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCwKJiM0MzsJLnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLAomIzQzO307CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmgKaW5kZXggNTlhY2VmMzgxZDA1Ni4uZTE5YmQ5NGI4ZGQyYSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaApAQCAtNDMsNiAmIzQzOzQzLDcgQEAgdm9pZCB2ZmlvX3BjaV9kZXZpY2VfZnJlZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpOwogc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTsKIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIAomIzQzO2ludCBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpOwogdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTsKIAogdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSwKQEAgLTg0LDYgJiM0Mzs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cykKIHZvaWQgdmZpb19wY2lfaXJxX2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKIAkJCSB1MzIgdmVjdG9yLCBpbnQgY291bnQpOwogdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7CiYjNDM7dm9pZCB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsCiYjNDM7CQkJICAgdTMyIHZlY3RvciwgaW50IGNvdW50KTsKIHZvaWQgdmZpb19wY2lfaXJxX3RyaWdnZXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsIHUzMiB2ZWN0b3IpOwogCiBzdGF0aWMgaW5saW5lIHZvaWQgZmNudGxfc2V0X25vbmJsb2NrKGludCBmZCkKQEAgLTEwOCw2ICYjNDM7MTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiAJdmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJIHUzMiB2ZWN0b3IsIGludCBjb3VudCkKJiM0Mzt7CiYjNDM7CXZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsCiAJCQkJCXUzMiB2ZWN0b3IsIGludCBjb3VudCkKIHsKQEAgLTExOSw2ICYjNDM7MTI4LDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKQogCXZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaXhfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLAomIzQzOwkJCQkJICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwl2ZmlvX3BjaV9pcnFfcmVlbmFibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7CiYjNDM7fQomIzQzOwogc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSkKIHsKIAlyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtJmd0O2lvbW11LCB2YWRkciwgaW92YSk7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tawppbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWsKQEAgLTE2LDYgJiM0MzsxNiw3IEBAIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9kc2EvZHNhLmMKIGVuZGlmCiAKIExJQlZGSU9fQyAmIzQzOz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmMKJiM0MztMSUJWRklPX0MgJiM0Mzs9IGRyaXZlcnMvaWdiL2lnYi5jCiAKIExJQlZGSU9fT1VUUFVUIDo9ICQoT1VUUFVUKS9saWJ2ZmlvCiAKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKaW5kZXggMjg4NjgzNDNmMmFiNS4uNDA2M2EwZTJiM2RmMyAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMKQEAgLTEsNSAmIzQzOzEsNiBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQogI2luY2x1ZGUgJmx0O2RpcmVudC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtlcnJuby5oJmd0OwogI2luY2x1ZGUgJmx0O2ZjbnRsLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGliZ2VuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CkBAIC0xMDUsNiAmIzQzOzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KQogCXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgMCwgMCwgTlVMTCk7CiB9CiAKJiM0MzsvKgomIzQzOyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nCiYjNDM7ICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2UKJiM0MzsgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlCiYjNDM7ICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGUKJiM0MzsgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzCiYjNDM7ICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS4KJiM0MzsgKi8KJiM0Mzt2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwKJiM0MzsJCQkgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpCiYjNDM7ewomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJY2hlY2tfc3VwcG9ydGVkX2lycV9pbmRleChpbmRleCk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IHZlY3RvcjsgaSAmbHQ7IHZlY3RvciAmIzQzOyBjb3VudDsgaSYjNDM7JiM0MzspCiYjNDM7CQlWRklPX0FTU0VSVF9HRShkZXZpY2UtJmd0O21zaV9ldmVudGZkc1tpXSwgMCwKJiM0MzsJCQkgICAgICAgJiMzNDt2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXG4mIzM0OywgaSk7CiYjNDM7CiYjNDM7CXZmaW9fcGNpX2lycV9zZXQoZGV2aWNlLCBpbmRleCwgdmVjdG9yLCBjb3VudCwgZGV2aWNlLSZndDttc2lfZXZlbnRmZHMgJiM0MzsgdmVjdG9yKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCB2ZmlvX3BjaV9pcnFfZ2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LAogCQkJICAgICBzdHJ1Y3QgdmZpb19pcnFfaW5mbyAqaXJxX2luZm8pCiB7CkBAIC0yMzcsOSAmIzQzOzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLAogCQkgICAgICAgd3JpdGUgPyAmIzM0O3dyaXRlIHRvJiMzNDsgOiAmIzM0O3JlYWQgZnJvbSYjMzQ7LCBjb25maWcpOwogfQogCiYjNDM7aW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSkKJiM0Mzt7CiYjNDM7CWlmIChpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpCiYjNDM7CQlyZXR1cm4gLWVycm5vOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCiB7Ci0JaW9jdGxfYXNzZXJ0KGRldmljZS0mZ3Q7ZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKTsKJiM0MzsJaW50IHJldHJpZXMgPSAyMDsKJiM0MzsJaW50IHI7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXIgPSBfX3ZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpOwomIzQzOwkJaWYgKHIgPT0gLUVBR0FJTikKJiM0MzsJCQl1c2xlZXAoMTAwMDApOwomIzQzOwl9IHdoaWxlIChyID09IC1FQUdBSU4gJmFtcDsmYW1wOyByZXRyaWVzLS0gJmd0OyAwKTsKJiM0MzsKJiM0MzsJVkZJT19BU1NFUlRfRVEociwgMCwgJiMzNDtpb2N0bChkZXZpY2UtJmd0O2ZkLCBWRklPX0RFVklDRV9SRVNFVCkgZmFpbGVkXG4mIzM0Oyk7CiB9CiAKIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCmluZGV4IDE1M2JmNGE3YTE5ZjkuLjVlNjU0MzRkMjMxOGIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jCkBAIC02LDggJiM0Mzs2LDggQEAKIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzOwogZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzOwogI2VuZGlmCi0KIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzOwogCiBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKICNpZmRlZiBfX3g4Nl82NF9fCkBAIC0xNSw2ICYjNDM7MTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHsKIAkmYW1wO2lvYXRfb3BzLAogI2VuZGlmCiAJJmFtcDtudl9mYWxjb25fb3BzLAomIzQzOwkmYW1wO2lnYl9vcHMsCiB9OwogCiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMTEzCgkJCQkJCQlvdXRwdXQ6IDY3CgkJCQkJCQl0aG91Z2h0czogOTIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBhZGRpbmcgYW4gYGlnYmAgZHJpdmVyIHRvIHRoZSBWRklPIHNlbGZ0ZXN0cy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgYXNzZXNzIGl0cyBmdXp6aW5nIHdvcnRoaW5lc3MuIFRoZSBwYXRjaCB0b3VjaGVzIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9gLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWc6IHNlbGZ0ZXN0cyBhcmUgKnVzZXItc3BhY2UqLiBUaGV5JiMzOTtyZSBkZXNpZ25lZCB0byB2YWxpZGF0ZSBrZXJuZWwgYmVoYXZpb3IsIGJ1dCBhcmVuJiMzOTt0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGl0c2VsZi4KCk5vdywgbGV0JiMzOTtzIGNvbmZpcm0gdGhlIHNjb3BlLiBUaGUgY2hhbmdlcyBzZWVtIHRvIGJlIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY2AsIGFuZCBzdXBwb3J0aW5nIGZpbGVzLiBBbHJpZ2h0LCBzbywgdGhlc2UgZmlsZXMgYXJlOgoKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaGAKKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oYAoqICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgCiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmNgCgpPa2F5LCBzbyBub25lIG9mIHRoZXNlIGxvb2sgbGlrZSB0aGV5JiMzOTtyZSB0b3VjaGluZyBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4gSSBoYXZlIHRvIGxvb2sgY2xvc2VseSBiZWNhdXNlIHNlbGZ0ZXN0cyBvZnRlbiBuZWVkIHRvIG1vY2sgb3IgaW50ZXJhY3Qgd2l0aCBrZXJuZWwgY29tcG9uZW50cy4gSG93ZXZlciwgdGhpcyBsb29rcyBwcmV0dHkgY29udGFpbmVkLiBUaGUgcHJvbXB0IGV4cGxpY2l0bHkgc2F5cyB0byBldmFsdWF0ZSByZWFjaGFibGUga2VybmVsIGNvZGUsIGFuZCBzaW5jZSB0aGlzIGlzIGFsbCBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYCwgaXQgZG9lc24mIzM5O3QgbW9kaWZ5IHRoZSBrZXJuZWwuCgpUaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgc2VsZnRlc3QgY29kZS4gTXkgcmVhc29uaW5nOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaXRzZWxmLiBXZSBhcmUgZ29vZCB0byBjYWxsIHNldC1yZXN1bHRzIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDAwOjQwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMi41MjcyNjAzMTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTMxNzg2OTk1MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMi41MjcyNjYzNTRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDAxODA3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE5MGZjZTI1OGFlNmI3OTI1NDFmYzFiZDdiMTlmM2I1Yjk5MmJhMjdcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBBdWcgNSAwMDo0MDozMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYjg0YWZmZGVjNTU5OFxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxcblxcXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhcXG5uZXcgZmlsZSBtb2RlIDEyMDAwMFxcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZcXG4tLS0gL2Rldi9udWxsXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxuQEAgLTAsMCArMSBAQFxcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfZGVmaW5lcy5oXFxuXFxcXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaFxcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uYzczMzYzNDE3MWJiMVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcXG5AQCAtMCwwICsxIEBAXFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9yZWdzLmhcXG5cXFxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMC4uZmQ5ZTA1ZDc3ZWE0Ylxcbi0tLSAvZGV2L251bGxcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xcbkBAIC0wLDAgKzEsNTg1IEBAXFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4rI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZXJybm8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGludC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaW8uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BjaV9yZWdzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9wY2lfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NvbXBpbGVyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2Nhc20vYmFycmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbWlpLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcImUxMDAwX3JlZ3MuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwX2RlZmluZXMuaFxcXCJcXG4rI2luY2x1ZGUgXFxcImUxMDAwXzgyNTc1LmhcXFwiXFxuK1xcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XFxuKyNkZWZpbmUgSUdCX01BWF9DSFVOS19TSVpFIDEwMjRcXG4rI2RlZmluZSBNU0lYX1ZFQ1RPUiAwXFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcXHUwMDNjXFx1MDAzYyBNU0lYX1ZFQ1RPUilcXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xcbitcXG4rc3RydWN0IGlnYl90eF9kZXNjIHtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qge1xcbitcXHRcXHRcXHR1NjQgYnVmZmVyX2FkZHI7IC8qIEFkZHJlc3Mgb2YgZGVzY3JpcHRvcidzIGRhdGEgYnVmZmVyICovXFxuK1xcdFxcdFxcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cXG4rXFx0XFx0XFx0dTMyIG9saW5mb19zdGF0dXM7IC8qIENvbnRleHQvQnVmZmVyIGluZm8gKi9cXG4rXFx0XFx0fSByZWFkO1xcbitcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xcbitcXHRcXHRcXHR1MzIgbnh0c2VxX3NlZWQ7IC8qIE5leHQgc2VxdWVuY2Ugc2VlZCAqL1xcbitcXHRcXHRcXHR1MzIgc3RhdHVzOyAgICAgIC8qIERlc2NyaXB0b3Igc3RhdHVzICovXFxuK1xcdFxcdH0gd2I7XFxuK1xcdH07XFxuK307XFxuK1xcbitzdHJ1Y3QgaWdiX3J4X2Rlc2Mge1xcbitcXHR1bmlvbiB7XFxuK1xcdFxcdHN0cnVjdCB7XFxuK1xcdFxcdFxcdHU2NCBwa3RfYWRkcjsgLyogUGFja2V0IGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdFxcdHU2NCBoZHJfYWRkcjsgLyogSGVhZGVyIGJ1ZmZlciBhZGRyZXNzICovXFxuK1xcdFxcdH0gcmVhZDtcXG4rXFx0XFx0c3RydWN0IHtcXG4rXFx0XFx0XFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXFxuK1xcdFxcdFxcdHUxNiBoZHJfaW5mbzsgICAgIC8qIFNwbGl0IEhlYWQsIGJ1ZiBsZW4gKi9cXG4rXFx0XFx0XFx0dTMyIHJzczsgICAgICAgICAgLyogUlNTIEhhc2ggKi9cXG4rXFx0XFx0XFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xcbitcXHRcXHRcXHR1MTYgbGVuZ3RoOyAgICAgICAvKiBQYWNrZXQgbGVuZ3RoICovXFxuK1xcdFxcdFxcdHUxNiB2bGFuOyAgICAgICAgIC8qIFZMQU4gdGFnICovXFxuK1xcdFxcdH0gd2I7IC8qIHdyaXRlYmFjayAqL1xcbitcXHR9O1xcbit9O1xcbitcXG4rc3RydWN0IGlnYiB7XFxuK1xcdHZvaWQgKmJhcjA7XFxuK1xcdHUzMiB0eF90YWlsO1xcbitcXHR1MzIgcnhfdGFpbDtcXG4rXFx0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjIHJ4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGlnYiAqdG9faWdiX3N0YXRlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRyZXR1cm4gKHN0cnVjdCBpZ2IgKilkZXZpY2UtXFx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXFxuK3tcXG4rXFx0d3JpdGVsKHZhbCwgaWdiLVxcdTAwM2ViYXIwICsgcmVnKTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB1MzIgaWdiX3JlYWQzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcpXFxuK3tcXG4rXFx0cmV0dXJuIHJlYWRsKGlnYi1cXHUwMDNlYmFyMCArIHJlZyk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX3dyaXRlX3BoeShzdHJ1Y3QgaWdiICppZ2IsIHUzMiBvZmZzZXQsIHUxNiBkYXRhKVxcbit7XFxuK1xcdHUzMiBtZGljO1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cXG4rXFx0ICpcXG4rXFx0ICogQSBwcm9kdWN0aW9uIGRyaXZlciB3b3VsZCBob2xkIHRoZSBTVy9GVyBzZW1hcGhvcmUgKFNXU00uU1dFU01CSSArIHRoZVxcbitcXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcXG4rXFx0ICogZGV2aWNlJ3MgbWFuYWdlbWVudCBmaXJtd2FyZS4gIFRoZSBzZWxmdGVzdCBvd25zIHRoZSBhc3NpZ25lZCBmdW5jdGlvblxcbitcXHQgKiBleGNsdXNpdmVseSBvbiBhIGRlZGljYXRlZCB0ZXN0IGRldmljZSB3aXRoIG5vIGFjdGl2ZSBtYW5hZ2VhYmlsaXR5XFxuK1xcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXFxuK1xcdCAqIGlmIHRoaXMgZXZlciBuZWVkcyB0byBydW4gb24gYSBtYW5hZ2VhYmlsaXR5LWVuYWJsZWQgTklDLlxcbitcXHQgKi9cXG4rXFx0bWRpYyA9ICgoKHUzMilkYXRhKSB8XFxuK1xcdFxcdChvZmZzZXQgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19SRUdfU0hJRlQpIHxcXG4rXFx0XFx0KDEgXFx1MDAzY1xcdTAwM2MgRTEwMDBfTURJQ19QSFlfU0hJRlQpIHxcXG4rXFx0XFx0RTEwMDBfTURJQ19PUF9XUklURSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX01ESUMsIG1kaWMpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIDEwMDA7IGkrKykge1xcbitcXHRcXHR1c2xlZXAoNTApO1xcbitcXHRcXHRtZGljID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX01ESUMpO1xcbitcXHRcXHRpZiAobWRpYyBcXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIShtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19SRUFEWSkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuK1xcdGlmIChtZGljIFxcdTAwMjYgRTEwMDBfTURJQ19FUlJPUilcXG4rXFx0XFx0cmV0dXJuIC0xO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuKy8qXFxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxcbisgKiBzZWN0aW9uIDMuNS42LjMuMS4gIEZvcmNlIHRoZSBQSFkgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsb29wYmFja1xcbisgKiBlbmFibGVkLCB0aGVuIGZvcmNlIHRoZSBNQUMgbGluayBzdGF0ZSB0byBtYXRjaC4gIEludGVybmFsIGxvb3BiYWNrXFxuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcXG4rICogcGh5c2ljYWwgbGluayBzdGF0ZSBpcyBpcnJlbGV2YW50LlxcbisgKlxcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcXFwiVXNlIFBIWSBMb29wYmFjayBpbnN0ZWFkIG9mIE1BQyBMb29wYmFja1xcbisgKiBvbiB0aGUgODI1NzZcXFwiLCBhbmQgc2VjdGlvbiAzLjUuNi4yIHN0YXRlcyBcXFwiTUFDIExvb3BiYWNrIGlzIG5vdCB1c2VkXFxuKyAqIG9uIHRoaXMgZGV2aWNlLlxcXCIgIFJDVEwuTEJNX01BQyBpcyBzdGlsbCBzZXQgZWxzZXdoZXJlIGFzIGEgUUVNVS1vbmx5XFxuKyAqIGFjY29tbW9kYXRpb247IHNlZSB0aGUgUkNUTCBwcm9ncmFtbWluZyBpbiB0aGUgY2FsbGVyIGZvciB0aGVcXG4rICogcmF0aW9uYWxlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgaWdiX3NldHVwX2xvb3BiYWNrKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHR1MzIgY3RybDtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcXG4rXFx0ICogUUVNVSdzIGlnYiBlbXVsYXRpb246IFFFTVUgb25seSB1cGRhdGVzIFNUQVRVUy5MVSB2aWEgaXRzXFxuK1xcdCAqIGF1dG9uZWctZG9uZSB0aW1lciwgYW5kIHdpdGhvdXQgTFUgc2V0IGl0cyByZWNlaXZlIHBhdGhcXG4rXFx0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcXG4rXFx0ICogaGFyZHdhcmUgYXV0b25lZyBjYW5ub3QgY29tcGxldGUgYmVmb3JlIHRoZSBuZXh0IFBIWSB3cml0ZVxcbitcXHQgKiBiZWxvdyBjbGVhcnMgdGhlIGF1dG9uZWctZW5hYmxlIGJpdCwgc28gdGhpcyBpcyBlZmZlY3RpdmVseSBhXFxuK1xcdCAqIG5vLW9wIHRoZXJlLlxcbitcXHQgKi9cXG4rXFx0KHZvaWQpaWdiX3dyaXRlX3BoeShpZ2IsIE1JSV9CTUNSLFxcbitcXHRcXHRcXHQgICAgQk1DUl9BTkVOQUJMRSB8IEJNQ1JfQU5SRVNUQVJUKTtcXG4rXFxuK1xcdC8qIFBIWSBjb250cm9sOiBsb29wYmFjayArIDFHYi9zIGZ1bGwgZHVwbGV4LCBhdXRvbmVnIGRpc2FibGVkLiAqL1xcbitcXHRyZXQgPSBpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXFxuK1xcdFxcdFxcdCAgICBCTUNSX0xPT1BCQUNLIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcXG4rXFx0XFx0XFx0ICAgIEJNQ1JfRlVMTERQTFgpO1xcbitcXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFxcXCJGYWlsZWQgdG8gd3JpdGUgUEhZIGNvbnRyb2wgcmVnaXN0ZXJcXFwiKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcXG4rXFx0ICogc2VsZnRlc3QgaW4gaWdiX2ludGVncmF0ZWRfcGh5X2xvb3BiYWNrKCkuICBOb3Qgc3BlY2lmaWVkIGJ5IHRoZVxcbitcXHQgKiBkYXRhc2hlZXQsIGJ1dCBlbXBpcmljYWxseSByZXF1aXJlZCBieSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBGb3JjZSB0aGUgTUFDIHRvIDFHYi9zIGZ1bGwgZHVwbGV4IHdpdGggbGluayB1cC4gIFdpdGhvdXQgZm9yY2luZ1xcbitcXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxcbitcXHQgKiBub3JtYWxseSB3YWl0cyBmb3IgYSByZWFsIG5lZ290aWF0ZWQgbGluay5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XFxuK1xcdGN0cmwgXFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcXG4rXFx0Y3RybCB8PSBFMTAwMF9DVFJMX0ZSQ1NQRCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRlJDRFBYIHxcXG4rXFx0XFx0RTEwMDBfQ1RSTF9TUERfMTAwMCB8XFxuK1xcdFxcdEUxMDAwX0NUUkxfRkQgfFxcbitcXHRcXHRFMTAwMF9DVFJMX1NMVTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBjdHJsKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXFxuK1xcdCAqIGF0IHRoZSB0YWlsIG9mIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieVxcbitcXHQgKiB0aGUgZGF0YXNoZWV0OyBlbXBpcmljYWwsIGFuZCBpbmhlcml0ZWQgZnJvbSB0aGUga2VybmVsIGRyaXZlci5cXG4rXFx0ICovXFxuK1xcdHVzbGVlcCg1MDAwMDApO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGlnYl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0aWYgKCF2ZmlvX3BjaV9kZXZpY2VfbWF0Y2goZGV2aWNlLCBQQ0lfVkVORE9SX0lEX0lOVEVMLCBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNTc2KSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX3Jlc2V0KHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpbnQgcmV0cmllcyA9IDIwO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMLCBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgfCBFMTAwMF9DVFJMX1JTVCk7XFxuK1xcdC8qXFxuK1xcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcXG4rXFx0ICogY2hlY2tpbmcgaWYgdGhpcyBkZXZpY2UgaXMgcmVhZHkgdG8gYmUgdXNlZCAoODI1NzYgZGF0YXNoZWV0IHNlY3Rpb25cXG4rXFx0ICogNC4yLjEuNi4xKS4gIFRoZSBkZWxheSBhbHNvIGVuc3VyZXMgdGhlIHJlc2V0IGhhcyB0YWtlbiBlZmZlY3QgYW5kXFxuK1xcdCAqIGNsZWFyZWQgRUVDRC5BVVRPX1JEIGJlZm9yZSBpdCBpcyBwb2xsZWQgYmVsb3cuXFxuK1xcdCAqL1xcbitcXHR1c2xlZXAoMTAwMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcXG4rXFx0ICogaWdiX2dldF9hdXRvX3JkX2RvbmUoKSBpbiB0aGUgaWdiIGRyaXZlcjogQVVUT19SRCBpbXBsaWVzIGJvdGggdGhhdFxcbitcXHQgKiB0aGUgcmVzZXQgY29tcGxldGVkIGFuZCB0aGF0IHRoZSBkZXZpY2UgZmluaXNoZWQgcmUtcmVhZGluZyBpdHNcXG4rXFx0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXFxuK1xcdCAqL1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCBcXHUwMDI2XFx1MDAyNiAhKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9FRUNEKSBcXHUwMDI2IEUxMDAwX0VFQ0RfQVVUT19SRCkpXFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uIGRvZXMgbm90IHNldCBFMTAwMF9FRUNEX0FVVE9fUkQuIElmIHdlIHRpbWVkIG91dCxcXG4rXFx0ICogY2hlY2sgaWYgQ1RSTC5SU1QgaXMgY2xlYXJlZCwgd2hpY2ggaXMgd2hhdCBRRU1VIHVzZXMgdG8gc2lnbmFsIHJlc2V0XFxuK1xcdCAqIGNvbXBsZXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocmV0cmllcyBcXHUwMDNjIDApIHtcXG4rXFx0XFx0VkZJT19BU1NFUlRfRVEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIFxcdTAwMjYgRTEwMDBfQ1RSTF9SU1QsIDAsXFxuK1xcdFxcdFxcdCAgICAgICBcXFwiRGV2aWNlIHJlc2V0IGRpZCBub3QgY29tcGxldGUgKENUUkwuUlNUIG5vdCBjbGVhcmVkKVxcXCIpO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFByb2dyYW0gdGhlIGRldmljZSBpbnRvIGEgdXNhYmxlIHN0YXRlLiAgU3BsaXQgb3V0IG9mIGlnYl9pbml0KCkgc28gaXRcXG4rICogY2FuIGJlIHJldXNlZCBhZnRlciBhIGRldmljZSByZXNldCB0byByZS1wcm9ncmFtIHRoZSByZWdpc3RlcnMgdGhhdFxcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcXG4rICogdmlhIFZGSU8uXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHU2NCBpb3ZhX3R4LCBpb3ZhX3J4O1xcbitcXHR1MzIgY3RybCwgcmN0bDtcXG4rXFx0dTE2IGNtZF9yZWc7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0aW92YV90eCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXFx1MDAzZXR4X3JpbmcpO1xcbitcXHRpb3ZhX3J4ID0gdG9faW92YShkZXZpY2UsIGlnYi1cXHUwMDNlcnhfcmluZyk7XFxuK1xcbitcXG4rXFxuK1xcdC8qIFNpZ25hbCB0aGF0IHRoZSBkcml2ZXIgaXMgbG9hZGVkICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQpO1xcbitcXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xcbitcXHRjdHJsIFxcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCwgY3RybCk7XFxuK1xcbitcXHQvKiBFbmFibGUgUENJIEJ1cyBNYXN0ZXIuICovXFxuK1xcdGNtZF9yZWcgPSB2ZmlvX3BjaV9jb25maWdfcmVhZHcoZGV2aWNlLCBQQ0lfQ09NTUFORCk7XFxuK1xcdGlmICgoY21kX3JlZyBcXHUwMDI2IChQQ0lfQ09NTUFORF9NQVNURVIgfCBQQ0lfQ09NTUFORF9NRU1PUlkpKSAhPVxcbitcXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcXG4rXFx0XFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcXG4rXFx0XFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29uZmlndXJlIFBIWSBpbnRlcm5hbCBsb29wYmFjayBmb3IgdGVzdGluZy4gKi9cXG4rXFx0aWdiX3NldHVwX2xvb3BiYWNrKGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcXG4rXFx0ICogc2VjdGlvbiA4LjYuMSwgR0NSLkNvbXBsZXRpb25fVGltZW91dF9SZXNlbmQsIGJpdCAxNikuICBUaGVcXG4rXFx0ICogbWl4X2FuZF9tYXRjaCB0ZXN0IGludGVudGlvbmFsbHkgc3VibWl0cyBkZXNjcmlwdG9ycyB0YXJnZXRpbmdcXG4rXFx0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcXG4rXFx0ICogcmV0cnlpbmcgdGhlIGZhaWxlZCByZWFkIGluZGVmaW5pdGVseSwgd2hpY2gga2VlcHMgUENJZSBBRVIgYW5kXFxuK1xcdCAqIElPTU1VIGVycm9yIGhhbmRsaW5nIGJ1c3kgYW5kIGludGVyZmVyZXMgd2l0aCByZXNldCByZWNvdmVyeS5cXG4rXFx0ICovXFxuK1xcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfR0NSKTtcXG4rXFx0Y3RybCBcXHUwMDI2PSB+RTEwMDBfR0NSX0NNUExfVE1PVVRfUkVTRU5EO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dDUiwgY3RybCk7XFxuK1xcbitcXHQvKiBDb25maWd1cmUgVFggYW5kIFJYIGRlc2NyaXB0b3IgcmluZ3MgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBSCgwKSwgKHUzMikoaW92YV90eCBcXHUwMDNlXFx1MDAzZSAzMikpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERIKDApLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFIKDApLCAodTMyKShpb3ZhX3J4IFxcdTAwM2VcXHUwMDNlIDMyKSk7XFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREgoMCksIDApO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcXG4rXFx0ICogZGF0YXNoZWV0IHNlY3Rpb24gNy4xLjUuMjogXFxcIlNSUkNUTFtuXS5ERVNDVFlQRSBtdXN0IGJlIHNldCB0byBhXFxuK1xcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcXG4rXFx0ICogZGVzY3JpcHRvcnMuXFxcIiAgc3RydWN0IGlnYl9yeF9kZXNjIG1hdGNoZXMgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXJcXG4rXFx0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcXG4rXFx0ICogcmVxdWlyZXMgdGhpcyBmb3JtYXQuICBTZWN0aW9uIDguMTAuMiBzcGVjaWZpZXMgREVTQ1RZUEVbMjc6MjVdLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcXG4rXFx0ICogaW50ZW50aW9uYWw6IHBlciBzZWN0aW9uIDcuMS4zLjEgYSB6ZXJvIEJTSVpFUEFDS0VUIGZhbGxzIGJhY2sgdG9cXG4rXFx0ICogdGhlIFJDVEwuQlNJWkUgYnVmZmVyIHNpemUsIHdob3NlIHJlc2V0IGRlZmF1bHQgKDAwYikgaXMgMjA0OFxcbitcXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9TUlJDVEwoMCksIEUxMDAwX1NSUkNUTF9ERVNDVFlQRV9BRFZfT05FQlVGKTtcXG4rXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApLCBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXFxuK1xcdCAqIHRvIFBIWSBsb29wYmFjayBhcyBhIFFFTVUtb25seSBhY2NvbW1vZGF0aW9uOiBRRU1VJ3MgZW11bGF0ZWQgaWdiXFxuK1xcdCAqIGRvZXMgbm90IGhvbm9yIFBIWSByZWdpc3RlciAwIGJpdCAxNCAoUEhZIGludGVybmFsIGxvb3BiYWNrKSBhbmRcXG4rXFx0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXFxuK1xcdCAqIHF1ZXVlLiAgRGF0YXNoZWV0IDguMTAuMSAoUkNUTCByZWdpc3RlcikgYWR2aXNlcyBcXFwiV2hlbiB1c2luZyB0aGVcXG4rXFx0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXFxcIiwgc28gc2V0dGluZyBMQk1fTUFDXFxuK1xcdCAqIGhlcmUgZGV2aWF0ZXMgZnJvbSBkYXRhc2hlZXQgZ3VpZGFuY2U7IGVtcGlyaWNhbGx5IHRoZSBiaXQgaGFzXFxuK1xcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcXG4rXFx0ICogaXMgbm90IGltcGxlbWVudGVkIChkYXRhc2hlZXQgMy41LjYuMikuICBTZXR0aW5nIGJvdGggbGV0cyB0aGVcXG4rXFx0ICogc2VsZnRlc3Qgd29yayBvbiBib3RoIHJlYWwgaGFyZHdhcmUgYW5kIFFFTVUgd2l0aG91dCBjb25kaXRpb25hbFxcbitcXHQgKiBjb2RlIHBhdGhzLlxcbitcXHQgKi9cXG4rXFx0cmN0bCA9IEUxMDAwX1JDVExfRU4gfCAgICAgICAvKiBSZWNlaXZlciBFbmFibGUgKi9cXG4rXFx0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9NUEUgfCAgICAgIC8qIE11bHRpY2FzdCBQcm9taXNjdW91cyAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9CQU0gfCAgICAgIC8qIEJyb2FkY2FzdCBBY2NlcHQgTW9kZSAqL1xcbitcXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXFxuK1xcdCAgICAgICBFMTAwMF9SQ1RMX1NFQ1JDOyAgICAgLyogU3RyaXAgQ1JDIChuZWVkZWQgZm9yIG1lbWNtcCkgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCByY3RsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOIHwgRTEwMDBfVENUTF9QU1ApO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2FpdCBmb3IgVFggYW5kIFJYIHF1ZXVlcyB0byBiZSBlbmFibGVkLiAgUGVyIHRoZSBSWERDVEwvVFhEQ1RMXFxuK1xcdCAqIHJlZ2lzdGVyIGRlZmluaXRpb25zICg4LjEwLjEwLzguMTIuMTMpLCB0aGUgcGVyLXF1ZXVlIGVuYWJsZSBiaXRcXG4rXFx0ICogXFxcInJlbWFpbnMgemVyb1xcXCIgdW50aWwgdGhlIGdsb2JhbCBSQ1RMLlJYRU4vVENUTC5UWEVOIGFyZSBzZXQsIHNvXFxuK1xcdCAqIEUxMDAwX1JDVExfRU4gYW5kIEUxMDAwX1RDVExfRU4gbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gYWJvdmUuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwMDtcXG4rXFx0d2hpbGUgKHJldHJpZXMtLSBcXHUwMDNlIDApIHtcXG4rXFx0XFx0aWYgKChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfVFhEQ1RMKDApKSBcXHUwMDI2IEUxMDAwX1RYRENUTF9RVUVVRV9FTkFCTEUpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX1JYRENUTCgwKSkgXFx1MDAyNiBFMTAwMF9SWERDVExfUVVFVUVfRU5BQkxFKSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMCk7XFxuK1xcdH1cXG4rXFx0VkZJT19BU1NFUlRfR0UocmV0cmllcywgMCk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XFxuK1xcdCAqXFxuK1xcdCAqIEdQSUUgKHNlY3Rpb24gNy4zLjIuMTEsIFRhYmxlIDctNDcpOiBzZXQgTXVsdGlwbGVfTVNJWCAoYml0IDQpIHRvXFxuK1xcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxcbitcXHQgKiB0byBhcHBseSBFSUFNIG9uIE1TSS1YIGFzc2VydGlvbiAod2l0aG91dCBFSUFNRSwgRUlBTSBvbmx5XFxuK1xcdCAqIGFwcGxpZXMgb24gRUlDUiByZWFkL3dyaXRlKS5cXG4rXFx0ICpcXG4rXFx0ICogRUlBQyAoc2VjdGlvbiA4LjguNSk6IGVuYWJsZSBhdXRvLWNsZWFyIG9mIEVJQ1IgZm9yIHZlY3RvciAwLlxcbitcXHQgKiBXaXRob3V0IGF1dG8tY2xlYXIgdGhlIGNhdXNlIHN0YXlzIHNldCBhZnRlciBkZWxpdmVyeSBhbmQgdGhlXFxuK1xcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cXG4rXFx0ICpcXG4rXFx0ICogRUlBTSAoc2VjdGlvbiA4LjguNik6IGVuYWJsZSBhdXRvLW1hc2sgb2YgRUlNUyBmb3IgdmVjdG9yIDAgb25cXG4rXFx0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLlxcbitcXHQgKlxcbitcXHQgKiBJVkFSIChzZWN0aW9uIDcuMy4xLjIsIHJlZ2lzdGVyIGRlZmluaXRpb24gaW4gOC44LjEzKTogbWFwIFJYXFxuK1xcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxcbitcXHQgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9HUElFLCBFMTAwMF9HUElFX01TSVhfTU9ERSB8IEUxMDAwX0dQSUVfRUlBTUUpO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQU0sIE1TSVhfVkVDVE9SX01BU0spO1xcbitcXG4rXFx0LyogTWFwIHZlY3RvciAwIHRvIGludGVycnVwdCBjYXVzZSAwIGFuZCBtYXJrIGl0IHZhbGlkICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfSVZBUjAsIEUxMDAwX0lWQVJfVkFMSUQpO1xcbitcXG4rXFx0LyogRW5hYmxlIGludGVycnVwdHMgb24gdmVjdG9yIDAgKi9cXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rXFxuK1xcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xcbitcXHRpZ2ItXFx1MDAzZXR4X3RhaWwgPSAwO1xcbitcXHRpZ2ItXFx1MDAzZXJ4X3RhaWwgPSAwO1xcbitcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubWF4X21lbWNweV9zaXplID0gSUdCX01BWF9DSFVOS19TSVpFO1xcbitcXHRkZXZpY2UtXFx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X2NvdW50ID0gUklOR19TSVpFIC0gMTtcXG4rXFx0ZGV2aWNlLVxcdTAwM2Vkcml2ZXIubXNpID0gTVNJWF9WRUNUT1I7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9pbml0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFxuK1xcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlZHJpdmVyLnJlZ2lvbi5zaXplLCBzaXplb2Yoc3RydWN0IGlnYikpO1xcbitcXG4rXFx0aWdiLVxcdTAwM2ViYXIwID0gZGV2aWNlLVxcdTAwM2ViYXJzWzBdLnZhZGRyO1xcbitcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHQvKlxcbitcXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxcbitcXHQgKiB2ZmlvX3BjaV9tc2l4X2VuYWJsZSgpIG9ubHkgdG91Y2hlcyB0aGUgVkZJTyBJUlEgbWFjaGluZXJ5IGFuZCB0aGVcXG4rXFx0ICogUENJIE1TSS1YIGNhcGFiaWxpdHkgdmlhIGNvbmZpZyBzcGFjZTsgaXQgaGFzIG5vIG9yZGVyaW5nXFxuK1xcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cXG4rXFx0ICogUGxhY2luZyBpdCBoZXJlIGtlZXBzIGlnYl9od19pbml0KCkgcmV1c2FibGUgZnJvbSB0aGUgcmVzZXRcXG4rXFx0ICogcmVjb3ZlcnkgcGF0aCAod2hpY2ggY2FsbHMgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgaW5zdGVhZCkuXFxuK1xcdCAqL1xcbitcXHR2ZmlvX3BjaV9tc2l4X2VuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcXG4rXFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9yZW1vdmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SQ1RMLCAwKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCAwKTtcXG4rXFx0aWdiX3Jlc2V0KGlnYik7XFxuK1xcbitcXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcXG4re1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogVXNlIHdyaXRlLXRvLWNsZWFyIChkYXRhc2hlZXQgNy4zLjQuMikuICBJbiBNU0ktWCBtb2RlIHdpdGggRUlBQ1xcbitcXHQgKiBwcm9ncmFtbWVkLCBzZWN0aW9uIDguOC41IGV4cGxpY2l0bHkgc3RhdGVzIFxcXCJJZiBhbnkgYml0cyBhcmUgc2V0XFxuK1xcdCAqIGluIEVJQUMsIHRoZSBFSUNSIHJlZ2lzdGVyIHNob3VsZCBub3QgYmUgcmVhZFxcXCIsIHdoaWNoIHJ1bGVzIG91dFxcbitcXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxcbitcXHQgKiBjbGVhcmVkIGJ5IHdyaXRpbmcgMS5cXG4rXFx0ICovXFxuK1xcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxcbitcXHRcXHRcXHQgICAgIGlvdmFfdCBkc3QsIHU2NCBzaXplLCB1NjQgY291bnQpXFxuK3tcXG4rXFx0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XFxuK1xcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XFxuK1xcdHN0cnVjdCBpZ2JfdHhfZGVzYyAqdHg7XFxuK1xcdHUzMiBpO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfR0Uoc2l6ZSwgNjAsXFxuK1xcdFxcdCAgICAgICBcXFwiSUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXFxcIik7XFxuK1xcbitcXHRpZ2JfaXJxX2Rpc2FibGUoaWdiKTtcXG4rXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjb3VudDsgaSsrKSB7XFxuK1xcdFxcdHR4ID0gXFx1MDAyNmlnYi1cXHUwMDNldHhfcmluZ1tpZ2ItXFx1MDAzZXR4X3RhaWxdO1xcbitcXHRcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbaWdiLVxcdTAwM2VyeF90YWlsXTtcXG4rXFxuK1xcdFxcdG1lbXNldCh0eCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfdHhfZGVzYykpO1xcbitcXHRcXHRtZW1zZXQocngsIDAsIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcXG4rXFxuK1xcdFxcdHJ4LVxcdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcXG4rXFx0XFx0cngtXFx1MDAzZXJlYWQuaGRyX2FkZHIgPSBjcHVfdG9fbGU2NCgwKTtcXG4rXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcXG4rXFx0XFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxcbitcXHRcXHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxcbitcXHRcXHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XFxuK1xcdFxcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xcbitcXHRcXHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxcbitcXHRcXHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0dHgtXFx1MDAzZXJlYWQuY21kX3R5cGVfbGVuID0gY3B1X3RvX2xlMzIoKHVpbnQzMl90KXNpemUgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRFRZUF9EQVRBIHxcXG4rXFx0XFx0XFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XFxuK1xcdFxcdFxcdEUxMDAwX0FEVlRYRF9EQ01EX0lGQ1MgfFxcbitcXHRcXHRcXHRFMTAwMF9BRFZUWERfRENNRF9FT1ApO1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBQQVlMRU4gKHNlY3Rpb24gNy4yLjIuMy4xMSkgaXMgdGhlIHRvdGFsIHBheWxvYWQgc2l6ZVxcbitcXHRcXHQgKiBpbiBvbGluZm9fc3RhdHVzWzMxOjE0XS5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHR4LVxcdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxcbitcXHRcXHRcXHRjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSBcXHUwMDNjXFx1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcXG4rXFxuK1xcdFxcdGlnYi1cXHUwMDNldHhfdGFpbCA9IChpZ2ItXFx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcXG4rXFx0XFx0aWdiLVxcdTAwM2VyeF90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIDEpICUgUklOR19TSVpFO1xcbitcXHR9XFxuK1xcbitcXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEVCgwKSwgaWdiLVxcdTAwM2VyeF90YWlsKTtcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9URFQoMCksIGlnYi1cXHUwMDNldHhfdGFpbCk7XFxuK31cXG4rXFxuKy8qXFxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxcbisgKiByZS1wcm9ncmFtIGl0LiAgVkZJT19ERVZJQ0VfUkVTRVQgdGVhcnMgZG93biB0aGUga2VybmVsLXNpZGUgTVNJLVhcXG4rICogdHJpZ2dlciBidXQgbGVhdmVzIHVzZXItc2lkZSBldmVudGZkcyBpbnRhY3QsIHNvIHJlLWFybSB0aGUgdHJpZ2dlclxcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcXG4rICogZXZlbnRmZCByZW1haW5zIHZhbGlkLlxcbisgKlxcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XFxuKyAqIDQuMi4xLjUuMTogYSBQRiBGTFIgaXMgXFxcImVxdWl2YWxlbnQgdG8gYSBEMC1cXHUwMDNlRDMtXFx1MDAzZUQwIHRyYW5zaXRpb25cXFwiKSwgc29cXG4rICogRUlNUyBhbmQgRUlDUiBjb21lIGJhY2sgYXMgMCBmcm9tIHRoZWlyIHJlZ2lzdGVyLWRlZmluZWQgaW5pdGlhbFxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XFxuKyAqIGlnYl9tZW1jcHlfc3RhcnQoKSB3aWxsIG1lbXNldCBlYWNoIGRlc2NyaXB0b3IgaXQgdG91Y2hlcyBiZWZvcmVcXG4rICogc3VibWlzc2lvbiwgc28gbm8gZXhwbGljaXQgSU1DL0VJQ1Igd3JpdGVzIG9yIHJpbmcgbWVtc2V0cyBhcmVcXG4rICogbmVlZGVkIGhlcmUuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBpZ2JfZXJyb3JfcmVzZXRfYW5kX3JlaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuK3tcXG4rXFx0dmZpb19wY2lfZGV2aWNlX3Jlc2V0KGRldmljZSk7XFxuK1xcdHZmaW9fcGNpX21zaXhfcmVlbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XFxuK1xcdGlnYl9od19pbml0KGRldmljZSk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4re1xcbitcXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcXG4rXFx0c3RydWN0IGlnYl9yeF9kZXNjICpyeDtcXG4rXFx0dTMyIHN0YXR1cyA9IDA7XFxuK1xcdHUzMiBwcmV2X3RhaWw7XFxuK1xcdGludCByZXRyaWVzO1xcbitcXG4rXFx0cHJldl90YWlsID0gKGlnYi1cXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xcbitcXHRyeCA9IFxcdTAwMjZpZ2ItXFx1MDAzZXJ4X3JpbmdbcHJldl90YWlsXTtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxcbitcXHQgKiBtYXhfbWVtY3B5X3NpemUgPSAoUklOR19TSVpFIC0gMSkgKiBJR0JfTUFYX0NIVU5LX1NJWkUgfj0gNCBNQixcXG4rXFx0ICogc3BsaXQgaW50byA0MDk1IDEgS0IgZnJhbWVzLiAgQXQgMSBHYi9zICh+MTI1IE1CL3MpIHRoZSB3b3JzdFxcbitcXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcXG4rXFx0ICogU0ZELCBJRkcgYW5kIEZDUyBvdmVyaGVhZCAofjMlKSBhbmQgZGVzY3JpcHRvciBmZXRjaC93cml0ZWJhY2tcXG4rXFx0ICogbGF0ZW5jeS4gIFdhaXQgdXAgdG8gfjIwMCBtcyBiZWZvcmUgZGVjbGFyaW5nIHRoZSBkZXZpY2UgaHVuZztcXG4rXFx0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XFxuK1xcdCAqIHNjaGVkdWxpbmcgaml0dGVyIHdoaWxlIGtlZXBpbmcgdGhlIGludGVudGlvbmFsIGludmFsaWQtRE1BXFxuK1xcdCAqIHRlc3RzIGJvdW5kZWQuXFxuK1xcdCAqL1xcbitcXHRyZXRyaWVzID0gMjAwO1xcbitcXHR3aGlsZSAocmV0cmllcy0tIFxcdTAwM2UgMCkge1xcbitcXHRcXHRzdGF0dXMgPSBsZTMyX3RvX2NwdShSRUFEX09OQ0UocngtXFx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xcbitcXHRcXHRpZiAoc3RhdHVzIFxcdTAwMjYgMSlcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdHVzbGVlcCgxMDAwKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuc3VyZSB0aGUgdGVzdCBjb2RlIGRvZXNuJ3Qgc3BlY3VsYXRpdmVseSByZWFkIHRoZSBETUFcXG4rXFx0XFx0ICogZGVzdGluYXRpb24gYnVmZmVyIGJlZm9yZSB3ZSBoYXZlIHZlcmlmaWVkIHRoYXQgdGhlXFxuK1xcdFxcdCAqIGRlc2NyaXB0b3Igd3JpdGViYWNrIGlzIGNvbXBsZXRlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0cm1iKCk7XFxuK1xcbitcXHRpZ2JfaXJxX2NsZWFyKGlnYik7XFxuK1xcbitcXHRpZ2JfaXJxX2VuYWJsZShpZ2IpO1xcbitcXG4rXFx0aWYgKHN0YXR1cyBcXHUwMDI2IDEpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXG4rXFx0LypcXG4rXFx0ICogVGhlIGRlc2NyaXB0b3IgbmV2ZXIgY29tcGxldGVkLiAgT24gcmVhbCA4MjU3NiBoYXJkd2FyZSB0aGlzXFxuK1xcdCAqIHR5cGljYWxseSBmb2xsb3dzIGEgRE1BLXJlYWQgZmF1bHQgZnJvbSBvbmUgb2YgdGhlIGludGVudGlvbmFsXFxuK1xcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXFxuK1xcdCAqIHVuYWJsZSB0byBzZXJ2aWNlIHN1YnNlcXVlbnQgdmFsaWQgZGVzY3JpcHRvcnMuICBDVFJMLlJTVCBhbG9uZVxcbitcXHQgKiByZWluaXRpYWxpemVzIHRoZSBxdWV1ZSByZWdpc3RlcnMgYnV0IGxlYXZlcyB0aGUgZW5naW5lIHdlZGdlZFxcbitcXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXFxuK1xcdCAqIGlzIHJlcXVpcmVkLlxcbitcXHQgKi9cXG4rXFx0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcXG4rXFxuK1xcdHJldHVybiAtRVRJTUVET1VUO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xcbitcXG4rXFx0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcXG4rfVxcbitcXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcXG4rXFx0Lm5hbWUgPSBcXFwiaWdiXFxcIixcXG4rXFx0LnByb2JlID0gaWdiX3Byb2JlLFxcbitcXHQuaW5pdCA9IGlnYl9pbml0LFxcbitcXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcXG4rXFx0Lm1lbWNweV9zdGFydCA9IGlnYl9tZW1jcHlfc3RhcnQsXFxuK1xcdC5tZW1jcHlfd2FpdCA9IGlnYl9tZW1jcHlfd2FpdCxcXG4rXFx0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxcbit9O1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFxcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcXG4gc3RydWN0IHZmaW9fcGNpX2RldmljZSAqdmZpb19wY2lfZGV2aWNlX2luaXQoY29uc3QgY2hhciAqYmRmLCBzdHJ1Y3QgaW9tbXUgKmlvbW11KTtcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfY2xlYW51cChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xcbiBcXG4raW50IF9fdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIHZvaWQgdmZpb19wY2lfZGV2aWNlX3Jlc2V0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSk7XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxcbkBAIC04NCw2ICs4NSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9jbWRfY2xlYXIoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MTYgYml0cylcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbiBcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KTtcXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCk7XFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xcbiB2b2lkIHZmaW9fcGNpX2lycV90cmlnZ2VyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LCB1MzIgdmVjdG9yKTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBmY250bF9zZXRfbm9uYmxvY2soaW50IGZkKVxcbkBAIC0xMDgsNiArMTExLDEyIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfZGlzYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXFxuIFxcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2lfcmVlbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbitcXHRcXHRcXHRcXHRcXHQgdTMyIHZlY3RvciwgaW50IGNvdW50KVxcbit7XFxuK1xcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSV9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9lbmFibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLFxcbiBcXHRcXHRcXHRcXHRcXHR1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuIHtcXG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG4gXFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lYX0lSUV9JTkRFWCk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgsIHZlY3RvciwgY291bnQpO1xcbit9XFxuK1xcbiBzdGF0aWMgaW5saW5lIGludCBfX3RvX2lvdmEoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB2b2lkICp2YWRkciwgaW92YV90ICppb3ZhKVxcbiB7XFxuIFxcdHJldHVybiBfX2lvbW11X2h2YTJpb3ZhKGRldmljZS1cXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5tayBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG5pbmRleCA4MjEzMmI2NDg3NDRiLi5iY2ZhNzRhZTA0MGU3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rXFxuQEAgLTE2LDYgKzE2LDcgQEAgTElCVkZJT19DICs9IGRyaXZlcnMvZHNhL2RzYS5jXFxuIGVuZGlmXFxuIFxcbiBMSUJWRklPX0MgKz0gZHJpdmVycy9udl9mYWxjb24vbnZfZmFsY29uLmNcXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXFxuIFxcbiBMSUJWRklPX09VVFBVVCA6PSAkKE9VVFBVVCkvbGlidmZpb1xcbiBcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbmluZGV4IDI4ODY4MzQzZjJhYjUuLjQwNjNhMGUyYjNkZjMgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuY1xcbkBAIC0xLDUgKzEsNiBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICNpbmNsdWRlIFxcdTAwM2NkaXJlbnQuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2Vycm5vLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NmY250bC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGliZ2VuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG5AQCAtMTA1LDYgKzEwNiwyOCBAQCB2b2lkIHZmaW9fcGNpX2lycV9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4KVxcbiBcXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xcbiB9XFxuIFxcbisvKlxcbisgKiBSZS1pc3N1ZSBWRklPX0RFVklDRV9TRVRfSVJRUyBmb3IgYW4gYWxyZWFkeS1lbmFibGVkIHZlY3RvciByYW5nZSB1c2luZ1xcbisgKiB0aGUgZXhpc3RpbmcgZXZlbnRmZHMuICBJbnRlbmRlZCBmb3IgZHJpdmVycyB0aGF0IG5lZWQgdG8gcmUtYXJtIGRldmljZVxcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXFxuKyAqIElSUSB0cmlnZ2VyIGJ1dCBsZWF2ZXMgdXNlci1zaWRlIGV2ZW50ZmRzIGludGFjdC4gIFJlY3JlYXRpbmcgdGhlXFxuKyAqIGV2ZW50ZmRzIHdvdWxkIGludmFsaWRhdGUgYW55IHRlc3QtZml4dHVyZSBjYWNoZSBvZiB0aGUgZmQsIHNvIHRoaXNcXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cXG4rICovXFxuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxcbitcXHRcXHRcXHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXFxuK3tcXG4rXFx0aW50IGk7XFxuK1xcbitcXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcXG4rXFxuK1xcdGZvciAoaSA9IHZlY3RvcjsgaSBcXHUwMDNjIHZlY3RvciArIGNvdW50OyBpKyspXFxuK1xcdFxcdFZGSU9fQVNTRVJUX0dFKGRldmljZS1cXHUwMDNlbXNpX2V2ZW50ZmRzW2ldLCAwLFxcbitcXHRcXHRcXHQgICAgICAgXFxcInZlY3RvciAlZCBldmVudGZkIG5vdCBhbGxvY2F0ZWRcXFxcblxcXCIsIGkpO1xcbitcXG4rXFx0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXFx1MDAzZW1zaV9ldmVudGZkcyArIHZlY3Rvcik7XFxuK31cXG4rXFxuIHN0YXRpYyB2b2lkIHZmaW9fcGNpX2lycV9nZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IHZmaW9faXJxX2luZm8gKmlycV9pbmZvKVxcbiB7XFxuQEAgLTIzNyw5ICsyNjAsMjYgQEAgdm9pZCB2ZmlvX3BjaV9jb25maWdfYWNjZXNzKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgYm9vbCB3cml0ZSxcXG4gXFx0XFx0ICAgICAgIHdyaXRlID8gXFxcIndyaXRlIHRvXFxcIiA6IFxcXCJyZWFkIGZyb21cXFwiLCBjb25maWcpO1xcbiB9XFxuIFxcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbit7XFxuK1xcdGlmIChpb2N0bChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCkpXFxuK1xcdFxcdHJldHVybiAtZXJybm87XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4gdm9pZCB2ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxcbiB7XFxuLVxcdGlvY3RsX2Fzc2VydChkZXZpY2UtXFx1MDAzZWZkLCBWRklPX0RFVklDRV9SRVNFVCwgTlVMTCk7XFxuK1xcdGludCByZXRyaWVzID0gMjA7XFxuK1xcdGludCByO1xcbitcXG4rXFx0ZG8ge1xcbitcXHRcXHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcXG4rXFx0XFx0aWYgKHIgPT0gLUVBR0FJTilcXG4rXFx0XFx0XFx0dXNsZWVwKDEwMDAwKTtcXG4rXFx0fSB3aGlsZSAociA9PSAtRUFHQUlOIFxcdTAwMjZcXHUwMDI2IHJldHJpZXMtLSBcXHUwMDNlIDApO1xcbitcXG4rXFx0VkZJT19BU1NFUlRfRVEociwgMCwgXFxcImlvY3RsKGRldmljZS1cXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXFxcblxcXCIpO1xcbiB9XFxuIFxcbiB2b2lkIHZmaW9fcGNpX2dyb3VwX3NldHVwKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgY29uc3QgY2hhciAqYmRmKVxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXFxuQEAgLTYsOCArNiw4IEBAXFxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBkc2Ffb3BzO1xcbiBleHRlcm4gc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaW9hdF9vcHM7XFxuICNlbmRpZlxcbi1cXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIG52X2ZhbGNvbl9vcHM7XFxuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xcbiBcXG4gc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuICNpZmRlZiBfX3g4Nl82NF9fXFxuQEAgLTE1LDYgKzE1LDcgQEAgc3RhdGljIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzICpkcml2ZXJfb3BzW10gPSB7XFxuIFxcdFxcdTAwMjZpb2F0X29wcyxcXG4gI2VuZGlmXFxuIFxcdFxcdTAwMjZudl9mYWxjb25fb3BzLFxcbitcXHRcXHUwMDI2aWdiX29wcyxcXG4gfTtcXG4gXFxuIHZvaWQgdmZpb19wY2lfZHJpdmVyX3Byb2JlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMDA6NDA6MzMuMDE3OTY3NDAzWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTA4MjcxNTcwMzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vKSBhbmQgZG9lcyBub3QgYWx0ZXIgYW55IGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTkwZmNlMjU4YWU2Yjc5MjU0MWZjMWJkN2IxOWYzYjViOTkyYmEyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMDA6NDA6MzEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvZTEwMDBfODI1NzUuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmI4NGFmZmRlYzU1OThcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwXzgyNTc1LmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfODI1NzUuaFxuXFwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxubmV3IGZpbGUgbW9kZSAxMjAwMDBcbmluZGV4IDAwMDAwMDAwMDAwMDAuLjlmOTdmNDMzMDA4NjZcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX2RlZmluZXMuaFxuQEAgLTAsMCArMSBAQFxuKy4uLy4uLy4uLy4uLy4uLy4uLy4uL2RyaXZlcnMvbmV0L2V0aGVybmV0L2ludGVsL2lnYi9lMTAwMF9kZWZpbmVzLmhcblxcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGVcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbm5ldyBmaWxlIG1vZGUgMTIwMDAwXG5pbmRleCAwMDAwMDAwMDAwMDAwLi5jNzMzNjM0MTcxYmIxXG4tLS0gL2Rldi9udWxsXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9yZWdzLmhcbkBAIC0wLDAgKzEgQEBcbisuLi8uLi8uLi8uLi8uLi8uLi8uLi9kcml2ZXJzL25ldC9ldGhlcm5ldC9pbnRlbC9pZ2IvZTEwMDBfcmVncy5oXG5cXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9pZ2IuY1xubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAuLmZkOWUwNWQ3N2VhNGJcbi0tLSAvZGV2L251bGxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2lnYi5jXG5AQCAtMCwwICsxLDU4NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2Vycm5vLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lvLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9wY2lfcmVncy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpX2lkcy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva2VybmVsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jb21waWxlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjYXNtL2JhcnJpZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21paS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwiZTEwMDBfcmVncy5oXCJcbisjaW5jbHVkZSBcImUxMDAwX2RlZmluZXMuaFwiXG4rI2luY2x1ZGUgXCJlMTAwMF84MjU3NS5oXCJcbitcbisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI1NzYgMHgxMEM5XG4rI2RlZmluZSBJR0JfTUFYX0NIVU5LX1NJWkUgMTAyNFxuKyNkZWZpbmUgTVNJWF9WRUNUT1IgMFxuKyNkZWZpbmUgTVNJWF9WRUNUT1JfTUFTSyAoMSBcdTAwM2NcdTAwM2MgTVNJWF9WRUNUT1IpXG4rI2RlZmluZSBSSU5HX1NJWkUgNDA5NiAvKiBOdW1iZXIgb2YgZGVzY3JpcHRvcnMgaW4gcmluZyAqL1xuK1xuK3N0cnVjdCBpZ2JfdHhfZGVzYyB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IGJ1ZmZlcl9hZGRyOyAvKiBBZGRyZXNzIG9mIGRlc2NyaXB0b3IncyBkYXRhIGJ1ZmZlciAqL1xuK1x0XHRcdHUzMiBjbWRfdHlwZV9sZW47IC8qIENvbW1hbmQvVHlwZS9MZW5ndGggKi9cbitcdFx0XHR1MzIgb2xpbmZvX3N0YXR1czsgLyogQ29udGV4dC9CdWZmZXIgaW5mbyAqL1xuK1x0XHR9IHJlYWQ7XG4rXG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IHJzdmQ7ICAgICAgICAvKiBSZXNlcnZlZCAqL1xuK1x0XHRcdHUzMiBueHRzZXFfc2VlZDsgLyogTmV4dCBzZXF1ZW5jZSBzZWVkICovXG4rXHRcdFx0dTMyIHN0YXR1czsgICAgICAvKiBEZXNjcmlwdG9yIHN0YXR1cyAqL1xuK1x0XHR9IHdiO1xuK1x0fTtcbit9O1xuK1xuK3N0cnVjdCBpZ2JfcnhfZGVzYyB7XG4rXHR1bmlvbiB7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTY0IHBrdF9hZGRyOyAvKiBQYWNrZXQgYnVmZmVyIGFkZHJlc3MgKi9cbitcdFx0XHR1NjQgaGRyX2FkZHI7IC8qIEhlYWRlciBidWZmZXIgYWRkcmVzcyAqL1xuK1x0XHR9IHJlYWQ7XG4rXHRcdHN0cnVjdCB7XG4rXHRcdFx0dTE2IHBrdF9pbmZvOyAgICAgLyogUlNTIHR5cGUsIFBhY2tldCB0eXBlICovXG4rXHRcdFx0dTE2IGhkcl9pbmZvOyAgICAgLyogU3BsaXQgSGVhZCwgYnVmIGxlbiAqL1xuK1x0XHRcdHUzMiByc3M7ICAgICAgICAgIC8qIFJTUyBIYXNoICovXG4rXHRcdFx0dTMyIHN0YXR1c19lcnJvcjsgLyogZXh0IHN0YXR1cy9lcnJvciAqL1xuK1x0XHRcdHUxNiBsZW5ndGg7ICAgICAgIC8qIFBhY2tldCBsZW5ndGggKi9cbitcdFx0XHR1MTYgdmxhbjsgICAgICAgICAvKiBWTEFOIHRhZyAqL1xuK1x0XHR9IHdiOyAvKiB3cml0ZWJhY2sgKi9cbitcdH07XG4rfTtcbitcbitzdHJ1Y3QgaWdiIHtcbitcdHZvaWQgKmJhcjA7XG4rXHR1MzIgdHhfdGFpbDtcbitcdHUzMiByeF90YWlsO1xuK1x0c3RydWN0IGlnYl90eF9kZXNjIHR4X3JpbmdbUklOR19TSVpFXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDEyOCkpKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyByeF9yaW5nW1JJTkdfU0laRV0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZCgxMjgpKSk7XG4rfTtcbitcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBpZ2IgKnRvX2lnYl9zdGF0ZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0cmV0dXJuIChzdHJ1Y3QgaWdiICopZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24udmFkZHI7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCBpZ2Jfd3JpdGUzMihzdHJ1Y3QgaWdiICppZ2IsIHUzMiByZWcsIHUzMiB2YWwpXG4re1xuK1x0d3JpdGVsKHZhbCwgaWdiLVx1MDAzZWJhcjAgKyByZWcpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHUzMiBpZ2JfcmVhZDMyKHN0cnVjdCBpZ2IgKmlnYiwgdTMyIHJlZylcbit7XG4rXHRyZXR1cm4gcmVhZGwoaWdiLVx1MDAzZWJhcjAgKyByZWcpO1xuK31cbitcbitzdGF0aWMgaW50IGlnYl93cml0ZV9waHkoc3RydWN0IGlnYiAqaWdiLCB1MzIgb2Zmc2V0LCB1MTYgZGF0YSlcbit7XG4rXHR1MzIgbWRpYztcbitcdGludCBpO1xuK1xuK1x0LypcbitcdCAqIFdyaXRlIGEgUEhZIHJlZ2lzdGVyIG92ZXIgTURJTy5cbitcdCAqXG4rXHQgKiBBIHByb2R1Y3Rpb24gZHJpdmVyIHdvdWxkIGhvbGQgdGhlIFNXL0ZXIHNlbWFwaG9yZSAoU1dTTS5TV0VTTUJJICsgdGhlXG4rXHQgKiBTV19GV19TWU5DIFBIWSBiaXQpIGFjcm9zcyB0aGUgTURJTyB0cmFuc2FjdGlvbiB0byBzZXJpYWxpemUgYWdhaW5zdCB0aGVcbitcdCAqIGRldmljZSdzIG1hbmFnZW1lbnQgZmlybXdhcmUuICBUaGUgc2VsZnRlc3Qgb3ducyB0aGUgYXNzaWduZWQgZnVuY3Rpb25cbitcdCAqIGV4Y2x1c2l2ZWx5IG9uIGEgZGVkaWNhdGVkIHRlc3QgZGV2aWNlIHdpdGggbm8gYWN0aXZlIG1hbmFnZWFiaWxpdHlcbitcdCAqIGNvbnRlbmRpbmcgZm9yIHRoZSBQSFksIHNvIHRoZSBzeW5jIGlzIG9taXR0ZWQ7IGl0IHNob3VsZCBiZSBhZGRlZCBoZXJlXG4rXHQgKiBpZiB0aGlzIGV2ZXIgbmVlZHMgdG8gcnVuIG9uIGEgbWFuYWdlYWJpbGl0eS1lbmFibGVkIE5JQy5cbitcdCAqL1xuK1x0bWRpYyA9ICgoKHUzMilkYXRhKSB8XG4rXHRcdChvZmZzZXQgXHUwMDNjXHUwMDNjIEUxMDAwX01ESUNfUkVHX1NISUZUKSB8XG4rXHRcdCgxIFx1MDAzY1x1MDAzYyBFMTAwMF9NRElDX1BIWV9TSElGVCkgfFxuK1x0XHRFMTAwMF9NRElDX09QX1dSSVRFKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfTURJQywgbWRpYyk7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyAxMDAwOyBpKyspIHtcbitcdFx0dXNsZWVwKDUwKTtcbitcdFx0bWRpYyA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9NRElDKTtcbitcdFx0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfUkVBRFkpXG4rXHRcdFx0YnJlYWs7XG4rXHR9XG4rXG4rXHRpZiAoIShtZGljIFx1MDAyNiBFMTAwMF9NRElDX1JFQURZKSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuK1x0aWYgKG1kaWMgXHUwMDI2IEUxMDAwX01ESUNfRVJST1IpXG4rXHRcdHJldHVybiAtMTtcbitcbitcdHJldHVybiAwO1xuK31cbitcbisvKlxuKyAqIENvbmZpZ3VyZSB0aGUgZGV2aWNlIGZvciBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgcGVyIDgyNTc2IGRhdGFzaGVldFxuKyAqIHNlY3Rpb24gMy41LjYuMy4xLiAgRm9yY2UgdGhlIFBIWSB0byAxR2IvcyBmdWxsIGR1cGxleCB3aXRoIGxvb3BiYWNrXG4rICogZW5hYmxlZCwgdGhlbiBmb3JjZSB0aGUgTUFDIGxpbmsgc3RhdGUgdG8gbWF0Y2guICBJbnRlcm5hbCBsb29wYmFja1xuKyAqIHdyYXBzIGRhdGEgYXQgdGhlIGVuZCBvZiB0aGUgUEhZIGRhdGFwYXRoIChzZWN0aW9uIDMuNS42LjMpLCBzbyB0aGVcbisgKiBwaHlzaWNhbCBsaW5rIHN0YXRlIGlzIGlycmVsZXZhbnQuXG4rICpcbisgKiBTZWN0aW9uIDMuNS42LjEgZGlyZWN0cyB0byBcIlVzZSBQSFkgTG9vcGJhY2sgaW5zdGVhZCBvZiBNQUMgTG9vcGJhY2tcbisgKiBvbiB0aGUgODI1NzZcIiwgYW5kIHNlY3Rpb24gMy41LjYuMiBzdGF0ZXMgXCJNQUMgTG9vcGJhY2sgaXMgbm90IHVzZWRcbisgKiBvbiB0aGlzIGRldmljZS5cIiAgUkNUTC5MQk1fTUFDIGlzIHN0aWxsIHNldCBlbHNld2hlcmUgYXMgYSBRRU1VLW9ubHlcbisgKiBhY2NvbW1vZGF0aW9uOyBzZWUgdGhlIFJDVEwgcHJvZ3JhbW1pbmcgaW4gdGhlIGNhbGxlciBmb3IgdGhlXG4rICogcmF0aW9uYWxlLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGlnYl9zZXR1cF9sb29wYmFjayhzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0dTMyIGN0cmw7XG4rXHRpbnQgcmV0O1xuK1xuK1x0LypcbitcdCAqIEtpY2sgdGhlIGF1dG9uZWcgbWFjaGluZXJ5IHNvbGVseSB0byBicmluZyBTVEFUVVMuTFUgdXAgdW5kZXJcbitcdCAqIFFFTVUncyBpZ2IgZW11bGF0aW9uOiBRRU1VIG9ubHkgdXBkYXRlcyBTVEFUVVMuTFUgdmlhIGl0c1xuK1x0ICogYXV0b25lZy1kb25lIHRpbWVyLCBhbmQgd2l0aG91dCBMVSBzZXQgaXRzIHJlY2VpdmUgcGF0aFxuK1x0ICogKGUxMDAweF9od19yeF9lbmFibGVkKSBkcm9wcyBldmVyeSBsb29wYmFjayBmcmFtZS4gIE9uIHJlYWxcbitcdCAqIGhhcmR3YXJlIGF1dG9uZWcgY2Fubm90IGNvbXBsZXRlIGJlZm9yZSB0aGUgbmV4dCBQSFkgd3JpdGVcbitcdCAqIGJlbG93IGNsZWFycyB0aGUgYXV0b25lZy1lbmFibGUgYml0LCBzbyB0aGlzIGlzIGVmZmVjdGl2ZWx5IGFcbitcdCAqIG5vLW9wIHRoZXJlLlxuK1x0ICovXG4rXHQodm9pZClpZ2Jfd3JpdGVfcGh5KGlnYiwgTUlJX0JNQ1IsXG4rXHRcdFx0ICAgIEJNQ1JfQU5FTkFCTEUgfCBCTUNSX0FOUkVTVEFSVCk7XG4rXG4rXHQvKiBQSFkgY29udHJvbDogbG9vcGJhY2sgKyAxR2IvcyBmdWxsIGR1cGxleCwgYXV0b25lZyBkaXNhYmxlZC4gKi9cbitcdHJldCA9IGlnYl93cml0ZV9waHkoaWdiLCBNSUlfQk1DUixcbitcdFx0XHQgICAgQk1DUl9MT09QQkFDSyB8XG4rXHRcdFx0ICAgIEJNQ1JfU1BFRUQxMDAwIHxcbitcdFx0XHQgICAgQk1DUl9GVUxMRFBMWCk7XG4rXHRWRklPX0FTU0VSVF9FUShyZXQsIDAsIFwiRmFpbGVkIHRvIHdyaXRlIFBIWSBjb250cm9sIHJlZ2lzdGVyXCIpO1xuK1xuK1x0LypcbitcdCAqIEJyaWVmIGRlbGF5IGJlZm9yZSBmb3JjaW5nIHRoZSBNQUMsIG1pcnJvcmluZyB0aGUga2VybmVsIGV0aHRvb2xcbitcdCAqIHNlbGZ0ZXN0IGluIGlnYl9pbnRlZ3JhdGVkX3BoeV9sb29wYmFjaygpLiAgTm90IHNwZWNpZmllZCBieSB0aGVcbitcdCAqIGRhdGFzaGVldCwgYnV0IGVtcGlyaWNhbGx5IHJlcXVpcmVkIGJ5IHRoZSBrZXJuZWwgZHJpdmVyLlxuK1x0ICovXG4rXHR1c2xlZXAoNTAwMDApO1xuK1xuK1x0LypcbitcdCAqIEZvcmNlIHRoZSBNQUMgdG8gMUdiL3MgZnVsbCBkdXBsZXggd2l0aCBsaW5rIHVwLiAgV2l0aG91dCBmb3JjaW5nXG4rXHQgKiB0aGUgbGluayBzdGF0ZSB0aGUgZGVzY3JpcHRvciBlbmdpbmUgZG9lcyBub3QgcnVuLCBzaW5jZSB0aGUgY2hpcFxuK1x0ICogbm9ybWFsbHkgd2FpdHMgZm9yIGEgcmVhbCBuZWdvdGlhdGVkIGxpbmsuXG4rXHQgKi9cbitcdGN0cmwgPSBpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCk7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0NUUkxfU1BEX1NFTDtcbitcdGN0cmwgfD0gRTEwMDBfQ1RSTF9GUkNTUEQgfFxuK1x0XHRFMTAwMF9DVFJMX0ZSQ0RQWCB8XG4rXHRcdEUxMDAwX0NUUkxfU1BEXzEwMDAgfFxuK1x0XHRFMTAwMF9DVFJMX0ZEIHxcbitcdFx0RTEwMDBfQ1RSTF9TTFU7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0NUUkwsIGN0cmwpO1xuK1xuK1x0LypcbitcdCAqIFNldHRsaW5nIGRlbGF5IG1hdGNoaW5nIHRoZSBrZXJuZWwgZXRodG9vbCBzZWxmdGVzdCdzIG1zbGVlcCg1MDApXG4rXHQgKiBhdCB0aGUgdGFpbCBvZiBpZ2JfaW50ZWdyYXRlZF9waHlfbG9vcGJhY2soKS4gIE5vdCBzcGVjaWZpZWQgYnlcbitcdCAqIHRoZSBkYXRhc2hlZXQ7IGVtcGlyaWNhbCwgYW5kIGluaGVyaXRlZCBmcm9tIHRoZSBrZXJuZWwgZHJpdmVyLlxuK1x0ICovXG4rXHR1c2xlZXAoNTAwMDAwKTtcbit9XG4rXG4rc3RhdGljIGludCBpZ2JfcHJvYmUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmICghdmZpb19wY2lfZGV2aWNlX21hdGNoKGRldmljZSwgUENJX1ZFTkRPUl9JRF9JTlRFTCwgUENJX0RFVklDRV9JRF9JTlRFTF84MjU3NikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9yZXNldChzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTCwgaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0NUUkwpIHwgRTEwMDBfQ1RSTF9SU1QpO1xuK1x0LypcbitcdCAqIE11c3Qgd2FpdCBhdCBsZWFzdCAxIG1pbGxpc2Vjb25kIGFmdGVyIHNldHRpbmcgdGhlIHJlc2V0IGJpdCBiZWZvcmVcbitcdCAqIGNoZWNraW5nIGlmIHRoaXMgZGV2aWNlIGlzIHJlYWR5IHRvIGJlIHVzZWQgKDgyNTc2IGRhdGFzaGVldCBzZWN0aW9uXG4rXHQgKiA0LjIuMS42LjEpLiAgVGhlIGRlbGF5IGFsc28gZW5zdXJlcyB0aGUgcmVzZXQgaGFzIHRha2VuIGVmZmVjdCBhbmRcbitcdCAqIGNsZWFyZWQgRUVDRC5BVVRPX1JEIGJlZm9yZSBpdCBpcyBwb2xsZWQgYmVsb3cuXG4rXHQgKi9cbitcdHVzbGVlcCgxMDAwKTtcbitcbitcdC8qXG4rXHQgKiBQb2xsIE5WTSBBdXRvIFJlYWQgRG9uZSByYXRoZXIgdGhhbiBDVFJMLlJTVCwgbWF0Y2hpbmdcbitcdCAqIGlnYl9nZXRfYXV0b19yZF9kb25lKCkgaW4gdGhlIGlnYiBkcml2ZXI6IEFVVE9fUkQgaW1wbGllcyBib3RoIHRoYXRcbitcdCAqIHRoZSByZXNldCBjb21wbGV0ZWQgYW5kIHRoYXQgdGhlIGRldmljZSBmaW5pc2hlZCByZS1yZWFkaW5nIGl0c1xuK1x0ICogY29uZmlndXJhdGlvbiBmcm9tIE5WTSwgd2hpY2ggaXMgd2hhdCBhY3R1YWxseSBtYWtlcyBpdCB1c2FibGUuXG4rXHQgKi9cbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDAgXHUwMDI2XHUwMDI2ICEoaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0VFQ0QpIFx1MDAyNiBFMTAwMF9FRUNEX0FVVE9fUkQpKVxuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXG4rXHQvKlxuK1x0ICogUUVNVSdzIGlnYiBlbXVsYXRpb24gZG9lcyBub3Qgc2V0IEUxMDAwX0VFQ0RfQVVUT19SRC4gSWYgd2UgdGltZWQgb3V0LFxuK1x0ICogY2hlY2sgaWYgQ1RSTC5SU1QgaXMgY2xlYXJlZCwgd2hpY2ggaXMgd2hhdCBRRU1VIHVzZXMgdG8gc2lnbmFsIHJlc2V0XG4rXHQgKiBjb21wbGV0aW9uLlxuK1x0ICovXG4rXHRpZiAocmV0cmllcyBcdTAwM2MgMCkge1xuK1x0XHRWRklPX0FTU0VSVF9FUShpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfQ1RSTCkgXHUwMDI2IEUxMDAwX0NUUkxfUlNULCAwLFxuK1x0XHRcdCAgICAgICBcIkRldmljZSByZXNldCBkaWQgbm90IGNvbXBsZXRlIChDVFJMLlJTVCBub3QgY2xlYXJlZClcIik7XG4rXHR9XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0lNQywgMHhGRkZGRkZGRik7XG4rfVxuK1xuKy8qXG4rICogUHJvZ3JhbSB0aGUgZGV2aWNlIGludG8gYSB1c2FibGUgc3RhdGUuICBTcGxpdCBvdXQgb2YgaWdiX2luaXQoKSBzbyBpdFxuKyAqIGNhbiBiZSByZXVzZWQgYWZ0ZXIgYSBkZXZpY2UgcmVzZXQgdG8gcmUtcHJvZ3JhbSB0aGUgcmVnaXN0ZXJzIHRoYXRcbisgKiBDVFJMLlJTVCBjbGVhcnMuICBFeHBlY3RzIGJhcjAgdG8gYmUgbWFwcGVkIGFuZCBNU0ktWCBhbHJlYWR5IGVuYWJsZWRcbisgKiB2aWEgVkZJTy5cbisgKi9cbitzdGF0aWMgdm9pZCBpZ2JfaHdfaW5pdChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4re1xuK1x0c3RydWN0IGlnYiAqaWdiID0gdG9faWdiX3N0YXRlKGRldmljZSk7XG4rXHR1NjQgaW92YV90eCwgaW92YV9yeDtcbitcdHUzMiBjdHJsLCByY3RsO1xuK1x0dTE2IGNtZF9yZWc7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdGlvdmFfdHggPSB0b19pb3ZhKGRldmljZSwgaWdiLVx1MDAzZXR4X3JpbmcpO1xuK1x0aW92YV9yeCA9IHRvX2lvdmEoZGV2aWNlLCBpZ2ItXHUwMDNlcnhfcmluZyk7XG4rXG4rXG4rXG4rXHQvKiBTaWduYWwgdGhhdCB0aGUgZHJpdmVyIGlzIGxvYWRlZCAqL1xuK1x0Y3RybCA9IGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9DVFJMX0VYVCk7XG4rXHRjdHJsIHw9IEUxMDAwX0NUUkxfRVhUX0RSVl9MT0FEO1xuK1x0Y3RybCBcdTAwMjY9IH5FMTAwMF9DVFJMX0VYVF9MSU5LX01PREVfTUFTSztcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfQ1RSTF9FWFQsIGN0cmwpO1xuK1xuK1x0LyogRW5hYmxlIFBDSSBCdXMgTWFzdGVyLiAqL1xuK1x0Y21kX3JlZyA9IHZmaW9fcGNpX2NvbmZpZ19yZWFkdyhkZXZpY2UsIFBDSV9DT01NQU5EKTtcbitcdGlmICgoY21kX3JlZyBcdTAwMjYgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpICE9XG4rXHQgICAgKFBDSV9DT01NQU5EX01BU1RFUiB8IFBDSV9DT01NQU5EX01FTU9SWSkpIHtcbitcdFx0Y21kX3JlZyB8PSAoUENJX0NPTU1BTkRfTUFTVEVSIHwgUENJX0NPTU1BTkRfTUVNT1JZKTtcbitcdFx0dmZpb19wY2lfY29uZmlnX3dyaXRldyhkZXZpY2UsIFBDSV9DT01NQU5ELCBjbWRfcmVnKTtcbitcdH1cbitcbitcdC8qIENvbmZpZ3VyZSBQSFkgaW50ZXJuYWwgbG9vcGJhY2sgZm9yIHRlc3RpbmcuICovXG4rXHRpZ2Jfc2V0dXBfbG9vcGJhY2soaWdiKTtcbitcbitcdC8qXG4rXHQgKiBEaXNhYmxlIERNQSByZS1zZW5kIG9uIFBDSWUgY29tcGxldGlvbiB0aW1lb3V0ICg4MjU3NiBkYXRhc2hlZXRcbitcdCAqIHNlY3Rpb24gOC42LjEsIEdDUi5Db21wbGV0aW9uX1RpbWVvdXRfUmVzZW5kLCBiaXQgMTYpLiAgVGhlXG4rXHQgKiBtaXhfYW5kX21hdGNoIHRlc3QgaW50ZW50aW9uYWxseSBzdWJtaXRzIGRlc2NyaXB0b3JzIHRhcmdldGluZ1xuK1x0ICogdW5tYXBwZWQgSU9WQXM7IHdpdGggdGhlIGRlZmF1bHQgKHNldCkgdmFsdWUsIHRoZSBkZXZpY2Uga2VlcHNcbitcdCAqIHJldHJ5aW5nIHRoZSBmYWlsZWQgcmVhZCBpbmRlZmluaXRlbHksIHdoaWNoIGtlZXBzIFBDSWUgQUVSIGFuZFxuK1x0ICogSU9NTVUgZXJyb3IgaGFuZGxpbmcgYnVzeSBhbmQgaW50ZXJmZXJlcyB3aXRoIHJlc2V0IHJlY292ZXJ5LlxuK1x0ICovXG4rXHRjdHJsID0gaWdiX3JlYWQzMihpZ2IsIEUxMDAwX0dDUik7XG4rXHRjdHJsIFx1MDAyNj0gfkUxMDAwX0dDUl9DTVBMX1RNT1VUX1JFU0VORDtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfR0NSLCBjdHJsKTtcbitcbitcdC8qIENvbmZpZ3VyZSBUWCBhbmQgUlggZGVzY3JpcHRvciByaW5ncyAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UREJBTCgwKSwgKHUzMilpb3ZhX3R4KTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfVERCQUgoMCksICh1MzIpKGlvdmFfdHggXHUwMDNlXHUwMDNlIDMyKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RETEVOKDApLCBSSU5HX1NJWkUgKiBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RESCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RYRENUTCgwKSwgRTEwMDBfVFhEQ1RMX1FVRVVFX0VOQUJMRSk7XG4rXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JEQkFMKDApLCAodTMyKWlvdmFfcngpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SREJBSCgwKSwgKHUzMikoaW92YV9yeCBcdTAwM2VcdTAwM2UgMzIpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRMRU4oMCksIFJJTkdfU0laRSAqIHNpemVvZihzdHJ1Y3QgaWdiX3J4X2Rlc2MpKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRIKDApLCAwKTtcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCAwKTtcbitcbitcdC8qXG4rXHQgKiBTZWxlY3QgdGhlIGFkdmFuY2VkIG9uZS1idWZmZXIgZGVzY3JpcHRvciBmb3JtYXQuICBQZXIgODI1NzZcbitcdCAqIGRhdGFzaGVldCBzZWN0aW9uIDcuMS41LjI6IFwiU1JSQ1RMW25dLkRFU0NUWVBFIG11c3QgYmUgc2V0IHRvIGFcbitcdCAqIHZhbHVlIG90aGVyIHRoYW4gMDAwYiBmb3IgdGhlIDgyNTc2IHRvIHdyaXRlIGJhY2sgdGhlIHNwZWNpYWxcbitcdCAqIGRlc2NyaXB0b3JzLlwiICBzdHJ1Y3QgaWdiX3J4X2Rlc2MgbWF0Y2hlcyB0aGUgYWR2YW5jZWQgb25lLWJ1ZmZlclxuK1x0ICogd3JpdGViYWNrIGxheW91dCAoc2VjdGlvbiA3LjEuNS4yKSwgc28gcG9sbGluZyByeC53Yi5zdGF0dXNfZXJyb3JcbitcdCAqIHJlcXVpcmVzIHRoaXMgZm9ybWF0LiAgU2VjdGlvbiA4LjEwLjIgc3BlY2lmaWVzIERFU0NUWVBFWzI3OjI1XS5cbitcdCAqXG4rXHQgKiBUaGUgZGlyZWN0IHdyaXRlIGFsc28gemVyb2VzIFNSUkNUTC5CU0laRVBBQ0tFVCwgd2hpY2ggaXNcbitcdCAqIGludGVudGlvbmFsOiBwZXIgc2VjdGlvbiA3LjEuMy4xIGEgemVybyBCU0laRVBBQ0tFVCBmYWxscyBiYWNrIHRvXG4rXHQgKiB0aGUgUkNUTC5CU0laRSBidWZmZXIgc2l6ZSwgd2hvc2UgcmVzZXQgZGVmYXVsdCAoMDBiKSBpcyAyMDQ4XG4rXHQgKiBieXRlcyAtLSBhbXBsZSBmb3IgdGhlIGxvb3BiYWNrIGZyYW1lcyBoZXJlLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1NSUkNUTCgwKSwgRTEwMDBfU1JSQ1RMX0RFU0NUWVBFX0FEVl9PTkVCVUYpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9SWERDVEwoMCksIEUxMDAwX1JYRENUTF9RVUVVRV9FTkFCTEUpO1xuK1xuK1x0LypcbitcdCAqIEVuYWJsZSBSZWNlaXZlciBhbmQgVHJhbnNtaXR0ZXIuICBSQ1RMLkxCTV9NQUMgaXMgc2V0IGluIGFkZGl0aW9uXG4rXHQgKiB0byBQSFkgbG9vcGJhY2sgYXMgYSBRRU1VLW9ubHkgYWNjb21tb2RhdGlvbjogUUVNVSdzIGVtdWxhdGVkIGlnYlxuK1x0ICogZG9lcyBub3QgaG9ub3IgUEhZIHJlZ2lzdGVyIDAgYml0IDE0IChQSFkgaW50ZXJuYWwgbG9vcGJhY2spIGFuZFxuK1x0ICogcmVsaWVzIG9uIFJDVEwuTEJNX01BQyB0byB3cmFwIFRYIGRlc2NyaXB0b3JzIGJhY2sgdG8gdGhlIFJYXG4rXHQgKiBxdWV1ZS4gIERhdGFzaGVldCA4LjEwLjEgKFJDVEwgcmVnaXN0ZXIpIGFkdmlzZXMgXCJXaGVuIHVzaW5nIHRoZVxuK1x0ICogaW50ZXJuYWwgUEhZLCBMQk0gc2hvdWxkIHJlbWFpbiBzZXQgdG8gMDBiXCIsIHNvIHNldHRpbmcgTEJNX01BQ1xuK1x0ICogaGVyZSBkZXZpYXRlcyBmcm9tIGRhdGFzaGVldCBndWlkYW5jZTsgZW1waXJpY2FsbHkgdGhlIGJpdCBoYXNcbitcdCAqIG5vIG9ic2VydmFibGUgZWZmZWN0IG9uIHJlYWwgODI1NzYgaGFyZHdhcmUgYmVjYXVzZSBNQUMgbG9vcGJhY2tcbitcdCAqIGlzIG5vdCBpbXBsZW1lbnRlZCAoZGF0YXNoZWV0IDMuNS42LjIpLiAgU2V0dGluZyBib3RoIGxldHMgdGhlXG4rXHQgKiBzZWxmdGVzdCB3b3JrIG9uIGJvdGggcmVhbCBoYXJkd2FyZSBhbmQgUUVNVSB3aXRob3V0IGNvbmRpdGlvbmFsXG4rXHQgKiBjb2RlIHBhdGhzLlxuK1x0ICovXG4rXHRyY3RsID0gRTEwMDBfUkNUTF9FTiB8ICAgICAgIC8qIFJlY2VpdmVyIEVuYWJsZSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfVVBFIHwgICAgICAvKiBVbmljYXN0IFByb21pc2N1b3VzIChmb3IgZHVtbXkgTUFDKSAqL1xuK1x0ICAgICAgIEUxMDAwX1JDVExfTVBFIHwgICAgICAvKiBNdWx0aWNhc3QgUHJvbWlzY3VvdXMgKi9cbitcdCAgICAgICBFMTAwMF9SQ1RMX0JBTSB8ICAgICAgLyogQnJvYWRjYXN0IEFjY2VwdCBNb2RlICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9MQk1fTUFDIHwgIC8qIE1BQyBMb29wYmFjayAtIGZvciBRRU1VIGVtdWxhdGlvbiBvbmx5ICovXG4rXHQgICAgICAgRTEwMDBfUkNUTF9TRUNSQzsgICAgIC8qIFN0cmlwIENSQyAobmVlZGVkIGZvciBtZW1jbXApICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1JDVEwsIHJjdGwpO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9UQ1RMLCBFMTAwMF9UQ1RMX0VOIHwgRTEwMDBfVENUTF9QU1ApO1xuK1xuK1x0LypcbitcdCAqIFdhaXQgZm9yIFRYIGFuZCBSWCBxdWV1ZXMgdG8gYmUgZW5hYmxlZC4gIFBlciB0aGUgUlhEQ1RML1RYRENUTFxuK1x0ICogcmVnaXN0ZXIgZGVmaW5pdGlvbnMgKDguMTAuMTAvOC4xMi4xMyksIHRoZSBwZXItcXVldWUgZW5hYmxlIGJpdFxuK1x0ICogXCJyZW1haW5zIHplcm9cIiB1bnRpbCB0aGUgZ2xvYmFsIFJDVEwuUlhFTi9UQ1RMLlRYRU4gYXJlIHNldCwgc29cbitcdCAqIEUxMDAwX1JDVExfRU4gYW5kIEUxMDAwX1RDVExfRU4gbXVzdCBhbHJlYWR5IGJlIHdyaXR0ZW4gYWJvdmUuXG4rXHQgKi9cbitcdHJldHJpZXMgPSAyMDAwO1xuK1x0d2hpbGUgKHJldHJpZXMtLSBcdTAwM2UgMCkge1xuK1x0XHRpZiAoKGlnYl9yZWFkMzIoaWdiLCBFMTAwMF9UWERDVEwoMCkpIFx1MDAyNiBFMTAwMF9UWERDVExfUVVFVUVfRU5BQkxFKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIChpZ2JfcmVhZDMyKGlnYiwgRTEwMDBfUlhEQ1RMKDApKSBcdTAwMjYgRTEwMDBfUlhEQ1RMX1FVRVVFX0VOQUJMRSkpXG4rXHRcdFx0YnJlYWs7XG4rXHRcdHVzbGVlcCgxMCk7XG4rXHR9XG4rXHRWRklPX0FTU0VSVF9HRShyZXRyaWVzLCAwKTtcbitcbitcdC8qXG4rXHQgKiBQcm9ncmFtIE1TSS1YIGludGVycnVwdCByb3V0aW5nIHBlciA4MjU3NiBkYXRhc2hlZXQ6XG4rXHQgKlxuK1x0ICogR1BJRSAoc2VjdGlvbiA3LjMuMi4xMSwgVGFibGUgNy00Nyk6IHNldCBNdWx0aXBsZV9NU0lYIChiaXQgNCkgdG9cbitcdCAqIHJvdXRlIGludGVycnVwdCBjYXVzZXMgdGhyb3VnaCBJVkFSIG1hcHBpbmcsIGFuZCBFSUFNRSAoYml0IDMwKVxuK1x0ICogdG8gYXBwbHkgRUlBTSBvbiBNU0ktWCBhc3NlcnRpb24gKHdpdGhvdXQgRUlBTUUsIEVJQU0gb25seVxuK1x0ICogYXBwbGllcyBvbiBFSUNSIHJlYWQvd3JpdGUpLlxuK1x0ICpcbitcdCAqIEVJQUMgKHNlY3Rpb24gOC44LjUpOiBlbmFibGUgYXV0by1jbGVhciBvZiBFSUNSIGZvciB2ZWN0b3IgMC5cbitcdCAqIFdpdGhvdXQgYXV0by1jbGVhciB0aGUgY2F1c2Ugc3RheXMgc2V0IGFmdGVyIGRlbGl2ZXJ5IGFuZCB0aGVcbitcdCAqIHRlc3QgY2FuIHNlZSBzcHVyaW91cyBpbnRlcnJ1cHRzIG9uIHRoZSBuZXh0IG1lbWNweSBiYXRjaC5cbitcdCAqXG4rXHQgKiBFSUFNIChzZWN0aW9uIDguOC42KTogZW5hYmxlIGF1dG8tbWFzayBvZiBFSU1TIGZvciB2ZWN0b3IgMCBvblxuK1x0ICogTVNJLVggYXNzZXJ0aW9uIChlZmZlY3RpdmUgYmVjYXVzZSBFSUFNRSBpcyBzZXQpLlxuK1x0ICpcbitcdCAqIElWQVIgKHNlY3Rpb24gNy4zLjEuMiwgcmVnaXN0ZXIgZGVmaW5pdGlvbiBpbiA4LjguMTMpOiBtYXAgUlhcbitcdCAqIGNhdXNlIDAgdG8gTVNJLVggdmVjdG9yIDAgYW5kIG1hcmsgdGhlIGVudHJ5IHZhbGlkLlxuK1x0ICovXG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0dQSUUsIEUxMDAwX0dQSUVfTVNJWF9NT0RFIHwgRTEwMDBfR1BJRV9FSUFNRSk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJQUMsIE1TSVhfVkVDVE9SX01BU0spO1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUFNLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcbitcdC8qIE1hcCB2ZWN0b3IgMCB0byBpbnRlcnJ1cHQgY2F1c2UgMCBhbmQgbWFyayBpdCB2YWxpZCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9JVkFSMCwgRTEwMDBfSVZBUl9WQUxJRCk7XG4rXG4rXHQvKiBFbmFibGUgaW50ZXJydXB0cyBvbiB2ZWN0b3IgMCAqL1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbitcbitcdC8qIEluaXRpYWxpemUgZHJpdmVyIHN0YXRlIGFuZCBjYXBhYmlsaXR5IGxpbWl0cyAqL1xuK1x0aWdiLVx1MDAzZXR4X3RhaWwgPSAwO1xuK1x0aWdiLVx1MDAzZXJ4X3RhaWwgPSAwO1xuK1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tYXhfbWVtY3B5X3NpemUgPSBJR0JfTUFYX0NIVU5LX1NJWkU7XG4rXHRkZXZpY2UtXHUwMDNlZHJpdmVyLm1heF9tZW1jcHlfY291bnQgPSBSSU5HX1NJWkUgLSAxO1xuK1x0ZGV2aWNlLVx1MDAzZWRyaXZlci5tc2kgPSBNU0lYX1ZFQ1RPUjtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2luaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZWRyaXZlci5yZWdpb24uc2l6ZSwgc2l6ZW9mKHN0cnVjdCBpZ2IpKTtcbitcbitcdGlnYi1cdTAwM2ViYXIwID0gZGV2aWNlLVx1MDAzZWJhcnNbMF0udmFkZHI7XG4rXG4rXHRpZ2JfcmVzZXQoaWdiKTtcbitcbitcdC8qXG4rXHQgKiBFbmFibGUgTVNJLVggdmlhIFZGSU8gYmVmb3JlIGRldmljZS1zaWRlIHJlZ2lzdGVyIHByb2dyYW1taW5nLlxuK1x0ICogdmZpb19wY2lfbXNpeF9lbmFibGUoKSBvbmx5IHRvdWNoZXMgdGhlIFZGSU8gSVJRIG1hY2hpbmVyeSBhbmQgdGhlXG4rXHQgKiBQQ0kgTVNJLVggY2FwYWJpbGl0eSB2aWEgY29uZmlnIHNwYWNlOyBpdCBoYXMgbm8gb3JkZXJpbmdcbitcdCAqIGRlcGVuZGVuY3kgb24gdGhlIGRldmljZS1zaWRlIHdyaXRlcyBwZXJmb3JtZWQgYnkgaWdiX2h3X2luaXQoKS5cbitcdCAqIFBsYWNpbmcgaXQgaGVyZSBrZWVwcyBpZ2JfaHdfaW5pdCgpIHJldXNhYmxlIGZyb20gdGhlIHJlc2V0XG4rXHQgKiByZWNvdmVyeSBwYXRoICh3aGljaCBjYWxscyB2ZmlvX3BjaV9pcnFfcmVlbmFibGUoKSBpbnN0ZWFkKS5cbitcdCAqL1xuK1x0dmZpb19wY2lfbXNpeF9lbmFibGUoZGV2aWNlLCBNU0lYX1ZFQ1RPUiwgMSk7XG4rXG4rXHRpZ2JfaHdfaW5pdChkZXZpY2UpO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfcmVtb3ZlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkNUTCwgMCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1RDVEwsIDApO1xuK1x0aWdiX3Jlc2V0KGlnYik7XG4rXG4rXHR2ZmlvX3BjaV9tc2l4X2Rpc2FibGUoZGV2aWNlKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9kaXNhYmxlKHN0cnVjdCBpZ2IgKmlnYilcbit7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX0VJTUMsIE1TSVhfVkVDVE9SX01BU0spO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2JfaXJxX2VuYWJsZShzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSU1TLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaWdiX2lycV9jbGVhcihzdHJ1Y3QgaWdiICppZ2IpXG4re1xuK1x0LypcbitcdCAqIFVzZSB3cml0ZS10by1jbGVhciAoZGF0YXNoZWV0IDcuMy40LjIpLiAgSW4gTVNJLVggbW9kZSB3aXRoIEVJQUNcbitcdCAqIHByb2dyYW1tZWQsIHNlY3Rpb24gOC44LjUgZXhwbGljaXRseSBzdGF0ZXMgXCJJZiBhbnkgYml0cyBhcmUgc2V0XG4rXHQgKiBpbiBFSUFDLCB0aGUgRUlDUiByZWdpc3RlciBzaG91bGQgbm90IGJlIHJlYWRcIiwgd2hpY2ggcnVsZXMgb3V0XG4rXHQgKiB0aGUgcmVhZC10by1jbGVhciBwYXRoIGluIDcuMy40LjMuICBCaXRzIG5vdCBpbiBFSUFDIGFyZSBzdGlsbFxuK1x0ICogY2xlYXJlZCBieSB3cml0aW5nIDEuXG4rXHQgKi9cbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfRUlDUiwgMHhGRkZGRkZGRik7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGlnYl9tZW1jcHlfc3RhcnQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBpb3ZhX3Qgc3JjLFxuK1x0XHRcdCAgICAgaW92YV90IGRzdCwgdTY0IHNpemUsIHU2NCBjb3VudClcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHRzdHJ1Y3QgaWdiX3R4X2Rlc2MgKnR4O1xuK1x0dTMyIGk7XG4rXG4rXHRWRklPX0FTU0VSVF9HRShzaXplLCA2MCxcbitcdFx0ICAgICAgIFwiSUdCIGRyaXZlciByZXF1aXJlcyBtZW1jcHkgc2l6ZSB0byBiZSBhdCBsZWFzdCA2MCBieXRlcyAoRXRoZXJuZXQgbWluaW11bSBwYXlsb2FkIHNpemUpXCIpO1xuK1xuK1x0aWdiX2lycV9kaXNhYmxlKGlnYik7XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBjb3VudDsgaSsrKSB7XG4rXHRcdHR4ID0gXHUwMDI2aWdiLVx1MDAzZXR4X3JpbmdbaWdiLVx1MDAzZXR4X3RhaWxdO1xuK1x0XHRyeCA9IFx1MDAyNmlnYi1cdTAwM2VyeF9yaW5nW2lnYi1cdTAwM2VyeF90YWlsXTtcbitcbitcdFx0bWVtc2V0KHR4LCAwLCBzaXplb2Yoc3RydWN0IGlnYl90eF9kZXNjKSk7XG4rXHRcdG1lbXNldChyeCwgMCwgc2l6ZW9mKHN0cnVjdCBpZ2JfcnhfZGVzYykpO1xuK1xuK1x0XHRyeC1cdTAwM2VyZWFkLnBrdF9hZGRyID0gY3B1X3RvX2xlNjQoZHN0KTtcbitcdFx0cngtXHUwMDNlcmVhZC5oZHJfYWRkciA9IGNwdV90b19sZTY0KDApO1xuK1xuK1x0XHR0eC1cdTAwM2VyZWFkLmJ1ZmZlcl9hZGRyID0gY3B1X3RvX2xlNjQoc3JjKTtcbitcdFx0LypcbitcdFx0ICogQnVpbGQgYW4gYWR2YW5jZWQgZGF0YSBkZXNjcmlwdG9yIHBlciA4MjU3NiBkYXRhc2hlZXRcbitcdFx0ICogc2VjdGlvbiA3LjIuMi4zLiAgREVYVCBtYXJrcyB0aGUgZGVzY3JpcHRvciBhcyBhZHZhbmNlZFxuK1x0XHQgKiAocmVxdWlyZWQgYnkgaGFyZHdhcmUpOyBEVFlQPWRhdGEgc2VsZWN0cyB0aGUgZGF0YVxuK1x0XHQgKiBkZXNjcmlwdG9yOyBJRkNTIGFza3MgdGhlIE1BQyB0byBhcHBlbmQgdGhlIEV0aGVybmV0XG4rXHRcdCAqIEZDUyAod2l0aG91dCBpdCB0aGUgZnJhbWUgaXMgZHJvcHBlZCBhcyBtYWxmb3JtZWQpO1xuK1x0XHQgKiBFT1AgbWFya3MgZW5kIG9mIHBhY2tldC4gIERUQUxFTiBpcyB0aGUgYnVmZmVyIGxlbmd0aFxuK1x0XHQgKiBpbiBiaXRzIDE1OjAgb2YgY21kX3R5cGVfbGVuLlxuK1x0XHQgKi9cbitcdFx0dHgtXHUwMDNlcmVhZC5jbWRfdHlwZV9sZW4gPSBjcHVfdG9fbGUzMigodWludDMyX3Qpc2l6ZSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RUWVBfREFUQSB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfREVYVCB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfSUZDUyB8XG4rXHRcdFx0RTEwMDBfQURWVFhEX0RDTURfRU9QKTtcbitcdFx0LypcbitcdFx0ICogUEFZTEVOIChzZWN0aW9uIDcuMi4yLjMuMTEpIGlzIHRoZSB0b3RhbCBwYXlsb2FkIHNpemVcbitcdFx0ICogaW4gb2xpbmZvX3N0YXR1c1szMToxNF0uXG4rXHRcdCAqL1xuK1x0XHR0eC1cdTAwM2VyZWFkLm9saW5mb19zdGF0dXMgPVxuK1x0XHRcdGNwdV90b19sZTMyKCh1aW50MzJfdClzaXplIFx1MDAzY1x1MDAzYyBFMTAwMF9BRFZUWERfUEFZTEVOX1NISUZUKTtcbitcbitcdFx0aWdiLVx1MDAzZXR4X3RhaWwgPSAoaWdiLVx1MDAzZXR4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdFx0aWdiLVx1MDAzZXJ4X3RhaWwgPSAoaWdiLVx1MDAzZXJ4X3RhaWwgKyAxKSAlIFJJTkdfU0laRTtcbitcdH1cbitcbitcdGlnYl93cml0ZTMyKGlnYiwgRTEwMDBfUkRUKDApLCBpZ2ItXHUwMDNlcnhfdGFpbCk7XG4rXHRpZ2Jfd3JpdGUzMihpZ2IsIEUxMDAwX1REVCgwKSwgaWdiLVx1MDAzZXR4X3RhaWwpO1xuK31cbitcbisvKlxuKyAqIFJlc2V0IHRoZSBkZXZpY2UgdmlhIFZGSU9fREVWSUNFX1JFU0VUIChQQ0llIEZMUiBvbiB0aGUgODI1NzYpIGFuZFxuKyAqIHJlLXByb2dyYW0gaXQuICBWRklPX0RFVklDRV9SRVNFVCB0ZWFycyBkb3duIHRoZSBrZXJuZWwtc2lkZSBNU0ktWFxuKyAqIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LCBzbyByZS1hcm0gdGhlIHRyaWdnZXJcbisgKiB2aWEgdmZpb19wY2lfaXJxX3JlZW5hYmxlKCkgYmVmb3JlIHJlcHJvZ3JhbW1pbmcgc28gYW55IGNhbGxlci1jYWNoZWRcbisgKiBldmVudGZkIHJlbWFpbnMgdmFsaWQuXG4rICpcbisgKiBGTFIgY2xlYXJzIGRldmljZS1zaWRlIHN0YXRlIHRvIHBvd2VyLW9uIHJlc2V0IHZhbHVlcyAoZGF0YXNoZWV0XG4rICogNC4yLjEuNS4xOiBhIFBGIEZMUiBpcyBcImVxdWl2YWxlbnQgdG8gYSBEMC1cdTAwM2VEMy1cdTAwM2VEMCB0cmFuc2l0aW9uXCIpLCBzb1xuKyAqIEVJTVMgYW5kIEVJQ1IgY29tZSBiYWNrIGFzIDAgZnJvbSB0aGVpciByZWdpc3Rlci1kZWZpbmVkIGluaXRpYWxcbisgKiB2YWx1ZXMsIGFuZCBpZ2JfaHdfaW5pdCgpIHJlc2V0cyB0eF90YWlsL3J4X3RhaWwgdG8gMC4gIFRoZSBuZXh0XG4rICogaWdiX21lbWNweV9zdGFydCgpIHdpbGwgbWVtc2V0IGVhY2ggZGVzY3JpcHRvciBpdCB0b3VjaGVzIGJlZm9yZVxuKyAqIHN1Ym1pc3Npb24sIHNvIG5vIGV4cGxpY2l0IElNQy9FSUNSIHdyaXRlcyBvciByaW5nIG1lbXNldHMgYXJlXG4rICogbmVlZGVkIGhlcmUuXG4rICovXG4rc3RhdGljIHZvaWQgaWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHZmaW9fcGNpX2RldmljZV9yZXNldChkZXZpY2UpO1xuK1x0dmZpb19wY2lfbXNpeF9yZWVuYWJsZShkZXZpY2UsIE1TSVhfVkVDVE9SLCAxKTtcbitcdGlnYl9od19pbml0KGRldmljZSk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgaWdiX21lbWNweV93YWl0KHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbit7XG4rXHRzdHJ1Y3QgaWdiICppZ2IgPSB0b19pZ2Jfc3RhdGUoZGV2aWNlKTtcbitcdHN0cnVjdCBpZ2JfcnhfZGVzYyAqcng7XG4rXHR1MzIgc3RhdHVzID0gMDtcbitcdHUzMiBwcmV2X3RhaWw7XG4rXHRpbnQgcmV0cmllcztcbitcbitcdHByZXZfdGFpbCA9IChpZ2ItXHUwMDNlcnhfdGFpbCArIFJJTkdfU0laRSAtIDEpICUgUklOR19TSVpFO1xuK1x0cnggPSBcdTAwMjZpZ2ItXHUwMDNlcnhfcmluZ1twcmV2X3RhaWxdO1xuK1xuK1x0LypcbitcdCAqIFJlYWwgODI1NzYgaGFyZHdhcmUgcHJvY2Vzc2VzIHRoZSBkZXNjcmlwdG9yIHJpbmcgYXQgbGluZSByYXRlLlxuK1x0ICogbWF4X21lbWNweV9zaXplID0gKFJJTkdfU0laRSAtIDEpICogSUdCX01BWF9DSFVOS19TSVpFIH49IDQgTUIsXG4rXHQgKiBzcGxpdCBpbnRvIDQwOTUgMSBLQiBmcmFtZXMuICBBdCAxIEdiL3MgKH4xMjUgTUIvcykgdGhlIHdvcnN0XG4rXHQgKiB2YWxpZCBtZW1jcHkgdGFrZXMgfjMyIG1zIG9uIHRoZSB3aXJlLCBwbHVzIHBlci1mcmFtZSBwcmVhbWJsZSxcbitcdCAqIFNGRCwgSUZHIGFuZCBGQ1Mgb3ZlcmhlYWQgKH4zJSkgYW5kIGRlc2NyaXB0b3IgZmV0Y2gvd3JpdGViYWNrXG4rXHQgKiBsYXRlbmN5LiAgV2FpdCB1cCB0byB+MjAwIG1zIGJlZm9yZSBkZWNsYXJpbmcgdGhlIGRldmljZSBodW5nO1xuK1x0ICogfjZ4IHRoZSBsaW5lLXJhdGUgZmxvb3IgbGVhdmVzIGNvbWZvcnRhYmxlIGhlYWRyb29tIGZvciBob3N0XG4rXHQgKiBzY2hlZHVsaW5nIGppdHRlciB3aGlsZSBrZWVwaW5nIHRoZSBpbnRlbnRpb25hbCBpbnZhbGlkLURNQVxuK1x0ICogdGVzdHMgYm91bmRlZC5cbitcdCAqL1xuK1x0cmV0cmllcyA9IDIwMDtcbitcdHdoaWxlIChyZXRyaWVzLS0gXHUwMDNlIDApIHtcbitcdFx0c3RhdHVzID0gbGUzMl90b19jcHUoUkVBRF9PTkNFKHJ4LVx1MDAzZXdiLnN0YXR1c19lcnJvcikpO1xuK1x0XHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHRcdGJyZWFrO1xuK1x0XHR1c2xlZXAoMTAwMCk7XG4rXHR9XG4rXG4rXHRpZiAoc3RhdHVzIFx1MDAyNiAxKVxuK1x0XHQvKlxuK1x0XHQgKiBFbnN1cmUgdGhlIHRlc3QgY29kZSBkb2Vzbid0IHNwZWN1bGF0aXZlbHkgcmVhZCB0aGUgRE1BXG4rXHRcdCAqIGRlc3RpbmF0aW9uIGJ1ZmZlciBiZWZvcmUgd2UgaGF2ZSB2ZXJpZmllZCB0aGF0IHRoZVxuK1x0XHQgKiBkZXNjcmlwdG9yIHdyaXRlYmFjayBpcyBjb21wbGV0ZS5cbitcdFx0ICovXG4rXHRcdHJtYigpO1xuK1xuK1x0aWdiX2lycV9jbGVhcihpZ2IpO1xuK1xuK1x0aWdiX2lycV9lbmFibGUoaWdiKTtcbitcbitcdGlmIChzdGF0dXMgXHUwMDI2IDEpXG4rXHRcdHJldHVybiAwO1xuK1xuK1x0LypcbitcdCAqIFRoZSBkZXNjcmlwdG9yIG5ldmVyIGNvbXBsZXRlZC4gIE9uIHJlYWwgODI1NzYgaGFyZHdhcmUgdGhpc1xuK1x0ICogdHlwaWNhbGx5IGZvbGxvd3MgYSBETUEtcmVhZCBmYXVsdCBmcm9tIG9uZSBvZiB0aGUgaW50ZW50aW9uYWxcbitcdCAqIHVubWFwcGVkLUlPVkEgdGVzdHM7IHRoZSBmYXVsdCBsZWF2ZXMgdGhlIGRlc2NyaXB0b3IgZW5naW5lXG4rXHQgKiB1bmFibGUgdG8gc2VydmljZSBzdWJzZXF1ZW50IHZhbGlkIGRlc2NyaXB0b3JzLiAgQ1RSTC5SU1QgYWxvbmVcbitcdCAqIHJlaW5pdGlhbGl6ZXMgdGhlIHF1ZXVlIHJlZ2lzdGVycyBidXQgbGVhdmVzIHRoZSBlbmdpbmUgd2VkZ2VkXG4rXHQgKiBmb3IgdGhlIGN1cnJlbnQgcHJvY2Vzcywgc28gYSBicm9hZGVyIFZGSU9fREVWSUNFX1JFU0VUIChGTFIpXG4rXHQgKiBpcyByZXF1aXJlZC5cbitcdCAqL1xuK1x0aWdiX2Vycm9yX3Jlc2V0X2FuZF9yZWluaXQoZGV2aWNlKTtcbitcbitcdHJldHVybiAtRVRJTUVET1VUO1xuK31cbitcbitzdGF0aWMgdm9pZCBpZ2Jfc2VuZF9tc2koc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdHN0cnVjdCBpZ2IgKmlnYiA9IHRvX2lnYl9zdGF0ZShkZXZpY2UpO1xuK1xuK1x0aWdiX3dyaXRlMzIoaWdiLCBFMTAwMF9FSUNTLCBNU0lYX1ZFQ1RPUl9NQVNLKTtcbit9XG4rXG4rY29uc3Qgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgaWdiX29wcyA9IHtcbitcdC5uYW1lID0gXCJpZ2JcIixcbitcdC5wcm9iZSA9IGlnYl9wcm9iZSxcbitcdC5pbml0ID0gaWdiX2luaXQsXG4rXHQucmVtb3ZlID0gaWdiX3JlbW92ZSxcbitcdC5tZW1jcHlfc3RhcnQgPSBpZ2JfbWVtY3B5X3N0YXJ0LFxuK1x0Lm1lbWNweV93YWl0ID0gaWdiX21lbWNweV93YWl0LFxuK1x0LnNlbmRfbXNpID0gaWdiX3NlbmRfbXNpLFxuK307XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG5pbmRleCA1OWFjZWYzODFkMDU2Li5lMTliZDk0YjhkZDJhIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvaW5jbHVkZS9saWJ2ZmlvL3ZmaW9fcGNpX2RldmljZS5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9pbmNsdWRlL2xpYnZmaW8vdmZpb19wY2lfZGV2aWNlLmhcbkBAIC00Myw2ICs0Myw3IEBAIHZvaWQgdmZpb19wY2lfZGV2aWNlX2ZyZWUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICp2ZmlvX3BjaV9kZXZpY2VfaW5pdChjb25zdCBjaGFyICpiZGYsIHN0cnVjdCBpb21tdSAqaW9tbXUpO1xuIHZvaWQgdmZpb19wY2lfZGV2aWNlX2NsZWFudXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKTtcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpO1xuIFxuIHZvaWQgdmZpb19wY2lfY29uZmlnX2FjY2VzcyhzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIGJvb2wgd3JpdGUsXG5AQCAtODQsNiArODUsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfY21kX2NsZWFyKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTE2IGJpdHMpXG4gdm9pZCB2ZmlvX3BjaV9pcnFfZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuIFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpO1xuIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpO1xuK3ZvaWQgdmZpb19wY2lfaXJxX3JlZW5hYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdTMyIGluZGV4LFxuK1x0XHRcdCAgIHUzMiB2ZWN0b3IsIGludCBjb3VudCk7XG4gdm9pZCB2ZmlvX3BjaV9pcnFfdHJpZ2dlcihzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCwgdTMyIHZlY3Rvcik7XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIGZjbnRsX3NldF9ub25ibG9jayhpbnQgZmQpXG5AQCAtMTA4LDYgKzExMSwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuIFx0dmZpb19wY2lfaXJxX2Rpc2FibGUoZGV2aWNlLCBWRklPX1BDSV9NU0lfSVJRX0lOREVYKTtcbiB9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHZmaW9fcGNpX21zaV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0dmZpb19wY2lfaXJxX3JlZW5hYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJX0lSUV9JTkRFWCwgdmVjdG9yLCBjb3VudCk7XG4rfVxuK1xuIHN0YXRpYyBpbmxpbmUgdm9pZCB2ZmlvX3BjaV9tc2l4X2VuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4gXHRcdFx0XHRcdHUzMiB2ZWN0b3IsIGludCBjb3VudClcbiB7XG5AQCAtMTE5LDYgKzEyOCwxMiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9kaXNhYmxlKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSlcbiBcdHZmaW9fcGNpX2lycV9kaXNhYmxlKGRldmljZSwgVkZJT19QQ0lfTVNJWF9JUlFfSU5ERVgpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgdmZpb19wY2lfbXNpeF9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsXG4rXHRcdFx0XHRcdCAgdTMyIHZlY3RvciwgaW50IGNvdW50KVxuK3tcbitcdHZmaW9fcGNpX2lycV9yZWVuYWJsZShkZXZpY2UsIFZGSU9fUENJX01TSVhfSVJRX0lOREVYLCB2ZWN0b3IsIGNvdW50KTtcbit9XG4rXG4gc3RhdGljIGlubGluZSBpbnQgX190b19pb3ZhKHN0cnVjdCB2ZmlvX3BjaV9kZXZpY2UgKmRldmljZSwgdm9pZCAqdmFkZHIsIGlvdmFfdCAqaW92YSlcbiB7XG4gXHRyZXR1cm4gX19pb21tdV9odmEyaW92YShkZXZpY2UtXHUwMDNlaW9tbXUsIHZhZGRyLCBpb3ZhKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9saWJ2ZmlvLm1rIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta1xuaW5kZXggODIxMzJiNjQ4NzQ0Yi4uYmNmYTc0YWUwNDBlNyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2xpYnZmaW8ubWtcbkBAIC0xNiw2ICsxNiw3IEBAIExJQlZGSU9fQyArPSBkcml2ZXJzL2RzYS9kc2EuY1xuIGVuZGlmXG4gXG4gTElCVkZJT19DICs9IGRyaXZlcnMvbnZfZmFsY29uL252X2ZhbGNvbi5jXG4rTElCVkZJT19DICs9IGRyaXZlcnMvaWdiL2lnYi5jXG4gXG4gTElCVkZJT19PVVRQVVQgOj0gJChPVVRQVVQpL2xpYnZmaW9cbiBcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kZXZpY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5pbmRleCAyODg2ODM0M2YyYWI1Li40MDYzYTBlMmIzZGYzIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RldmljZS5jXG5AQCAtMSw1ICsxLDYgQEBcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gI2luY2x1ZGUgXHUwMDNjZGlyZW50LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NlcnJuby5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpYmdlbi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjc3RkaW50LmhcdTAwM2VcbkBAIC0xMDUsNiArMTA2LDI4IEBAIHZvaWQgdmZpb19wY2lfaXJxX2Rpc2FibGUoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCB1MzIgaW5kZXgpXG4gXHR2ZmlvX3BjaV9pcnFfc2V0KGRldmljZSwgaW5kZXgsIDAsIDAsIE5VTEwpO1xuIH1cbiBcbisvKlxuKyAqIFJlLWlzc3VlIFZGSU9fREVWSUNFX1NFVF9JUlFTIGZvciBhbiBhbHJlYWR5LWVuYWJsZWQgdmVjdG9yIHJhbmdlIHVzaW5nXG4rICogdGhlIGV4aXN0aW5nIGV2ZW50ZmRzLiAgSW50ZW5kZWQgZm9yIGRyaXZlcnMgdGhhdCBuZWVkIHRvIHJlLWFybSBkZXZpY2VcbisgKiBpbnRlcnJ1cHRzIGFmdGVyIGEgVkZJT19ERVZJQ0VfUkVTRVQsIHdoaWNoIHRlYXJzIGRvd24gdGhlIGtlcm5lbC1zaWRlXG4rICogSVJRIHRyaWdnZXIgYnV0IGxlYXZlcyB1c2VyLXNpZGUgZXZlbnRmZHMgaW50YWN0LiAgUmVjcmVhdGluZyB0aGVcbisgKiBldmVudGZkcyB3b3VsZCBpbnZhbGlkYXRlIGFueSB0ZXN0LWZpeHR1cmUgY2FjaGUgb2YgdGhlIGZkLCBzbyB0aGlzXG4rICogaGVscGVyIGRlbGliZXJhdGVseSBwcmVzZXJ2ZXMgdGhlbS5cbisgKi9cbit2b2lkIHZmaW9fcGNpX2lycV9yZWVuYWJsZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbitcdFx0XHQgICB1MzIgdmVjdG9yLCBpbnQgY291bnQpXG4re1xuK1x0aW50IGk7XG4rXG4rXHRjaGVja19zdXBwb3J0ZWRfaXJxX2luZGV4KGluZGV4KTtcbitcbitcdGZvciAoaSA9IHZlY3RvcjsgaSBcdTAwM2MgdmVjdG9yICsgY291bnQ7IGkrKylcbitcdFx0VkZJT19BU1NFUlRfR0UoZGV2aWNlLVx1MDAzZW1zaV9ldmVudGZkc1tpXSwgMCxcbitcdFx0XHQgICAgICAgXCJ2ZWN0b3IgJWQgZXZlbnRmZCBub3QgYWxsb2NhdGVkXFxuXCIsIGkpO1xuK1xuK1x0dmZpb19wY2lfaXJxX3NldChkZXZpY2UsIGluZGV4LCB2ZWN0b3IsIGNvdW50LCBkZXZpY2UtXHUwMDNlbXNpX2V2ZW50ZmRzICsgdmVjdG9yKTtcbit9XG4rXG4gc3RhdGljIHZvaWQgdmZpb19wY2lfaXJxX2dldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UsIHUzMiBpbmRleCxcbiBcdFx0XHQgICAgIHN0cnVjdCB2ZmlvX2lycV9pbmZvICppcnFfaW5mbylcbiB7XG5AQCAtMjM3LDkgKzI2MCwyNiBAQCB2b2lkIHZmaW9fcGNpX2NvbmZpZ19hY2Nlc3Moc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBib29sIHdyaXRlLFxuIFx0XHQgICAgICAgd3JpdGUgPyBcIndyaXRlIHRvXCIgOiBcInJlYWQgZnJvbVwiLCBjb25maWcpO1xuIH1cbiBcbitpbnQgX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlKVxuK3tcbitcdGlmIChpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VULCBOVUxMKSlcbitcdFx0cmV0dXJuIC1lcnJubztcbitcbitcdHJldHVybiAwO1xuK31cbitcbiB2b2lkIHZmaW9fcGNpX2RldmljZV9yZXNldChzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4ge1xuLVx0aW9jdGxfYXNzZXJ0KGRldmljZS1cdTAwM2VmZCwgVkZJT19ERVZJQ0VfUkVTRVQsIE5VTEwpO1xuK1x0aW50IHJldHJpZXMgPSAyMDtcbitcdGludCByO1xuK1xuK1x0ZG8ge1xuK1x0XHRyID0gX192ZmlvX3BjaV9kZXZpY2VfcmVzZXQoZGV2aWNlKTtcbitcdFx0aWYgKHIgPT0gLUVBR0FJTilcbitcdFx0XHR1c2xlZXAoMTAwMDApO1xuK1x0fSB3aGlsZSAociA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiByZXRyaWVzLS0gXHUwMDNlIDApO1xuK1xuK1x0VkZJT19BU1NFUlRfRVEociwgMCwgXCJpb2N0bChkZXZpY2UtXHUwMDNlZmQsIFZGSU9fREVWSUNFX1JFU0VUKSBmYWlsZWRcXG5cIik7XG4gfVxuIFxuIHZvaWQgdmZpb19wY2lfZ3JvdXBfc2V0dXAoc3RydWN0IHZmaW9fcGNpX2RldmljZSAqZGV2aWNlLCBjb25zdCBjaGFyICpiZGYpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZHJpdmVyLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuaW5kZXggMTUzYmY0YTdhMTlmOS4uNWU2NTQzNGQyMzE4YiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi92ZmlvX3BjaV9kcml2ZXIuY1xuQEAgLTYsOCArNiw4IEBAXG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGRzYV9vcHM7XG4gZXh0ZXJuIHN0cnVjdCB2ZmlvX3BjaV9kcml2ZXJfb3BzIGlvYXRfb3BzO1xuICNlbmRpZlxuLVxuIGV4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBudl9mYWxjb25fb3BzO1xuK2V4dGVybiBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyBpZ2Jfb3BzO1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZpb19wY2lfZHJpdmVyX29wcyAqZHJpdmVyX29wc1tdID0ge1xuICNpZmRlZiBfX3g4Nl82NF9fXG5AQCAtMTUsNiArMTUsNyBAQCBzdGF0aWMgc3RydWN0IHZmaW9fcGNpX2RyaXZlcl9vcHMgKmRyaXZlcl9vcHNbXSA9IHtcbiBcdFx1MDAyNmlvYXRfb3BzLFxuICNlbmRpZlxuIFx0XHUwMDI2bnZfZmFsY29uX29wcyxcbitcdFx1MDAyNmlnYl9vcHMsXG4gfTtcbiBcbiB2b2lkIHZmaW9fcGNpX2RyaXZlcl9wcm9iZShzdHJ1Y3QgdmZpb19wY2lfZGV2aWNlICpkZXZpY2UpXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQwMDo0MDozMy4wMTc5Njg5MjNaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDgyNzEzMzY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoIGZvciBGdXp6aW5nIFdvcnRoaW5lc3MqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFkZGluZyBhbiBgaWdiYCBkcml2ZXIgdG8gdGhlIFZGSU8gc2VsZnRlc3RzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSBhc3Nlc3MgaXRzIGZ1enppbmcgd29ydGhpbmVzcy4gVGhlIHBhdGNoIHRvdWNoZXMgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2AuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZzogc2VsZnRlc3RzIGFyZSAqdXNlci1zcGFjZSouIFRoZXkncmUgZGVzaWduZWQgdG8gdmFsaWRhdGUga2VybmVsIGJlaGF2aW9yLCBidXQgYXJlbid0IHBhcnQgb2YgdGhlIGNvcmUga2VybmVsIGl0c2VsZi5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBzY29wZS4gVGhlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgLCBhbmQgc3VwcG9ydGluZyBmaWxlcy4gQWxyaWdodCwgc28sIHRoZXNlIGZpbGVzIGFyZTpcblxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF84MjU3NS5oYFxuKiAgIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvL2xpYi9kcml2ZXJzL2lnYi9lMTAwMF9kZWZpbmVzLmhgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2RyaXZlcnMvaWdiL2UxMDAwX3JlZ3MuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvZHJpdmVycy9pZ2IvaWdiLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL2luY2x1ZGUvbGlidmZpby92ZmlvX3BjaV9kZXZpY2UuaGBcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvbGlidmZpby5ta2BcbiogICBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby9saWIvdmZpb19wY2lfZGV2aWNlLmNgXG4qICAgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3ZmaW8vbGliL3ZmaW9fcGNpX2RyaXZlci5jYFxuXG5Pa2F5LCBzbyBub25lIG9mIHRoZXNlIGxvb2sgbGlrZSB0aGV5J3JlIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLiBJIGhhdmUgdG8gbG9vayBjbG9zZWx5IGJlY2F1c2Ugc2VsZnRlc3RzIG9mdGVuIG5lZWQgdG8gbW9jayBvciBpbnRlcmFjdCB3aXRoIGtlcm5lbCBjb21wb25lbnRzLiBIb3dldmVyLCB0aGlzIGxvb2tzIHByZXR0eSBjb250YWluZWQuIFRoZSBwcm9tcHQgZXhwbGljaXRseSBzYXlzIHRvIGV2YWx1YXRlIHJlYWNoYWJsZSBrZXJuZWwgY29kZSwgYW5kIHNpbmNlIHRoaXMgaXMgYWxsIGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9gLCBpdCBkb2Vzbid0IG1vZGlmeSB0aGUga2VybmVsLlxuXG5UaGVyZWZvcmUsIHRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHNob3VsZCBiZSBzZXQgdG8gYGZhbHNlYCBiZWNhdXNlIHRoZSBwYXRjaCBvbmx5IGFkZHMgc2VsZnRlc3QgY29kZS4gTXkgcmVhc29uaW5nOiB0aGUgY2hhbmdlcyBhcmUgY29uZmluZWQgdG8gdXNlci1zcGFjZSBzZWxmdGVzdHMsIGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBrZXJuZWwgaXRzZWxmLiBXZSBhcmUgZ29vZCB0byBjYWxsIHNldC1yZXN1bHRzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzExMywiT3V0cHV0VG9rZW5zIjo2NywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkyMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDAwOjQwOjQzLjg0NTEwNDkyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvdmZpby8pIGFuZCBkb2VzIG5vdCBhbHRlciBhbnkgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIHVzZXItc3BhY2Ugc2VsZnRlc3RzICh0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy92ZmlvLykgYW5kIGRvZXMgbm90IGFsdGVyIGFueSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflow742sd[1] Phase: Running StartedAt: 2026-08-05 00:40:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflow742sd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-05 00:40:54 +0000 UTC FinishedAt: 2026-08-05 00:40: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,}