Name: series-workflowplwzd Phase: Failed StartedAt: 2026-09-11 00:11:23 +0000 UTC FinishedAt: 2026-09-11 00:14:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplwzd[0] Phase: Succeeded StartedAt: 2026-09-11 00:11:23 +0000 UTC FinishedAt: 2026-09-11 00:13:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplwzd[0].run-triage Phase: Succeeded StartedAt: 2026-09-11 00:11:23 +0000 UTC FinishedAt: 2026-09-11 00:13: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+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2QyMzI0MDIzOWE0ZWY5MjFjNWUxM2FmYTc4ZDNmNDlkZjIxNGM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6MTI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcbkBAIC0zNCw4ICYjNDM7MzQsNiBAQFxuICNkZWZpbmUgVERNX1BQUE9IVF9TTElDX01BWElOXG4gI2RlZmluZSBSWF9CRF9FUlJPUlMgKFJfQ0RfUyB8IFJfT1ZfUyB8IFJfQ1JfUyB8IFJfQUJfUyB8IFJfTk9fUyB8IFJfTEdfUylcbiBcbi1zdGF0aWMgaW50IHVoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLVxuIHN0YXRpYyBzdHJ1Y3QgdWNjX3RkbV9pbmZvIHV0ZG1fcHJpbWFyeV9pbmZvID0ge1xuIFx0LnVmX2luZm8gPSB7XG4gXHRcdC50c2EgPSAwLFxuQEAgLTcwNSwxMiAmIzQzOzcwMywxOCBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiBcdHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2ID0gaGRsYy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHVjY190ZG0gKnV0ZG0gPSBwcml2LVx1MDAzZXV0ZG07XG4tXHRpbnQgcmMgPSAwO1xuJiM0MztcdGludCByYztcbiBcbiBcdGlmIChwcml2LVx1MDAzZWhkbGNfYnVzeSAhPSAxKSB7XG4mIzQzO1x0XHRyYyA9IGhkbGNfb3BlbihkZXYpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0XHRpZiAocmVxdWVzdF9pcnEocHJpdi1cdTAwM2V1dF9pbmZvLVx1MDAzZXVmX2luZm8uaXJxLFxuLVx0XHRcdFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFwmIzM0O2hkbGNcJiMzNDssIHByaXYpKVxuJiM0MztcdFx0XHRcdHVjY19oZGxjX2lycV9oYW5kbGVyLCAwLCBcJiMzNDtoZGxjXCYjMzQ7LCBwcml2KSkge1xuJiM0MztcdFx0XHRoZGxjX2Nsb3NlKGRldik7XG4gXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soXG4gXHRcdFx0XHRcdHByaXYtXHUwMDNldXRfaW5mby1cdTAwM2V1Zl9pbmZvLnVjY19udW0pO1xuQEAgLTcyOSwxMyAmIzQzOzczMyw5IEBAIHN0YXRpYyBpbnQgdWhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0XHRuZXRkZXZfcmVzZXRfcXVldWUoZGV2KTtcbiBcdFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbi1cbi1cdFx0cmMgPSBoZGxjX29wZW4oZGV2KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHVoZGxjX2Nsb3NlKGRldik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcmM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVoZGxjX21lbWNsZWFuKHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2KVxuQEAgLTg4OCw2ICYjNDM7ODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcocHJpdi1cdTAwM2VuZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtXHUwMDNlbmRldik7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbiBcbkBAIC04OTcsMTAgJiM0Mzs5MDEsNiBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cHJpdi1cdTAwM2VndW1yID0gaW9yZWFkMzJiZShcdTAwMjZ1Zl9yZWdzLVx1MDAzZWd1bXIpO1xuIFx0cHJpdi1cdTAwM2VndWVtciA9IGlvcmVhZDgoXHUwMDI2dWZfcmVncy1cdTAwM2VndWVtcik7XG4gXG4tXHRwcml2LVx1MDAzZXVjY19wcmFtX2JhayA9IGttYWxsb2Nfb2JqKCpwcml2LVx1MDAzZXVjY19wcmFtX2Jhayk7XG4tXHRpZiAoIXByaXYtXHUwMDNldWNjX3ByYW1fYmFrKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbiBcdC8qIGJhY2t1cCBIRExDIHBhcmFtZXRlciAqL1xuIFx0bWVtY3B5X2Zyb21pbyhwcml2LVx1MDAzZXVjY19wcmFtX2JhaywgcHJpdi1cdTAwM2V1Y2NfcHJhbSxcbiBcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1Y2NfaGRsY19wYXJhbSkpO1xuQEAgLTEyNTUsNiAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4mIzQzO1x0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVx1MDAzZW5kZXYpO1xuJiM0MztcbiBcdHVoZGxjX21lbWNsZWFuKHByaXYpO1xuIFxuIFx0aWYgKHByaXYtXHUwMDNldXRkbSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpX3JlZ3MpIHtcbkBAIC0xMjY2LDYgJiM0MzsxMjY4LDcgQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdGlvdW5tYXAocHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpcmFtKTtcbiBcdFx0cHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpcmFtID0gTlVMTDtcbiBcdH1cbiYjNDM7XHRmcmVlX25ldGRldihwcml2LVx1MDAzZW5kZXYpO1xuIFx0a2ZyZWUocHJpdik7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jXG5pbmRleCBjYmVkMTBiMWQ4NjJlLi5hMzhmOTBkMzAwNmVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbiB2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRydG5sX2xvY2soKTtcbiYjNDM7XHRkZXZfY2xvc2UoZGV2KTtcbiBcdGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3ZDIzMjQwMjM5YTRlZjkyMWM1ZTEzYWZhNzhkM2Y0OWRmMjE0YzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMDoxMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYwppbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jCkBAIC0zNCw4ICYjNDM7MzQsNiBAQAogI2RlZmluZSBURE1fUFBQT0hUX1NMSUNfTUFYSU4KICNkZWZpbmUgUlhfQkRfRVJST1JTIChSX0NEX1MgfCBSX09WX1MgfCBSX0NSX1MgfCBSX0FCX1MgfCBSX05PX1MgfCBSX0xHX1MpCiAKLXN0YXRpYyBpbnQgdWhkbGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KIHN0YXRpYyBzdHJ1Y3QgdWNjX3RkbV9pbmZvIHV0ZG1fcHJpbWFyeV9pbmZvID0gewogCS51Zl9pbmZvID0gewogCQkudHNhID0gMCwKQEAgLTcwNSwxMiAmIzQzOzcwMywxOCBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBoZGxjLSZndDtwcml2OwogCXN0cnVjdCB1Y2NfdGRtICp1dGRtID0gcHJpdi0mZ3Q7dXRkbTsKLQlpbnQgcmMgPSAwOwomIzQzOwlpbnQgcmM7CiAKIAlpZiAocHJpdi0mZ3Q7aGRsY19idXN5ICE9IDEpIHsKJiM0MzsJCXJjID0gaGRsY19vcGVuKGRldik7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwogCQlpZiAocmVxdWVzdF9pcnEocHJpdi0mZ3Q7dXRfaW5mby0mZ3Q7dWZfaW5mby5pcnEsCi0JCQkJdWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsICYjMzQ7aGRsYyYjMzQ7LCBwcml2KSkKJiM0MzsJCQkJdWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsICYjMzQ7aGRsYyYjMzQ7LCBwcml2KSkgewomIzQzOwkJCWhkbGNfY2xvc2UoZGV2KTsKIAkJCXJldHVybiAtRU5PREVWOwomIzQzOwkJfQogCiAJCWNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soCiAJCQkJCXByaXYtJmd0O3V0X2luZm8tJmd0O3VmX2luZm8udWNjX251bSk7CkBAIC03MjksMTMgJiM0Mzs3MzMsOSBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpKTsKIAkJbmV0ZGV2X3Jlc2V0X3F1ZXVlKGRldik7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQkJcmMgPSBoZGxjX29wZW4oZGV2KTsKLQkJaWYgKHJjKQotCQkJdWhkbGNfY2xvc2UoZGV2KTsKIAl9CiAKLQlyZXR1cm4gcmM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB1aGRsY19tZW1jbGVhbihzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdikKQEAgLTg4OCw2ICYjNDM7ODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHByaXYtJmd0O25kZXYpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlwcml2LSZndDt1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi0mZ3Q7dWNjX3ByYW1fYmFrKTsKJiM0MzsJaWYgKCFwcml2LSZndDt1Y2NfcHJhbV9iYWspCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtJmd0O25kZXYpOwogCW5hcGlfZGlzYWJsZSgmYW1wO3ByaXYtJmd0O25hcGkpOwogCkBAIC04OTcsMTAgJiM0Mzs5MDEsNiBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCXByaXYtJmd0O2d1bXIgPSBpb3JlYWQzMmJlKCZhbXA7dWZfcmVncy0mZ3Q7Z3Vtcik7CiAJcHJpdi0mZ3Q7Z3VlbXIgPSBpb3JlYWQ4KCZhbXA7dWZfcmVncy0mZ3Q7Z3VlbXIpOwogCi0JcHJpdi0mZ3Q7dWNjX3ByYW1fYmFrID0ga21hbGxvY19vYmooKnByaXYtJmd0O3VjY19wcmFtX2Jhayk7Ci0JaWYgKCFwcml2LSZndDt1Y2NfcHJhbV9iYWspCi0JCXJldHVybiAtRU5PTUVNOwotCiAJLyogYmFja3VwIEhETEMgcGFyYW1ldGVyICovCiAJbWVtY3B5X2Zyb21pbyhwcml2LSZndDt1Y2NfcHJhbV9iYWssIHByaXYtJmd0O3VjY19wcmFtLAogCQkgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7CkBAIC0xMjU1LDYgJiM0MzsxMjU1LDggQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi0mZ3Q7bmRldik7CiYjNDM7CiAJdWhkbGNfbWVtY2xlYW4ocHJpdik7CiAKIAlpZiAocHJpdi0mZ3Q7dXRkbSAmYW1wOyZhbXA7IHByaXYtJmd0O3V0ZG0tJmd0O3NpX3JlZ3MpIHsKQEAgLTEyNjYsNiAmIzQzOzEyNjgsNyBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJaW91bm1hcChwcml2LSZndDt1dGRtLSZndDtzaXJhbSk7CiAJCXByaXYtJmd0O3V0ZG0tJmd0O3NpcmFtID0gTlVMTDsKIAl9CiYjNDM7CWZyZWVfbmV0ZGV2KHByaXYtJmd0O25kZXYpOwogCWtmcmVlKHByaXYpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7VUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IGNiZWQxMGIxZDg2MmUuLmEzOGY5MGQzMDA2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpOwogdm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcnRubF9sb2NrKCk7CiYjNDM7CWRldl9jbG9zZShkZXYpOwogCWRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlydG5sX3VubG9jaygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei4gRmlyc3QsIHRoZSB0YXJnZXQgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSB3ZSYjMzk7cmUgZm9jdXNlZCBvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBmdW5jdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY2Agd2hpY2ggbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gVGhlbiwgd2UgaGF2ZSBgZHJpdmVycy9uZXQvd2FuL2hkbGMuY2AsIHNwZWNpZmljYWxseSwgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgd2hlcmUgYSBgZGV2X2Nsb3NlKGRldik7YCBjYWxsIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBgZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtgLgoKTm93LCBJIG5lZWQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGVzZSBmaWxlcyBhY3R1YWxseSAqZG8qLiBgZnNsX3VjY19oZGxjLmNgIGFwcGVhcnMgdG8gYmUgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIFBvd2VyUEMvRnJlZXNjYWxlIFNvQyBwbGF0Zm9ybXMuIGBoZGxjLmNgIHNlZW1zIHRvIGJlIHRoZSBnZW5lcmljIEhETEMgbGF5ZXIsIHdoaWNoIG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3RpbmcgdG8gZnV6eiBpZiBpdCYjMzk7cyBicm9hZGx5IHVzZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzOiBhcmUgZWl0aGVyIG9mIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIG9uIGFuIGFtZDY0IHN5c3RlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L3dhbi9gLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2hhbmNlIHRoZXkmIzM5O3JlIGNvbXBpbGVkIGluIG9yIG1hZGUgYXZhaWxhYmxlIG9uIGFtZDY0LiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhvc2UgS2NvbmZpZyBmaWxlcyB0byBmaWd1cmUgdGhpcyBvdXQuIElmIHRoZXkmIzM5O3JlIG5vdCwgdGhlbiB3ZSBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qSERMQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4vS2NvbmZpZz0yND1pZiBXQU5cbi0tXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yNi0jIEdlbmVyaWMgSERMQ1xuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6Mjc6Y29uZmlnIEhETENcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTI4LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBIRExDIGxheWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDMtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo0NDpjb25maWcgSERMQ19SQVdcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7UmF3IEhETEMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTUxLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NTI6Y29uZmlnIEhETENfUkFXX0VUSFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgSERMQyBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTYyLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NjM6Y29uZmlnIEhETENfQ0lTQ09cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gSERMQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzAtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo3MTpjb25maWcgSERMQ19GUlxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzItXHR0cmlzdGF0ZSBcJiMzNDtGcmFtZSBSZWxheSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzgtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo3OTpjb25maWcgSERMQ19QUFBcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7U3luY2hyb25vdXMgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTg2LVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6ODc6Y29uZmlnIEhETENfWDI1XG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O1guMjUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnPTE4MT1jb25maWcgRkFSU1lOQ1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTE5OS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIwMDpjb25maWcgRlNMX1FNQ19IRExDXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIxMjpjb25maWcgRlNMX1VDQ19IRExDXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsOgoKKipEZWx2aW5nIGludG8gSERMQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgSERMQyBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gRnJlZXNjYWxlJiMzOTtzIFVDQyBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9uZXQvd2FuL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igd2lkZS1hcmVhIG5ldHdvcmsgZHJpdmVycywgaW5jbHVkaW5nIEhETEMsIHNob3VsZCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGRlYWxpbmcgd2l0aCBgSERMQ2AgaW4gZ2VuZXJhbCBhbmQgdGhlbiB6b29tIGluIG9uIGFueSBvcHRpb25zIHNwZWNpZmljIHRvIGBGU0xfVUNDX0hETENgLiBUaGUgYEZTTF9VQ0NgIGlzLCBvZiBjb3Vyc2UsIHRoZSBGcmVlc2NhbGUgVW5pdmVyc2FsIENvbW11bmljYXRpb25zIENvbnRyb2xsZXIsIGEgcGllY2Ugb2YgaGFyZHdhcmUgSSYjMzk7dmUgd29ya2VkIHdpdGggZXh0ZW5zaXZlbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQgZXhwbGFpbmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLCBhbmQgbGlrZWx5IHNvbWUgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSB3aWxsIHJlZmVyZW5jZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBlcmhhcHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aG9zZSByZWxhdGlvbnNoaXBzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGluIG9yZGVyIHRvIGVuYWJsZSBGcmVlc2NhbGUgSERMQyBzdXBwb3J0IGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaG9pY2VzIHdpbGwgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgd2FuIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFdBTlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtXYW4gaW50ZXJmYWNlcyBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFdpZGUgQXJlYSBOZXR3b3JrcyAoV0FOcyksIHN1Y2ggYXMgWC4yNSwgRnJhbWUgUmVsYXkgYW5kIGxlYXNlZFxuICAxMDpcdFx0ICBsaW5lcywgYXJlIHVzZWQgdG8gaW50ZXJjb25uZWN0IExvY2FsIEFyZWEgTmV0d29ya3MgKExBTnMpIG92ZXIgdmFzdFxuICAxMTpcdFx0ICBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzIHNpZ25pZmljYW50bHkgaGlnaGVyIHRoYW4gdGhvc2VcbiAgMTI6XHRcdCAgYWNoaWV2YWJsZSB3aXRoIGNvbW1vbmx5IHVzZWQgYXN5bmNocm9ub3VzIG1vZGVtIGNvbm5lY3Rpb25zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBVc3VhbGx5LCBhIHF1aXRlIGV4cGVuc2l2ZSBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGEgYFdBTiByb3V0ZXImIzM5OyBpc1xuICAxNTpcdFx0ICBuZWVkZWQgdG8gY29ubmVjdCB0byBhIFdBTi4gQXMgYW4gYWx0ZXJuYXRpdmUsIGEgcmVsYXRpdmVseVxuICAxNjpcdFx0ICBpbmV4cGVuc2l2ZSBXQU4gaW50ZXJmYWNlIGNhcmQgY2FuIGFsbG93IHlvdXIgTGludXggYm94IHRvIGRpcmVjdGx5XG4gIDE3Olx0XHQgIGNvbm5lY3QgdG8gYSBXQU4uXG4gIDE4Olx0XG4gIDE5Olx0XHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBjYXJkcyBhbmQgd2lzaCB0byB1c2UgaXQgdW5kZXIgTGludXgsXG4gIDIwOlx0XHQgIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gdGhlIFdBTiBkcml2ZXIgZm9yIHlvdXIgY2FyZC5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjM6XHRcbiAgMjQ6XHRpZiBXQU5cbiAgMjU6XHRcbiAgMjY6XHQjIEdlbmVyaWMgSERMQ1xuICAyNzpcdGNvbmZpZyBIRExDXG4gIDI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEhETEMgbGF5ZXJcJiMzNDtcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgU2F5IFkgdG8gdGhpcyBvcHRpb24gaWYgeW91ciBMaW51eCBib3ggY29udGFpbnMgYSBXQU4gKFdpZGUgQXJlYVxuICAzMTpcdFx0ICBOZXR3b3JrKSBjYXJkIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciBhbmQgeW91IGFyZSBwbGFubmluZyB0b1xuICAzMjpcdFx0ICBjb25uZWN0IHRoZSBib3ggdG8gYSBXQU4uXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydGluZyBzb2Z0d2FyZSBmcm9tXG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2hkbGMvXHUwMDNlLlxuICAzNjpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyByYXcgSERMQywgQ2lzY28gSERMQywgRnJhbWVcbiAgMzc6XHRcdCAgUmVsYXksIHN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGFuZCBYLjI1LlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhkbGMuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIEhETENfUkFXXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSYXcgSERMQyBzdXBwb3J0XCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIEhETENcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBIRExDX1JBV19FVEhcbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O1JhdyBIRExDIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIEhETENcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIEV0aGVybmV0IGRldmljZSBlbXVsYXRpb25cbiAgNTc6XHRcdCAgb3ZlciBXQU4gY29ubmVjdGlvbnMuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIFlvdSB3aWxsIG5lZWQgaXQgZm9yIEV0aGVybmV0IG92ZXIgSERMQyBicmlkZ2VzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBIRExDX0NJU0NPXG4gIDY0Olx0XHR0cmlzdGF0ZSBcJiMzNDtDaXNjbyBIRExDIHN1cHBvcnRcJiMzNDtcbiAgNjU6XHRcdGRlcGVuZHMgb24gSERMQ1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgQ2lzY28gSERMQyBvdmVyIFdBTiBjb25uZWN0aW9ucy5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzA6XHRcbiAgNzE6XHRjb25maWcgSERMQ19GUlxuICA3MjpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgUmVsYXkgc3VwcG9ydFwmIzM0O1xuICA3MzpcdFx0ZGVwZW5kcyBvbiBIRExDXG4gIDc0Olx0XHRoZWxwXG4gIDc1Olx0XHQgIEdlbmVyaWMgSERMQyBkcml2ZXIgc3VwcG9ydGluZyBGcmFtZSBSZWxheSBvdmVyIFdBTiBjb25uZWN0aW9ucy5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgSERMQ19QUFBcbiAgODA6XHRcdHRyaXN0YXRlIFwmIzM0O1N5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gSERMQ1xuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgUFBQIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuICA4NDpcdFxuICA4NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NjpcdFxuICA4NzpcdGNvbmZpZyBIRExDX1gyNVxuICA4ODpcdFx0dHJpc3RhdGUgXCYjMzQ7WC4yNSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDg5Olx0XHRkZXBlbmRzIG9uIEhETEMgXHUwMDI2XHUwMDI2IChMQVBCPW0gXHUwMDI2XHUwMDI2IEhETEM9bSB8fCBMQVBCPXkpXG4gIDkwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgT3ZlcnNpZ2h0KioKCkhtbSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY3Jvc3MtY2hlY2tpbmcgc29tZXRoaW5nIGhlcmUuIEkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCB3aGlsZSBJIHdhcyBhdCBpdCwgaXQgb2NjdXJyZWQgdG8gbWUgdGhhdCB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgYEZTTF9VQ0NfSERMQ2Agd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2FuL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24gdGhlcmUsIGdpdmVuIHRoZSBjb250ZXh0IHdlIGFyZSBleGFtaW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9ucywgYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdGNvbmZpZyBGU0xfUU1DX0hETENcbiAyMDE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRTUMgSERMQyBzdXBwb3J0XCYjMzQ7XG4gMjAyOlx0XHRkZXBlbmRzIG9uIEhETENcbiAyMDM6XHRcdGRlcGVuZHMgb24gQ1BNX1FNQ1xuIDIwNDpcdFx0aGVscFxuIDIwNTpcdFx0ICBIRExDIHN1cHBvcnQgdXNpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBNdWx0aWNoYW5uZWwgQ29udHJvbGxlciAoUU1DKS5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMjA4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmc2xfcW1jX2hkbGMuXG4gMjA5Olx0XG4gMjEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjExOlx0XG4gMjEyOlx0Y29uZmlnIEZTTF9VQ0NfSERMQ1xuIDIxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHN1cHBvcnRcJiMzNDtcbiAyMTQ6XHRcdGRlcGVuZHMgb24gSERMQ1xuIDIxNTpcdFx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkVcbiAyMTY6XHRcdGhlbHBcbiAyMTc6XHRcdCAgRHJpdmVyIGZvciBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgY29udHJvbGxlci4gVGhlIGRyaXZlclxuIDIxODpcdFx0ICBzdXBwb3J0cyBIRExDIGluIE5NU0kgYW5kIFRETSBtb2RlLlxuIDIxOTpcdFxuIDIyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAyMjE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZzbF91Y2NfaGRsYy5cbiAyMjI6XHRcbiAyMjM6XHRjb25maWcgU0xJQ19EUzI2NTIyXG4gMjI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtTbGljIE1heGltIGRzMjY1MjIgY2FyZCBzdXBwb3J0XCYjMzQ7XG4gMjI1Olx0XHRkZXBlbmRzIG9uIFNQSVxuIDIyNjpcdFx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTVhDIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbiAyMjc6XHRcdHNlbGVjdCBCSVRSRVZFUlNFXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIGFuZCBjb25maWd1cmVzIHRoZSBzbGljIG1heGltIGNhcmRcbiAyMzA6XHRcdCAgaW4gVDEgb3IgRTEgbW9kZS5cbiAyMzE6XHRcbiAyMzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMjMzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbGljX2RzMjY1MjIuXG4gMjM0Olx0XG4gMjM1Olx0Y29uZmlnIElYUDRYWF9IU1NcbiAyMzY6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIElYUDR4eCBIU1MgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0KSBzdXBwb3J0XCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhETEMgXHUwMDI2XHUwMDI2IElYUDRYWF9OUEUgXHUwMDI2XHUwMDI2IElYUDRYWF9RTUdSXG4gMjM4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSVhQNFhYIFx1MDAyNlx1MDAyNiBPRlxuIDIzOTpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY2lwaGVyaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUVVJQ0NfRU5HSU5FKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgcmVxdWlyZW1lbnRzIGZvciBgUVVJQ0NfRU5HSU5FYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gcmlnaHQgbm93IGlzIHdoZXRoZXIgaXQgaGluZ2VzIG9uIGEgUG93ZXJQQyAob3Igc2ltaWxhciBhcmNoaXRlY3R1cmUpIGVudmlyb25tZW50LCBvciBpZiBpdCYjMzk7cyB0aWVkIHRvIGEgYENPTVBJTEVfVEVTVGAgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXksIGFzIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggZGVwbG95bWVudCBhbmQgdGVzdGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBpbmNsdXNpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBoZXJlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBRVUlDQ19FTkdJTkVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXRzZWxmIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVUlDQ19FTkdJTkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNS1cbmRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnOjY6Y29uZmlnIFFVSUNDX0VOR0lORVxuZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEZyZWVzY2FsZSBRRSBEcml2ZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgRnJlZXNjYWxlIFFFIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBteSBiZWFyaW5ncyBhbmQgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgc2V0IHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhpcyBkcml2ZXIgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgdGhpcyBkcml2ZXIgaGFzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBRRSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgYXJjaGl0ZWN0dXJlLCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgaXQgc3VwcG9ydHMsIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBUaW1lIHRvIGdldCBzdGFydGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUUUgQ29tbXVuaWNhdGlvbiBvcHRpb25zXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBRVUlDQ19FTkdJTkVcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19JT01FTVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBQUEMgfHwgQVJNIHx8IEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuICAxMDpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhlIFFVSUNDIEVuZ2luZSAoUUUpIGlzIGEgbmV3IGdlbmVyYXRpb24gb2YgY29tbXVuaWNhdGlvbnNcbiAgMTQ6XHRcdCAgY29wcm9jZXNzb3JzIG9uIEZyZWVzY2FsZSBlbWJlZGRlZCBDUFVzIChha2luIHRvIENQTSBpbiBvbGRlciBjaGlwcykuXG4gIDE1Olx0XHQgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHlvdSB3aXNoIHRvIGJ1aWxkIGEga2VybmVsXG4gIDE2Olx0XHQgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBVQ0NfU0xPV1xuICAxOTpcdFx0Ym9vbFxuICAyMDpcdFx0ZGVmYXVsdCB5IGlmIFNFUklBTF9RRSB8fCAoQ1BNX1FNQyBcdTAwMjZcdTAwMjYgUVVJQ0NfRU5HSU5FKVxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0Mgc2xvd1xuICAyMzpcdFx0ICBwcm90b2NvbHM6IFVBUlQsIEJJU1lOQywgUU1DXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFVDQ19GQVNUXG4gIDI2Olx0XHRib29sXG4gIDI3Olx0XHRkZWZhdWx0IHkgaWYgVUNDX0dFVEggfHwgUUVfVERNXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHFlX2xpYiBzdXBwb3J0IHRvIFVDQyBmYXN0XG4gIDMwOlx0XHQgIHByb3RvY29sczogSERMQywgRXRoZXJuZXQsIEFUTSwgdHJhbnNwYXJlbnRcbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVUNDXG4gIDMzOlx0XHRib29sXG4gIDM0Olx0XHRkZWZhdWx0IHkgaWYgVUNDX0ZBU1QgfHwgVUNDX1NMT1cgfHwgKENQTV9UU0EgXHUwMDI2XHUwMDI2IFFVSUNDX0VOR0lORSlcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgQ1BNX1RTQVxuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1BNL1FFIFRTQSBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU1cbiAgMzk6XHRcdGRlcGVuZHMgb24gQ1BNMSB8fCBRVUlDQ19FTkdJTkUgfHwgXFxcbiAgNDA6XHRcdFx0ICAgKChDUE0gfHwgUVVJQ0NfRU5HSU5FKSBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBEcml2ZXIqKgoKT2theSwgc28gYGZzbF91Y2NfaGRsY2AgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEhETEMgY29udHJvbGxlciBvbiBGcmVlc2NhbGUmIzM5O3MgUVVJQ0MgRW5naW5lLiBUaGF0IG1ha2VzIHNlbnNlLCBRVUlDQyBFbmdpbmVzIGFyZSBlbWJlZGRlZCBTb0NzLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlci4uLiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2VuZXJhbCBIRExDIGZyYW1ld29yayBpbnRlcmFjdHMgd2l0aCB0aGlzIHNwZWNpZmljIFFVSUNDIEVuZ2luZSBkcml2ZXIuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCB3aXRoaW4gYGhkbGMuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBjbGVhbmluZyB1cCByZXNvdXJjZXMsIHNvIEkgc2hvdWxkIHNlZSBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgKnVzaW5nKiBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscywgZGV0ZXJtaW5lIGhvdyBIRExDIGRldmljZXMgYXJlIGJlaW5nIG1hbmFnZWQuCgpUaGUgcmVhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKmNyZWF0ZSogdGhlc2UgSERMQyBkZXZpY2VzIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgb24gYW4gYW1kNjQgbWFjaGluZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgY2FuIHRlc3QsIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLgoKUmlnaHQsIHNvIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIGNhbGxlcnMgb2YgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBidXQgYWxzbyBgYWxsb2NfaGRsY2RldmAgYW5kIGByZWdpc3Rlcl9oZGxjX2RldmljZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgdGhpcyBRVUlDQyBFbmdpbmUgZHJpdmVyIGludGVncmF0ZXMsIGlmIGF0IGFsbCwgd2l0aCBhbnkgZ2VuZXJhbCBIRExDIGZyYW1ld29yay4gR290dGEgcHVsbCB1cCBteSB0b29scyBhbmQgc2VhcmNoIGZvciBhbGwgcmVmZXJlbmNlcyB0byB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlfHJlZ2lzdGVyX2hkbGNfZGV2aWNlfGFsbG9jX2hkbGNkZXYpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmM9Mjk5PXN0YXRpYyBpbnQgX19pbml0IGMxMDFfcnVuKHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIHdpbmJhc2UpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy0zMTktXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjMyMDpcdGNhcmQtXHUwMDNlZGV2ID0gYWxsb2NfaGRsY2RldihjYXJkKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzIxLVx0aWYgKCFjYXJkLVx1MDAzZWRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzcwLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYzozNzE6XHRyZXN1bHQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy0zNzItXHRpZiAocmVzdWx0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYz00MjA9c3RhdGljIHZvaWQgX19leGl0IGMxMDFfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVx0XHRjYXJkID0gY2FyZC1cdTAwM2VuZXh0X2NhcmQ7XG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjQyODpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI5LVx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjI5NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMjk2Olx0XHRlcnIgPSByZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIyOTctXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDAtXHRcdFx0d2hpbGUgKGktLSlcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM6MjMwMTpcdFx0XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMzAyLVx0XHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMzI2PWZzdF9hZGRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyNDE1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfaGRsY2RldihcdTAwMjZjYXJkLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNi1cdFx0aGRsY19kZXZpY2UgKmhkbGM7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA2LVx0Zm9yIChpID0gMCA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzIDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA4LWluaXRfY2FyZF9mYWlsOlxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTI1NDAtXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzA2PXN0YXRpYyBpbnQgcW1jX2hkbGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzUxLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc1MjpcdHFtY19oZGxjLVx1MDAzZW5ldGRldiA9IGFsbG9jX2hkbGNkZXYocW1jX2hkbGMpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc1My1cdGlmICghcW1jX2hkbGMtXHUwMDNlbmV0ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc2My1cdHFtY19oZGxjLVx1MDAzZW5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2cW1jX2hkbGNfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYzo3NjQ6XHRyZXQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc2NS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzgwPXN0YXRpYyB2b2lkIHFtY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6Nzg0Olx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc4NS1cdGZyZWVfbmV0ZGV2KHFtY19oZGxjLVx1MDAzZW5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTExMDc9c3RhdGljIGludCB1Y2NfaGRsY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjE0LVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jOjEyMTU6XHRkZXYgPSBhbGxvY19oZGxjZGV2KHVoZGxjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyMTYtXHRpZiAoIWRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjI5LVx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KGRldiwgXHUwMDI2dWhkbGNfcHJpdi1cdTAwM2VuYXBpLCB1Y2NfaGRsY19wb2xsLCAzMik7XG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTIzMDpcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIzMS1cdFx0cmV0ID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTEyNTQ9c3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTctXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTI1ODpcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU5LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM9MjQxPXN0YXRpYyB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1MC1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjUxOnN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oZGxjZGV2KHZvaWQgKnByaXYpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1Mi17XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNjAtfVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNjE6RVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNjM6dm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI2NC17XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNzAtfVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNzE6RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKTtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM9MTM4Nz1zdGF0aWMgaW50IGl4cDR4eF9oc3NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE0ODgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE0ODk6XHRuZGV2ID0gYWxsb2NfaGRsY2Rldihwb3J0KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTQ5MC1cdGlmICghbmRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUwOC1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM6MTUwOTpcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKG5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYy0xNTEwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jPTE1MjU9c3RhdGljIHZvaWQgaXhwNHh4X2hzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE1Mjk6XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHBvcnQtXHUwMDNlbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUzMC1cdGZyZWVfbmV0ZGV2KHBvcnQtXHUwMDNlbmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYz0yODU9c3RhdGljIHZvaWQgbjJfZGVzdHJveV9jYXJkKGNhcmRfdCAqY2FyZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0yOTItXG5kcml2ZXJzL25ldC93YW4vbjIuYzoyOTM6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2FuL24yLmM9MzIxPXN0YXRpYyBpbnQgX19pbml0IG4yX3J1bih1bnNpZ25lZCBsb25nIGlvLCB1bnNpZ25lZCBsb25nIGlycSxcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDYtXG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDc6XHRjYXJkLVx1MDAzZXBvcnRzWzBdLmRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1swXSk7XG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDg6XHRjYXJkLVx1MDAzZXBvcnRzWzFdLmRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1sxXSk7XG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDktXHRpZiAoIWNhcmQtXHUwMDNlcG9ydHNbMF0uZGV2IHx8ICFjYXJkLVx1MDAzZXBvcnRzWzFdLmRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTQ1OC1cbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjQ1OTpcdFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTQ2MC1cdFx0XHRwcl93YXJuKFwmIzM0O3VuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM9MjQ2PXN0YXRpYyB2b2lkIHBjMzAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjI1MzpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cbi0tXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yODI9c3RhdGljIGludCBwYzMwMF9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMtMzUzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FyZC1cdTAwM2VuX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM6MzU0Olx0XHRjYXJkLVx1MDAzZXBvcnRzW2ldLm5ldGRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1tpXSk7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0zNTUtXHRcdGlmICghY2FyZC1cdTAwM2Vwb3J0c1tpXS5uZXRkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTAtXHRcdHNjYV9pbml0X3BvcnQocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzo0NTE6XHRcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTItXHRcdFx0cHJfZXJyKFwmIzM0O3VuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jPTIyNz1zdGF0aWMgdm9pZCBwY2kyMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTIzMy1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyMzQ6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLm5ldGRldik7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjM1LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYz0yNjM9c3RhdGljIGludCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTAtXHRwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6MjkxOlx0Y2FyZC1cdTAwM2Vwb3J0c1swXS5uZXRkZXYgPSBhbGxvY19oZGxjZGV2KFx1MDAyNmNhcmQtXHUwMDNlcG9ydHNbMF0pO1xuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jOjI5MjpcdGNhcmQtXHUwMDNlcG9ydHNbMV0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcdTAwMjZjYXJkLVx1MDAzZXBvcnRzWzFdKTtcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTMtXHRpZiAoIWNhcmQtXHUwMDNlcG9ydHNbMF0ubmV0ZGV2IHx8ICFjYXJkLVx1MDAzZXBvcnRzWzFdLm5ldGRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0zODQtXHRcdHNjYV9pbml0X3BvcnQocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6Mzg1Olx0XHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTM4Ni1cdFx0XHRwcl9lcnIoXCYjMzQ7dW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYz00ODY9c3RhdGljIHZvaWQgd2FueGxfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNDkxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FyZC1cdTAwM2VuX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NDkyOlx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0uZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5My1cdFx0ZnJlZV9uZXRkZXYoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTUzMz1zdGF0aWMgaW50IHdhbnhsX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy03NTAtXHRcdHN0cnVjdCBwb3J0ICpwb3J0ID0gXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1tpXTtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjc1MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2hkbGNkZXYocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy03NTItXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzY5LVx0XHRnZXRfc3RhdHVzKHBvcnQpLVx1MDAzZWNsb2NraW5nID0gQ0xPQ0tfRVhUO1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NzcwOlx0XHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzcxLVx0XHRcdHByX2VycihcJiMzNDslczogdW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvaGRsYy5oPTU3PWludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC01OS0vKiBNdXN0IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIG9uIG1vZHVsZSBzdGFydHVwL2V4aXQgKi9cbmluY2x1ZGUvbGludXgvaGRsYy5oOjYwOiNkZWZpbmUgcmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KVx0cmVnaXN0ZXJfbmV0ZGV2KGRldilcbmluY2x1ZGUvbGludXgvaGRsYy5oOjYxOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvaGRsYy5oLTYyLVxuLS1cbmluY2x1ZGUvbGludXgvaGRsYy5oPTY1PXZvaWQgdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byk7XG5pbmNsdWRlL2xpbnV4L2hkbGMuaC02Ni1cbmluY2x1ZGUvbGludXgvaGRsYy5oOjY3OnN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oZGxjZGV2KHZvaWQgKnByaXYpO1xuaW5jbHVkZS9saW51eC9oZGxjLmgtNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSERMQyBEcml2ZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIG9mIEhETEMgZHJpdmVycyB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGFyZSB3ZSBkZWFsaW5nIGV4Y2x1c2l2ZWx5IHdpdGggcGh5c2ljYWwgV0FOIGNhcmRzIGhlcmUsIG9yIGFyZSB0aGVyZSBhbnkgdmlydHVhbCBpbXBsZW1lbnRhdGlvbnMgZmxvYXRpbmcgYXJvdW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGFsbCB0aGUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbmV0L3dhbi9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZywgc28gSSBzaG91bGQgZXhwYW5kIG15IHNlYXJjaCBtb3JlIGJyb2FkbHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYW55d2hlcmUgZWxzZSB0aGF0IG1pZ2h0IHRvdWNoIEhETEMgZGlyZWN0bHkuIE15IHNlYXJjaCB0ZXJtcyB3aWxsIGJlIGBIRExDYCBpdHNlbGYsIHBsdXMgYW55IGluc3RhbmNlcyBvZiBgYWxsb2NfaGRsY2RldmAgb3IgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhvc2UgZnVuY3Rpb24gY2FsbHMgc2hvdWxkIGJlIGtleSBpbmRpY2F0b3JzLgoKQWN0dWFsbHksIGJlZm9yZSBJIGdldCBsb3N0IGluIHRoZSB3ZWVkcywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgaW52ZW50b3J5LiBGaXJzdCwgSSB3aWxsIGxpc3QgYWxsIHRoZSBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dhbi9gLiBUaGVuLCBiYXNlZCBvbiB0aGlzIGludmVudG9yeSwgSSB3aWxsIHJlZmluZSBteSBzZWFyY2ggYXMgbmVlZGVkLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBoZWxwIGtlZXAgdGhpbmdzIG9yZ2FuaXplZCBhbmQgcHJldmVudCBtZSBmcm9tIG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtjMTAxLmMmIzM0OywKICAgICYjMzQ7ZmFyc3luYy5jJiMzNDssCiAgICAmIzM0O2ZhcnN5bmMuaCYjMzQ7LAogICAgJiMzNDtmc2xfcW1jX2hkbGMuYyYjMzQ7LAogICAgJiMzNDtmc2xfdWNjX2hkbGMuYyYjMzQ7LAogICAgJiMzNDtmc2xfdWNjX2hkbGMuaCYjMzQ7LAogICAgJiMzNDtoZDY0NTcwLmMmIzM0OywKICAgICYjMzQ7aGQ2NDU3MC5oJiMzNDssCiAgICAmIzM0O2hkNjQ1NzIuYyYjMzQ7LAogICAgJiMzNDtoZDY0NTcyLmgmIzM0OywKICAgICYjMzQ7aGRsYy5jJiMzNDssCiAgICAmIzM0O2hkbGNfY2lzY28uYyYjMzQ7LAogICAgJiMzNDtoZGxjX2ZyLmMmIzM0OywKICAgICYjMzQ7aGRsY19wcHAuYyYjMzQ7LAogICAgJiMzNDtoZGxjX3Jhdy5jJiMzNDssCiAgICAmIzM0O2hkbGNfcmF3X2V0aC5jJiMzNDssCiAgICAmIzM0O2hkbGNfeDI1LmMmIzM0OywKICAgICYjMzQ7aXhwNHh4X2hzcy5jJiMzNDssCiAgICAmIzM0O2xhcGJldGhlci5jJiMzNDssCiAgICAmIzM0O24yLmMmIzM0OywKICAgICYjMzQ7cGMzMDB0b28uYyYjMzQ7LAogICAgJiMzNDtwY2kyMDBzeW4uYyYjMzQ7LAogICAgJiMzNDtzbGljX2RzMjY1MjIuYyYjMzQ7LAogICAgJiMzNDtzbGljX2RzMjY1MjIuaCYjMzQ7LAogICAgJiMzNDt3YW54bC5jJiMzNDssCiAgICAmIzM0O3dhbnhsLmgmIzM0OywKICAgICYjMzQ7d2FueGxmdy5TJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2ZyYW1lciYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKgoKT2theSwgdGltZSB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGxhbmRzY2FwZSBhbmQgc2VlIHdoYXQmIzM5O3Mgb3V0IHRoZXJlIHVzaW5nIGBhbGxvY19oZGxjZGV2YC4gIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIGFsbCB0aGUgSERMQyBkZXZpY2VzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBzd2VlcC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0OgoKKiAgIGBjMTAxLmNgIOKAkyB0aGF0JiMzOTtzIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGdvb2QgdG8ga25vdy4KKiAgIGBmYXJzeW5jLmNgIOKAkyBjb3ZlcmluZyBGYXJTeW5jIFBDSS9QQ0llIHN5bmMgY2FyZHMuIEdvdCBpdC4KKiAgIGBmc2xfcW1jX2hkbGMuY2Ag4oCTIEZyZWVzY2FsZSBRTUMgcGxhdGZvcm0gZGV2aWNlcy4gQ2hlY2tpbmcuCiogICBgZnNsX3VjY19oZGxjLmNgIOKAkyBhbmQgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgcGxhdGZvcm0gZGV2aWNlcy4KKiAgIGBpeHA0eHhfaHNzLmNgIOKAkyB0aGUgSW50ZWwgSVhQNHh4IFNvQyBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKiAgIGBuMi5jYCDigJMgaGFuZGxpbmcgdGhlIFNETCBSSVNDb20vTjIgSVNBIGNhcmQuCiogICBgcGMzMDB0b28uY2Ag4oCTIEN5Y2xhZGVzLVBDMzAwIFBDSSBjYXJkLgoqICAgYHBjaTIwMHN5bi5jYCDigJMgdGhlIEdvcmFtbyBQQ0kyMDBTeW4gUENJIGNhcmQuCiogICBgd2FueGwuY2Ag4oCTIFNCRSBJbmMuIHdhblhMIFBDSSBjYXJkLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIGxpc3QsIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBJIHNob3VsZCB3aWRlbiB0aGUgbmV0IGEgYml0LiBJcyBhbnl0aGluZyBlbHNlIGNyZWF0aW5nIGFuIEhETEMgZGV2aWNlIHVzaW5nIGEgZGlmZmVyZW50IGFsbG9jYXRpb24gbWV0aG9kLCBvciBwZXJoYXBzIGxldmVyYWdpbmcgYGhkbGMuY2AgZGlyZWN0bHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGBsYXBiZXRoZXIuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGl0IGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jPTMwMT1zdGF0aWMgaW50IGxhcGJldGhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMwOC1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzozMDk6c3RhdGljIGNvbnN0IHN0cnVjdCBsYXBiX3JlZ2lzdGVyX3N0cnVjdCBsYXBiZXRoX2NhbGxiYWNrcyA9IHtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy0zMTAtXHQuY29ubmVjdF9jb25maXJtYXRpb24gICAgPSBsYXBiZXRoX2Nvbm5lY3RlZCxcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9MzgxPXN0YXRpYyBpbnQgbGFwYmV0aF9uZXdfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTQxOS1cdHJjID0gLUVJTztcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo0MjA6XHRpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKG5kZXYpKVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTQyMS1cdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00MzU9c3RhdGljIHZvaWQgbGFwYmV0aF9mcmVlX2RldmljZShzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDM4LVx0bGlzdF9kZWxfcmN1KFx1MDAyNmxhcGJldGgtXHUwMDNlbm9kZSk7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NDM5Olx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobGFwYmV0aC1cdTAwM2VheGRldik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDQwLX1cbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9NDk4PXN0YXRpYyBpbnQgX19pbml0IGxhcGJldGhfaW5pdF9kcml2ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTAzLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUwNDpcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZsYXBiZXRoX2Rldl9ub3RpZmllcik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTA1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz01MTY9c3RhdGljIHZvaWQgX19leGl0IGxhcGJldGhfY2xlYW51cF9kcml2ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTIxLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNmxhcGJldGhfcGFja2V0X3R5cGUpO1xuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUyMjpcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmxhcGJldGhfZGV2X25vdGlmaWVyKTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyOC1cdFx0ZGV2X3B1dChsYXBiZXRoLVx1MDAzZWV0aGRldik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NTI5Olx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShsYXBiZXRoLVx1MDAzZWF4ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MzAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBIRExDIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhpcyBIRExDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZ2VuZXJpYyBIRExDIGlzIGhhbmRsZWQgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgaGRsYy5jYCBmcm9tIHRvcCB0byBib3R0b20uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb3JlIGxvZ2ljIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gZGF0YSBmcmFtaW5nLCBlcnJvciBkZXRlY3Rpb24sIGZsYWcgaGFuZGxpbmcsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGRlc2lnbiB0aGF0IG1ha2UgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0aWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBnZW5lcmljIEhETEMgYXNwZWN0cyBpcyBjcnVjaWFsIGJlZm9yZSBJIGdldCBhbnkgZnVydGhlciwgYXMgaXQgbGlrZWx5IGZvcm1zIHRoZSBiYXNpcyBmb3IgYW55IHByb3RvY29sIGV4dGVuc2lvbnMgb3IgY3VzdG9taXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogR2VuZXJpYyBIRExDIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4XG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA4IEtyenlzenRvZiBIYWxhc2EgXHUwMDNja2hjQHBtLndhdy5wbFx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogQ3VycmVudGx5IHN1cHBvcnRlZDpcbiAgIDg6XHQgKlx0KiByYXcgSVAtaW4tSERMQ1xuICAgOTpcdCAqXHQqIENpc2NvIEhETENcbiAgMTA6XHQgKlx0KiBGcmFtZSBSZWxheSB3aXRoIEFOU0kgb3IgQ0NJVFQgTE1JIChib3RoIHVzZXIgYW5kIG5ldHdvcmsgc2lkZSlcbiAgMTE6XHQgKlx0KiBQUFBcbiAgMTI6XHQgKlx0KiBYLjI1XG4gIDEzOlx0ICpcbiAgMTQ6XHQgKiBVc2Ugc2V0aGRsYyB1dGlsaXR5IHRvIHNldCBsaW5lIHBhcmFtZXRlcnMsIHByb3RvY29sIGFuZCBQVkNzXG4gIDE1Olx0ICpcbiAgMTY6XHQgKiBIb3cgZG9lcyBpdCB3b3JrOlxuICAxNzpcdCAqIC0gcHJvdG8tXHUwMDNlb3BlbigpLCBjbG9zZSgpLCBzdGFydCgpLCBzdG9wKCkgY2FsbHMgYXJlIHNlcmlhbGl6ZWQuXG4gIDE4Olx0ICogICBUaGUgb3JkZXIgaXM6IG9wZW4sIFsgc3RhcnQsIHN0b3AgLi4uIF0gY2xvc2UgLi4uXG4gIDE5Olx0ICogLSBwcm90by1cdTAwM2VzdGFydCgpIGFuZCBzdG9wKCkgYXJlIGNhbGxlZCB3aXRoIHNwaW5fbG9ja19pcnEgaGVsZC5cbiAgMjA6XHQgKi9cbiAgMjE6XHRcbiAgMjI6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMzpcdFxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9oZGxjLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gIDMyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAgMzQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDM3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gXCYjMzQ7SERMQyBzdXBwb3J0IG1vZHVsZSByZXZpc2lvbiAxLjIyXCYjMzQ7O1xuICA0MDpcdFxuICA0MTpcdCN1bmRlZiBERUJVR19MSU5LXG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvICpmaXJzdF9wcm90bztcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQ2Olx0XHRcdCAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcbiAgNDc6XHR7XG4gIDQ4Olx0XHRzdHJ1Y3QgaGRsY19kZXZpY2UgKmhkbGM7XG4gIDQ5Olx0XG4gIDUwOlx0XHQvKiBGaXJzdCBtYWtlIHN1cmUgXCYjMzQ7ZGV2XCYjMzQ7IGlzIGFuIEhETEMgZGV2aWNlICovXG4gIDUxOlx0XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xuICA1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNTM6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuICA1NDpcdFx0fVxuICA1NTpcdFxuICA1NjpcdFx0aGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gIDU3Olx0XG4gIDU4Olx0XHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuICA1OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNjA6XHRcdFx0cmV0dXJuIDA7XG4gIDYxOlx0XHR9XG4gIDYyOlx0XG4gIDYzOlx0XHRCVUdfT04oIWhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlbmV0aWZfcngpO1xuICA2NDpcdFx0cmV0dXJuIGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlbmV0aWZfcngoc2tiKTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0bmV0ZGV2X3R4X3QgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNleG1pdClcbiAgNzI6XHRcdFx0cmV0dXJuIGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNleG1pdChza2IsIGRldik7XG4gIDczOlx0XG4gIDc0Olx0XHRyZXR1cm4gaGRsYy1cdTAwM2V4bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi9cbiAgNzU6XHR9XG4gIDc2Olx0RVhQT1JUX1NZTUJPTChoZGxjX3N0YXJ0X3htaXQpO1xuICA3NzpcdFxuICA3ODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3Byb3RvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDc5Olx0e1xuICA4MDpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuICA4MTpcdFxuICA4MjpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RhcnQpXG4gIDgzOlx0XHRcdGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RhcnQoZGV2KTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0c3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4NzpcdHtcbiAgODg6XHRcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiAgODk6XHRcbiAgOTA6XHRcdGlmIChoZGxjLVx1MDAzZXByb3RvLVx1MDAzZXN0b3ApXG4gIDkxOlx0XHRcdGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RvcChkZXYpO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRzdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbiAgOTU6XHRcdFx0XHQgICAgIHZvaWQgKnB0cilcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gIDk4Olx0XHRoZGxjX2RldmljZSAqaGRsYztcbiAgOTk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMTAwOlx0XHRpbnQgb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uLi4KCioqRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoaXMgYGhkbGMuY2AgZmlsZSBoYXMgdG8gb2ZmZXIgaW4gdGhlIGB3YW5gIG5ldHdvcmsgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBIaWdoLUxldmVsIERhdGEgTGluayBDb250cm9sIChIRExDKSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBrZXJuZWwgc3BhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgSERMQyBmcmFtaW5nIG1lY2hhbmlzbXMsIGVycm9yIGRldGVjdGlvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJhY3Rpb24gaWYgaXQmIzM5O3Mgbm90IGEgcHVyZWx5IHNvZnR3YXJlLWJhc2VkIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBmbGFnIHNlcXVlbmNlIGhhbmRsaW5nLCBhZGRyZXNzIGFuZCBjb250cm9sIGZpZWxkIHByb2Nlc3NpbmcsIENSQyBjYWxjdWxhdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciBtZWNoYW5pc21zLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgYXJvdW5kIGludGVycnVwdCBoYW5kbGluZyBvciBETUEgdXNhZ2UgaWYgaXQmIzM5O3MgdGhlcmUsIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgbWF4aW1pemluZyB0aHJvdWdocHV0IGZvciBXQU4gY29ubmVjdGlvbnMgdXNpbmcgdGhpcyBwcm90b2NvbC4gVGhlIGNvZGUgc2hvdWxkIHJldmVhbCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZGlmZmVyZW50IEhETEMgdmFyaWFudHMgYXMgd2VsbCwgbGlrZSBDaXNjbyBIRExDIG9yIEZyYW1lIFJlbGF5LCBpZiBzdXBwb3J0ZWQuIExldCYjMzk7cyBzdGFydCBkaXNzZWN0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXHUwMDI2aW5pdF9uZXQpKVxuIDEwMzpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMTA0Olx0XG4gMTA1Olx0XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSlcbiAxMDY6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBub3QgYW4gSERMQyBkZXZpY2UgKi9cbiAxMDc6XHRcbiAxMDg6XHRcdGlmIChldmVudCAhPSBORVRERVZfQ0hBTkdFKVxuIDEwOTpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7IC8qIE9ubHkgaW50ZXJlc3RlZCBpbiBjYXJyaWVyIGNoYW5nZXMgKi9cbiAxMTA6XHRcbiAxMTE6XHRcdG9uID0gbmV0aWZfY2Fycmllcl9vayhkZXYpO1xuIDExMjpcdFxuIDExMzpcdCNpZmRlZiBERUJVR19MSU5LXG4gMTE0Olx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDslczogaGRsY19kZXZpY2VfZXZlbnQgTkVUREVWX0NIQU5HRSwgY2FycmllciAlaVxcblwmIzM0OyxcbiAxMTU6XHRcdCAgICAgICBkZXYtXHUwMDNlbmFtZSwgb24pO1xuIDExNjpcdCNlbmRpZlxuIDExNzpcdFxuIDExODpcdFx0aGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMTE5Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIgPT0gb24pXG4gMTIyOlx0XHRcdGdvdG8gY2Fycmllcl9leGl0OyAvKiBubyBjaGFuZ2UgaW4gRENEIGxpbmUgbGV2ZWwgKi9cbiAxMjM6XHRcbiAxMjQ6XHRcdGhkbGMtXHUwMDNlY2FycmllciA9IG9uO1xuIDEyNTpcdFxuIDEyNjpcdFx0aWYgKCFoZGxjLVx1MDAzZW9wZW4pXG4gMTI3Olx0XHRcdGdvdG8gY2Fycmllcl9leGl0O1xuIDEyODpcdFxuIDEyOTpcdFx0aWYgKGhkbGMtXHUwMDNlY2Fycmllcikge1xuIDEzMDpcdFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O0NhcnJpZXIgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIDEzMTpcdFx0XHRoZGxjX3Byb3RvX3N0YXJ0KGRldik7XG4gMTMyOlx0XHR9IGVsc2Uge1xuIDEzMzpcdFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O0NhcnJpZXIgbG9zdFxcblwmIzM0Oyk7XG4gMTM0Olx0XHRcdGhkbGNfcHJvdG9fc3RvcChkZXYpO1xuIDEzNTpcdFx0fVxuIDEzNjpcdFxuIDEzNzpcdGNhcnJpZXJfZXhpdDpcbiAxMzg6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4gMTM5Olx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIG9wZW5lZCAqL1xuIDE0MzpcdGludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAxNDQ6XHR7XG4gMTQ1Olx0XHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMTQ2Olx0I2lmZGVmIERFQlVHX0xJTktcbiAxNDc6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0OyVzOiBoZGxjX29wZW4oKSBjYXJyaWVyICVpIG9wZW4gJWlcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLFxuIDE0ODpcdFx0ICAgICAgIGhkbGMtXHUwMDNlY2FycmllciwgaGRsYy1cdTAwM2VvcGVuKTtcbiAxNDk6XHQjZW5kaWZcbiAxNTA6XHRcbiAxNTE6XHRcdGlmICghaGRsYy1cdTAwM2Vwcm90bylcbiAxNTI6XHRcdFx0cmV0dXJuIC1FTk9TWVM7XHQvKiBubyBwcm90b2NvbCBhdHRhY2hlZCAqL1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlb3Blbikge1xuIDE1NTpcdFx0XHRpbnQgcmVzdWx0ID0gaGRsYy1cdTAwM2Vwcm90by1cdTAwM2VvcGVuKGRldik7XG4gMTU2Olx0XG4gMTU3Olx0XHRcdGlmIChyZXN1bHQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcbiAxNTk6XHRcdH1cbiAxNjA6XHRcbiAxNjE6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrKTtcbiAxNjI6XHRcbiAxNjM6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIpIHtcbiAxNjQ6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtDYXJyaWVyIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiAxNjU6XHRcdFx0aGRsY19wcm90b19zdGFydChkZXYpO1xuIDE2NjpcdFx0fSBlbHNlIHtcbiAxNjc6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtObyBjYXJyaWVyXFxuXCYjMzQ7KTtcbiAxNjg6XHRcdH1cbiAxNjk6XHRcbiAxNzA6XHRcdGhkbGMtXHUwMDNlb3BlbiA9IDE7XG4gMTcxOlx0XG4gMTcyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrKTtcbiAxNzM6XHRcdHJldHVybiAwO1xuIDE3NDpcdH1cbiAxNzU6XHRFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7XG4gMTc2Olx0XG4gMTc3Olx0LyogTXVzdCBiZSBjYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gSERMQyBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkICovXG4gMTc4Olx0dm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTc5Olx0e1xuIDE4MDpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuIDE4MTpcdCNpZmRlZiBERUJVR19MSU5LXG4gMTgyOlx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDslczogaGRsY19jbG9zZSgpIGNhcnJpZXIgJWkgb3BlbiAlaVxcblwmIzM0OywgZGV2LVx1MDAzZW5hbWUsXG4gMTgzOlx0XHQgICAgICAgaGRsYy1cdTAwM2VjYXJyaWVyLCBoZGxjLVx1MDAzZW9wZW4pO1xuIDE4NDpcdCNlbmRpZlxuIDE4NTpcdFxuIDE4NjpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2spO1xuIDE4NzpcdFxuIDE4ODpcdFx0aGRsYy1cdTAwM2VvcGVuID0gMDtcbiAxODk6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIpXG4gMTkwOlx0XHRcdGhkbGNfcHJvdG9fc3RvcChkZXYpO1xuIDE5MTpcdFxuIDE5MjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmhkbGMtXHUwMDNlc3RhdGVfbG9jayk7XG4gMTkzOlx0XG4gMTk0Olx0XHRpZiAoaGRsYy1cdTAwM2Vwcm90by1cdTAwM2VjbG9zZSlcbiAxOTU6XHRcdFx0aGRsYy1cdTAwM2Vwcm90by1cdTAwM2VjbG9zZShkZXYpO1xuIDE5NjpcdH1cbiAxOTc6XHRFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpO1xuIDE5ODpcdFxuIDE5OTpcdGludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuIDIwMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiByZWFkaW5nIHRoYXQgY29kZSwgZXhwcmVzc2VkIGFzIGlmIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC93YW4vaGRsYy5jYCAtIExpbmVzIDIwMSBPbndhcmQqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhpcyBgaGRsYy5jYCBkcml2ZXIuIEkmIzM5O3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNjYW4sIGFuZCBub3cgSSYjMzk7bSBzdGFydGluZyBmcm9tIGxpbmUgMjAxIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHRoaXMgZHJpdmVyIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGxvd2VyLWxldmVsIGZyYW1pbmcgYW5kIHBlcmhhcHMgZGF0YSB0cmFuc21pc3Npb24gb3ZlciBXQU4gY29ubmVjdGlvbnMuCgpJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgSERMQyBmcmFtZSBwcm9jZXNzaW5nOiBkZWZpbml0ZWx5IGxvb2tpbmcgZm9yIENSQyBjYWxjdWxhdGlvbnMsIGZsYWcgYnl0ZSBoYW5kbGluZywgYW5kIGRlLXN0dWZmaW5nL3N0dWZmaW5nIG1lY2hhbmlzbXMgZm9yIHRoZSBIRExDIGZyYW1lJiMzOTtzIHN0YXJ0IGFuZCBlbmQgZmxhZ3MsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0cmFuc21pc3Npb24uIEkgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkgY292ZXJlZCB0aGF0LiBJcyBpdCB1c2luZyBETUE/IEFyZSB0aGVyZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIGZyYW1lIHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uPyBXaGF0IHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IEFsc28sIEkgd2lsbCBiZSBrZWVuIHRvIGlkZW50aWZ5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb24gdGhlIFdBTiBsaW5rLCB0aGluZ3MgbGlrZSBmcmFtZSBjaGVja3N1bSBmYWlsdXJlcywgYW5kIGRhdGEgbG9zcy4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSB3YXRjaGluZyBmb3IgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgaG93IGl0IGlzIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrIOKAkyB3aGF0IG5ldF9kZXZpY2UgY2FsbHMgYXJlIGJlaW5nIHVzZWQsIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB1cHBlci1sYXllciBwcm90b2NvbHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIHZlcnkgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2hkbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAxOlx0XHRzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8gPSBmaXJzdF9wcm90bztcbiAyMDI6XHRcdGludCByZXN1bHQ7XG4gMjAzOlx0XG4gMjA0Olx0XHRpZiAoZGV2X3RvX2hkbGMoZGV2KS1cdTAwM2Vwcm90bykge1xuIDIwNTpcdFx0XHRyZXN1bHQgPSBkZXZfdG9faGRsYyhkZXYpLVx1MDAzZXByb3RvLVx1MDAzZWlvY3RsKGRldiwgaWZzKTtcbiAyMDY6XHRcdFx0aWYgKHJlc3VsdCAhPSAtRUlOVkFMKVxuIDIwNzpcdFx0XHRcdHJldHVybiByZXN1bHQ7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHQvKiBOb3QgaGFuZGxlZCBieSBjdXJyZW50bHkgYXR0YWNoZWQgcHJvdG9jb2wgKGlmIGFueSkgKi9cbiAyMTE6XHRcbiAyMTI6XHRcdHdoaWxlIChwcm90bykge1xuIDIxMzpcdFx0XHRyZXN1bHQgPSBwcm90by1cdTAwM2Vpb2N0bChkZXYsIGlmcyk7XG4gMjE0Olx0XHRcdGlmIChyZXN1bHQgIT0gLUVJTlZBTClcbiAyMTU6XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuIDIxNjpcdFx0XHRwcm90byA9IHByb3RvLVx1MDAzZW5leHQ7XG4gMjE3Olx0XHR9XG4gMjE4Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMTk6XHR9XG4gMjIwOlx0RVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTtcbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaGRsY19udWxsX29wcztcbiAyMjM6XHRcbiAyMjQ6XHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIyNTpcdHtcbiAyMjY6XHRcdC8qIFJlLWluaXQgYWxsIHZhcmlhYmxlcyBjaGFuZ2VkIGJ5IEhETEMgcHJvdG9jb2wgZHJpdmVycyxcbiAyMjc6XHRcdCAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLlxuIDIyODpcdFx0ICovXG4gMjI5Olx0XHRkZXYtXHUwMDNlZmxhZ3NcdFx0ID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQO1xuIDIzMDpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdFx0ID0gSUZGX1dBTl9IRExDO1xuIDIzMTpcdFx0ZGV2LVx1MDAzZW10dVx0XHQgPSBIRExDX01BWF9NVFU7XG4gMjMyOlx0XHRkZXYtXHUwMDNlbWluX210dVx0XHQgPSA2ODtcbiAyMzM6XHRcdGRldi1cdTAwM2VtYXhfbXR1XHRcdCA9IEhETENfTUFYX01UVTtcbiAyMzQ6XHRcdGRldi1cdTAwM2V0eXBlXHRcdCA9IEFSUEhSRF9SQVdIRExDO1xuIDIzNTpcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlblx0ID0gMDtcbiAyMzY6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb21cdCA9IDA7XG4gMjM3Olx0XHRkZXYtXHUwMDNlYWRkcl9sZW5cdFx0ID0gMDtcbiAyMzg6XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdCA9IFx1MDAyNmhkbGNfbnVsbF9vcHM7XG4gMjM5Olx0fVxuIDI0MDpcdFxuIDI0MTpcdHN0YXRpYyB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAyNDI6XHR7XG4gMjQzOlx0XHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRoZGxjX3NldHVwX2RldihkZXYpO1xuIDI0NjpcdFx0aGRsYy1cdTAwM2VjYXJyaWVyID0gMTtcbiAyNDc6XHRcdGhkbGMtXHUwMDNlb3BlbiA9IDA7XG4gMjQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2spO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxuIDI1MjpcdHtcbiAyNTM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjU0Olx0XG4gMjU1Olx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBoZGxjX2RldmljZSksIFwmIzM0O2hkbGMlZFwmIzM0OyxcbiAyNTY6XHRcdFx0XHQgICBORVRfTkFNRV9VTktOT1dOLCBoZGxjX3NldHVwKTtcbiAyNTc6XHRcdGlmIChkZXYpXG4gMjU4Olx0XHRcdGRldl90b19oZGxjKGRldiktXHUwMDNlcHJpdiA9IHByaXY7XG4gMjU5Olx0XHRyZXR1cm4gZGV2O1xuIDI2MDpcdH1cbiAyNjE6XHRFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xuIDI2MjpcdFxuIDI2MzpcdHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDI2NDpcdHtcbiAyNjU6XHRcdHJ0bmxfbG9jaygpO1xuIDI2NjpcdFx0ZGV2X2Nsb3NlKGRldik7XG4gMjY3Olx0XHRkZXRhY2hfaGRsY19wcm90b2NvbChkZXYpO1xuIDI2ODpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiAyNjk6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gMjcwOlx0fVxuIDI3MTpcdEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XG4gMjcyOlx0XG4gMjczOlx0aW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byxcbiAyNzQ6XHRcdFx0XHQgc2l6ZV90IHNpemUpXG4gMjc1Olx0e1xuIDI3NjpcdFx0aW50IGVycjtcbiAyNzc6XHRcbiAyNzg6XHRcdGVyciA9IGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XG4gMjc5Olx0XHRpZiAoZXJyKVxuIDI4MDpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEhETEMgZGV2aWNlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBoZXJlLCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hvdyBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICptYWRlKj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCBvciBpcyB0aGVyZSBzb21lIHNvZnR3YXJlIG1hZ2ljIGhhcHBlbmluZz8gQXJlIHRoZXJlIHZpcnR1YWwgZGV2aWNlcyB0aGF0IGVtdWxhdGUgSERMQywgY3JlYXRpbmcgYSBgbmV0X2RldmljZWAgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JlYXRpb24gcHJvY2Vzcy4KCk9rYXksIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyB0byBleGhhdXN0aXZlbHkgc2NhbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgSUZGX1dBTl9IRExDYCwgYGFsbG9jX2hkbGNkZXZgLCBhbmQgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYWxsIHRoZSBjb2RlIHBhdGhzIHRoYXQgZGVhbCB3aXRoIEhETEMgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIG1hbmFnZW1lbnQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCBmb3IgYElGRl9XQU5fSERMQ2AgdG8gc2VlIHdoZXJlIHRoZSBpbnRlcmZhY2UgZmxhZ3MgYXJlIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG5hcnJvdyB0aGUgZm9jdXMuIFRoaXMgd2lsbCBleHBvc2UgdGhlIGtleSBhcmVhcyB0aGF0IGRldGVybWluZSB0aGUgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBvZiB0aGVzZSBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRkZfV0FOX0hETEMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2hkbGMuYz00NT1zdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy01MC1cdC8qIEZpcnN0IG1ha2Ugc3VyZSBcJiMzNDtkZXZcJiMzNDsgaXMgYW4gSERMQyBkZXZpY2UgKi9cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6NTE6XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy01Mi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYz05ND1zdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNC1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MTA1Olx0aWYgKCEoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9XQU5fSERMQykpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNi1cdFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBub3QgYW4gSERMQyBkZXZpY2UgKi9cbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTIyND1zdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjI5LVx0ZGV2LVx1MDAzZWZsYWdzXHRcdCA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjMwOlx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdFx0ID0gSUZGX1dBTl9IRExDO1xuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yMzEtXHRkZXYtXHUwMDNlbXR1XHRcdCA9IEhETENfTUFYX01UVTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzEtICogQElGRl9JU0FUQVA6IElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE3MzI6ICogQElGRl9XQU5fSERMQzogV0FOIEhETEMgZGV2aWNlXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzMtICogQElGRl9YTUlUX0RTVF9SRUxFQVNFOiBkZXZfaGFyZF9zdGFydF94bWl0KCkgaXMgYWxsb3dlZCB0b1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTc2NT1lbnVtIG5ldGRldl9wcml2X2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NjktXHRJRkZfSVNBVEFQXHRcdFx0PSAxXHUwMDNjXHUwMDNjMyxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTc3MDpcdElGRl9XQU5fSERMQ1x0XHRcdD0gMVx1MDAzY1x1MDAzYzQsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NzEtXHRJRkZfWE1JVF9EU1RfUkVMRUFTRVx0XHQ9IDFcdTAwM2NcdTAwM2M1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMxOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEhETEMgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBgYWxsb2NfaGRsY2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIGEgbWl4IG9mIGRyaXZlcnM6IElTQSBjYXJkcyBsaWtlIGBjMTAxLmNgIGFuZCBgbjIuY2AsIHNldmVyYWwgUENJIGRyaXZlcnMgZm9yIEZhclN5bmMsIEN5Y2xhZGVzLCBHb3JhbW8sIGFuZCB3YW5YTCBjYXJkcywgYW5kIE9GL3BsYXRmb3JtIGRyaXZlcnMgZm9yIEZyZWVzY2FsZSBhbmQgSVhQNHh4IFNvQ3MuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBhcmlzZXM6IGhvdyBwcmV2YWxlbnQgYXJlIHRoZXNlIGRldmljZSB0eXBlcyBpbiBtb2Rlcm4gdmlydHVhbGl6YXRpb24/IE5vbmUgb2YgdGhlc2UgYXBwZWFyIHRvIGJlIGVtdWxhdGVkIGluIFFFTVUgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXBzLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBMZXQgbWUgcGF1c2UgYW5kIHRoaW5rLi4uIGFyZSB0aGVyZSBhbnkgVVNCIEhETEMgZHJpdmVycz8gTm8uIFdoYXQgYWJvdXQgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHJ0bmwgbGlua3M/IE5vbmUgYXJlIHVzaW5nIEhETEMgb3IgYGFsbG9jX2hkbGNkZXZgLgoKSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gYGRyaXZlcnMvbmV0L3dhbi9gIGFuZCBgaGRsYy5jYCB0byBzZWUgaWYgSSBtaXNzZWQgYW55dGhpbmcuCgpBIHJlbGF0ZWQgdGhvdWdodCwgaXQmIzM5O3Mgd29ydGggcmUtZXhhbWluaW5nIGhvdyBgYzEwMS5jYCBvciBgbjIuY2AgYXJlIGluaXRpYWxpemVkLiBBcmUgdGhleSByZWx5aW5nIG9uIG1vZHVsZSBsb2FkIG9yIGBpbnNtb2RgIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQ/IElTQSBjYXJkcyBjYW4gYmUgYSBiaXQgdHJpY2t5LCByZWx5aW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBwcm9iZWQgdGhyb3VnaCBwYXJhbXMuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIHByb2JlIG1lY2hhbmlzbSBmb3IgYm90aCBgYzEwMS5jYCBhbmQgYG4yLmNgLiBJIHdpbGwgY2hlY2sgdGhvc2UgZmlsZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0Lm5kb19zaW9jd2FuZGV2ID0gYzEwMV9pb2N0bCxcbiAyOTY6XHRcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBjMTAxX3Npb2NkZXZwcml2YXRlLFxuIDI5NzpcdH07XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSlcbiAzMDA6XHR7XG4gMzAxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDMwMjpcdFx0aGRsY19kZXZpY2UgKmhkbGM7XG4gMzAzOlx0XHRjYXJkX3QgKmNhcmQ7XG4gMzA0Olx0XHRpbnQgcmVzdWx0O1xuIDMwNTpcdFxuIDMwNjpcdFx0aWYgKGlycSBcdTAwM2MgMyB8fCBpcnEgXHUwMDNlIDE1IHx8IGlycSA9PSA2KSAvKiBGSVhNRSAqLyB7XG4gMzA3Olx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIElSUSB2YWx1ZVxcblwmIzM0Oyk7XG4gMzA4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDMwOTpcdFx0fVxuIDMxMDpcdFxuIDMxMTpcdFx0aWYgKHdpbmJhc2UgXHUwMDNjIDB4QzAwMDAgfHwgd2luYmFzZSBcdTAwM2UgMHhERkZGRiB8fCAod2luYmFzZSBcdTAwMjYgMHgzRkZGKSAhPSAwKSB7XG4gMzEyOlx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIFJBTSB2YWx1ZVxcblwmIzM0Oyk7XG4gMzEzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDMxNDpcdFx0fVxuIDMxNTpcdFxuIDMxNjpcdFx0Y2FyZCA9IGt6YWxsb2Nfb2JqKGNhcmRfdCk7XG4gMzE3Olx0XHRpZiAoIWNhcmQpXG4gMzE4Olx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAzMTk6XHRcbiAzMjA6XHRcdGNhcmQtXHUwMDNlZGV2ID0gYWxsb2NfaGRsY2RldihjYXJkKTtcbiAzMjE6XHRcdGlmICghY2FyZC1cdTAwM2VkZXYpIHtcbiAzMjI6XHRcdFx0cHJfZXJyKFwmIzM0O3VuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cJiMzNDspO1xuIDMyMzpcdFx0XHRrZnJlZShjYXJkKTtcbiAzMjQ6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDMyNTpcdFx0fVxuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHJlcXVlc3RfaXJxKGlycSwgc2NhX2ludHIsIDAsIGRldm5hbWUsIGNhcmQpKSB7XG4gMzI4Olx0XHRcdHByX2VycihcJiMzNDtjb3VsZCBub3QgYWxsb2NhdGUgSVJRXFxuXCYjMzQ7KTtcbiAzMjk6XHRcdFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XG4gMzMwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gMzMxOlx0XHR9XG4gMzMyOlx0XHRjYXJkLVx1MDAzZWlycSA9IGlycTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHdpbmJhc2UsIEMxMDFfTUFQUEVEX1JBTV9TSVpFLCBkZXZuYW1lKSkge1xuIDMzNTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGQgbm90IHJlcXVlc3QgUkFNIHdpbmRvd1xcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGMxMDFfZGVzdHJveV9jYXJkKGNhcmQpO1xuIDMzNzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMzODpcdFx0fVxuIDMzOTpcdFx0Y2FyZC1cdTAwM2VwaHlfd2luYmFzZSA9IHdpbmJhc2U7XG4gMzQwOlx0XHRjYXJkLVx1MDAzZXdpbjBiYXNlID0gaW9yZW1hcCh3aW5iYXNlLCBDMTAxX01BUFBFRF9SQU1fU0laRSk7XG4gMzQxOlx0XHRpZiAoIWNhcmQtXHUwMDNld2luMGJhc2UpIHtcbiAzNDI6XHRcdFx0cHJfZXJyKFwmIzM0O2NvdWxkIG5vdCBtYXAgSS9PIGFkZHJlc3NcXG5cJiMzNDspO1xuIDM0MzpcdFx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcbiAzNDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbjoKCioqRGVjb25zdHJ1Y3RpbmcgYGMxMDFfcnVuYCYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBjMTAxLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSB0aGUgYGMxMDFfcnVuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUga2V5IGFwcGVhcnMgdG8gYmUgdGhlIGBzY2FfaW5pdGAgY2FsbCB3aXRoaW4gYGMxMDFfcnVuYC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIGhhcHBlbnMsIHdyaXRpbmcgdG8gcmVnaXN0ZXJzIGFuZCB2ZXJpZnlpbmcgdGhlIFNDQSBjaGlwcy4gTm93LCBJIG5lZWQgdG8gem9vbSBpbi4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgbGluZXMgMzQ1LTM4MCBvZiBgYzEwMV9ydW5gIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0fVxuIDM0NjpcdFxuIDM0NzpcdFx0Y2FyZC1cdTAwM2V0eF9yaW5nX2J1ZmZlcnMgPSBUWF9SSU5HX0JVRkZFUlM7XG4gMzQ4Olx0XHRjYXJkLVx1MDAzZXJ4X3JpbmdfYnVmZmVycyA9IFJYX1JJTkdfQlVGRkVSUztcbiAzNDk6XHRcdGNhcmQtXHUwMDNlYnVmZl9vZmZzZXQgPSBDMTAxX1dJTkRPV19TSVpFOyAvKiBCeXRlcyAxRDAwLTFGRkYgcmVzZXJ2ZWQgKi9cbiAzNTA6XHRcbiAzNTE6XHRcdHJlYWRiKGNhcmQtXHUwMDNld2luMGJhc2UgJiM0MzsgQzEwMV9QQUdFKTsgLyogUmVzZXRzIFNDQT8gKi9cbiAzNTI6XHRcdHVkZWxheSgxMDApO1xuIDM1MzpcdFx0d3JpdGViKDAsIGNhcmQtXHUwMDNld2luMGJhc2UgJiM0MzsgQzEwMV9QQUdFKTtcbiAzNTQ6XHRcdHdyaXRlYigwLCBjYXJkLVx1MDAzZXdpbjBiYXNlICYjNDM7IEMxMDFfRFRSKTsgLyogUG93ZXItdXAgZm9yIFJBTT8gKi9cbiAzNTU6XHRcbiAzNTY6XHRcdHNjYV9pbml0KGNhcmQsIDApO1xuIDM1NzpcdFxuIDM1ODpcdFx0ZGV2ID0gcG9ydF90b19kZXYoY2FyZCk7XG4gMzU5Olx0XHRoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiAzNjA6XHRcbiAzNjE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmNhcmQtXHUwMDNlbG9jayk7XG4gMzYyOlx0XHRkZXYtXHUwMDNlaXJxID0gaXJxO1xuIDM2MzpcdFx0ZGV2LVx1MDAzZW1lbV9zdGFydCA9IHdpbmJhc2U7XG4gMzY0Olx0XHRkZXYtXHUwMDNlbWVtX2VuZCA9IHdpbmJhc2UgJiM0MzsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxO1xuIDM2NTpcdFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IDUwO1xuIDM2NjpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZjMTAxX29wcztcbiAzNjc6XHRcdGhkbGMtXHUwMDNlYXR0YWNoID0gc2NhX2F0dGFjaDtcbiAzNjg6XHRcdGhkbGMtXHUwMDNleG1pdCA9IHNjYV94bWl0O1xuIDM2OTpcdFx0Y2FyZC1cdTAwM2VzZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUO1xuIDM3MDpcdFxuIDM3MTpcdFx0cmVzdWx0ID0gcmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbiAzNzI6XHRcdGlmIChyZXN1bHQpIHtcbiAzNzM6XHRcdFx0cHJfd2FybihcJiMzNDt1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXG5cJiMzNDspO1xuIDM3NDpcdFx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcbiAzNzU6XHRcdFx0cmV0dXJuIHJlc3VsdDtcbiAzNzY6XHRcdH1cbiAzNzc6XHRcbiAzNzg6XHRcdHNjYV9pbml0X3BvcnQoY2FyZCk7IC8qIFNldCB1cCBDMTAxIG1lbW9yeSAqL1xuIDM3OTpcdFx0c2V0X2NhcnJpZXIoY2FyZCk7XG4gMzgwOlx0XG4gMzgxOlx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O01veGEgQzEwMSBvbiBJUlEldSwgdXNpbmcgJXUgVFggJiM0MzsgJXUgUlggcGFja2V0cyByaW5nc1xcblwmIzM0OyxcbiAzODI6XHRcdFx0ICAgIGNhcmQtXHUwMDNlaXJxLCBjYXJkLVx1MDAzZXR4X3JpbmdfYnVmZmVycywgY2FyZC1cdTAwM2VyeF9yaW5nX2J1ZmZlcnMpO1xuIDM4MzpcdFxuIDM4NDpcdFx0Km5ld19jYXJkID0gY2FyZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEhETEMgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBmc2xfdWNjX2hkbGMuY2AuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gU28sIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGB1aGRsY19vcGVuYCwgYHVoZGxjX3N1c3BlbmRgLCBhbmQgYHVjY19oZGxjX3JlbW92ZWAuIFNwZWNpZmljYWxseSwgaW4gYHVoZGxjX29wZW5gLCBpdCBub3cgY2FsbHMgYGhkbGNfb3BlbmAgZWFybGllciBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBgdWhkbGNfc3VzcGVuZGAgaGFzIGEgbW92ZSBvZiBga21hbGxvY19vYmpgLCBhbmQgYHVjY19oZGxjX3JlbW92ZWAgbm93IGluY2x1ZGVzIGNhbGxzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBhbmQgYGZyZWVfbmV0ZGV2YC4KCk5vdywgbG9va2luZyBkZWVwZXIgYXQgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgaXQgaW5jbHVkZXMgYSBjYWxsIHRvIGBkZXZfY2xvc2VgIGJlZm9yZSBkZXRhY2hpbmcgdGhlIEhETEMgcHJvdG9jb2wgYW5kIHVucmVnaXN0ZXJpbmcgdGhlIG5ldCBkZXZpY2UuIENydWNpYWxseSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmUgb3IgY2xlYW51cCBmdW5jdGlvbnMgb2YgKmV2ZXJ5KiBIRExDIGhhcmR3YXJlIGRyaXZlci4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2Ugc2VlIGl0IGluIGB1Y2NfaGRsY19yZW1vdmVgLCBgZnN0X3JlbW92ZV9vbmVgLCBgcW1jX2hkbGNfcmVtb3ZlYCwgYHdhbnhsX3BjaV9yZW1vdmVfb25lYCwgYW5kIG90aGVycywgYWxsIG9mIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIGFsbCByZW1vdmUgZnVuY3Rpb25zLgoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgY29kZSB0aGF0JiMzOTtzICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgb3IgJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0Oy4gVGhlIHNlY29uZCBwb2ludCBpcyB0aGF0IHRoZSBjb2RlIGlzIHRlYXJkb3duL2NsZWFudXAgZnVuY3Rpb25zIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnLCBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLiBgZnNsX3VjY19oZGxjLmNgIGlzIGEgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgYSBwbGF0Zm9ybSBkcml2ZXIgaW50ZW5kZWQgZm9yIE5YUC9GcmVlc2NhbGUgUG93ZXJQQy9BUk0gU29DcyB3aXRoIFFVSUNDIEVuZ2luZSBoYXJkd2FyZS4gQ3JpdGljYWxseSwgb24gYW4gYW1kNjQgc3lzdGVtLCB0aGUgUVVJQ0NfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb25seSBidWlsZHMgd2l0aCBgQ09NUElMRV9URVNUYC4gRXZlbiB0aGVuLCBpdOKAmXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBPcGVuRmlybXdhcmUgb3IgRGV2aWNlVHJlZSwgYW5kIHJlcXVpcmVzIGFjdHVhbCBGcmVlc2NhbGUgU29DIGhhcmR3YXJlLiBJdCBjYW5ub3QgcHJvYmUgb3IgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGF0LiBUaGVyZWZvcmUsIGBmc2xfdWNjX2hkbGMuY2AgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBlbnZpcm9ubWVudC4KCk5vdywgY29uc2lkZXJpbmcgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRldmljZSB1bnJlZ2lzdHJhdGlvbiwgZHJpdmVyIHRlYXJkb3duLCBvciBtb2R1bGUgdW5sb2FkLiBUaGUgY2FsbGluZyBmdW5jdGlvbnMgYXJlIGFsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92YWwgb2Ygc3BlY2lmaWMgaGFyZHdhcmUgY2FyZHMsIGJlIHRoZXkgcGxhdGZvcm0gZGV2aWNlcywgUENJLCBvciBJU0EgY2FyZHMuIFRoZXNlIGhhcmR3YXJlIGNvbXBvbmVudHMgLSB0aGUgRnJlZXNjYWxlIFFFIHBsYXRmb3JtLCBGYXJTeW5jIGNhcmRzLCBDeWNsYWRlcy1QQzMwMCBQQ0kgY2FyZHMsIEdvcmFtbyBQQ0kyMDBTeW4sIG9yIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGZvciBleGFtcGxlIC0gc2ltcGx5IGRvIG5vdCBleGlzdCBvciBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGlzLCB0aGVyZWZvcmUsIHB1dHMgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIHNxdWFyZWx5IHdpdGhpbiB0aGUgY2F0ZWdvcnkgb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGNvZGUuIFRoZSBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIHRlYXJkb3duLCB3aGljaCB3ZSBhcmUgbm90IGFibGUgdG8gdHJpZ2dlci4KClRvIGVuc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCByZWFjaGFibGUgY29kZSwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYWxsIGBkcml2ZXJzL25ldC93YW4vYCBhbmQgYmV5b25kLCBmb3IgYW55IG90aGVyIGNhbGxzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCwgYHVoZGxjX29wZW5gIG9yIGB1aGRsY19zdXNwZW5kYC4gSSB3aWxsIHBlcmZvcm0gb25lIGxhc3QgY2hlY2sgb2YgdGhlIGFsbCB0aGUgY2FsbGVycyB0byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAuIFRoZSBjdXJyZW50IGFzc2Vzc21lbnQsIGhvd2V2ZXIsIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBjb2RlIHRoYXQgaXMgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VucmVnaXN0ZXJfaGRsY19kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2MxMDEuYz00MjA9c3RhdGljIHZvaWQgX19leGl0IGMxMDFfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVx0XHRjYXJkID0gY2FyZC1cdTAwM2VuZXh0X2NhcmQ7XG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjQyODpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI5LVx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjMwMC1cdFx0XHR3aGlsZSAoaS0tKVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMzAxOlx0XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDItXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jPTIzMjY9ZnN0X2FkZF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA2LVx0Zm9yIChpID0gMCA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzIDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA4LWluaXRfY2FyZF9mYWlsOlxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTI1NDAtXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzgwPXN0YXRpYyB2b2lkIHFtY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6Nzg0Olx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc4NS1cdGZyZWVfbmV0ZGV2KHFtY19oZGxjLVx1MDAzZW5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTEyNTQ9c3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTctXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTI1ODpcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU5LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM9MjYxPUVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI2Mi1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjcxOkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI3Mi1cbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jPTE1MjU9c3RhdGljIHZvaWQgaXhwNHh4X2hzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE1Mjk6XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHBvcnQtXHUwMDNlbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUzMC1cdGZyZWVfbmV0ZGV2KHBvcnQtXHUwMDNlbmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYz0yODU9c3RhdGljIHZvaWQgbjJfZGVzdHJveV9jYXJkKGNhcmRfdCAqY2FyZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0yOTItXG5kcml2ZXJzL25ldC93YW4vbjIuYzoyOTM6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM9MjQ2PXN0YXRpYyB2b2lkIHBjMzAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjI1MzpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cbi0tXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM9MjI3PXN0YXRpYyB2b2lkIHBjaTIwMF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjMzLVx0XHRpZiAoY2FyZC1cdTAwM2Vwb3J0c1tpXS5jYXJkKVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jOjIzNDpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yMzUtXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM9NDg2PXN0YXRpYyB2b2lkIHdhbnhsX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbl9wb3J0czsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjQ5MjpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy00OTMtXHRcdGZyZWVfbmV0ZGV2KGNhcmQtXHUwMDNlcG9ydHNbaV0uZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hkbGMuaD01Nz1pbnQgaGRsY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZfc2V0dGluZ3MgKmlmcyk7XG4tLVxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjAtI2RlZmluZSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpXHRyZWdpc3Rlcl9uZXRkZXYoZGV2KVxuaW5jbHVkZS9saW51eC9oZGxjLmg6NjE6dm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9oZGxjLmgtNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjkxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGFsbCBjYWxscyB0byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgYXJlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSByZW1vdmFsIGFuZCBjbGVhbnVwIHByb2NlZHVyZXMsIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgZnNsX3VjY19oZGxjLmNgIGZpbGU7IGl0JiMzOTtzIGV4Y2x1c2l2ZWx5IGZvciB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBoYXJkd2FyZSwgd2hpY2ggaXMgYSBQb3dlclBDL2VtYmVkZGVkIFNvQyBzcGVjaWZpYyBkZXZpY2UuIFNpbmNlIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgYW1kNjQtYmFzZWQgYW5kIHVzZXMgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIHRoYXQgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybToKCiogICBgV29ydGhGdXp6aW5nYDogRmFsc2UuIE1ha2VzIHNlbnNlOyB0aGlzIGNvZGUgaXNuJiMzOTt0IHJlbGV2YW50IHRvIG15IHNldHVwLgoqICAgYFJlYXNvbmluZ2A6IFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgZHJpdmVyIChgZnNsX3VjY19oZGxjLmNgKSBhbmQgdGhlIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBoZWxwZXIgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGUgUVVJQ0MgRW5naW5lIGlzIHBsYXRmb3JtLXNwZWNpZmljIGFuZCBub3QgZm91bmQgaW4gbXkgeDg2L1FFTVUgZW52aXJvbm1lbnQuIFRoZSB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiByZW1vdmluZyBvciBjbGVhbmluZyB1cCBub24tZW11bGF0ZWQgcGh5c2ljYWwgV0FOL0hETEMgUENJL0lTQS9wbGF0Zm9ybSBkcml2ZXJzLiBTbywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG1ha2VzIHNlbnNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eS4gTm8gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQgaGVyZS4KKiAgIGBGb2N1c1N5bWJvbHNgOiBFbXB0eS4gTm8gc3BlY2lmaWMgc3ltYm9scyB0byB0cmFjay4KClJpZ2h0LCBhbGwgY2xlYXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMpIGFuZCB0aGUgZ2VuZXJpYyBIRExDIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgKGRyaXZlcnMvbmV0L3dhbi9oZGxjLmMpLiBUaGUgZnNsX3VjY19oZGxjIGRyaXZlciBpcyBzcGVjaWZpYyB0byBGcmVlc2NhbGUvTlhQIFNvQyBjb3Byb2Nlc3NvciBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhlIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgaGVscGVyIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIHJlbW92ZSBhbmQgbW9kdWxlIGV4aXQgcm91dGluZXMgZm9yIHBoeXNpY2FsIFdBTiBoYXJkd2FyZSBjb250cm9sbGVycyAoRmFyc3luYywgd2FuWEwsIFBDMzAwLCBldGMuKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjM0Ljk1MjU0MjYzNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjc0NzMzMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjM0Ljk1MjU0NzI0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzODcwNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdkMjMyNDAyMzlhNGVmOTIxYzVlMTNhZmE3OGQzZjQ5ZGYyMTRjN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMDoxMjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY1xcbkBAIC0zNCw4ICszNCw2IEBAXFxuICNkZWZpbmUgVERNX1BQUE9IVF9TTElDX01BWElOXFxuICNkZWZpbmUgUlhfQkRfRVJST1JTIChSX0NEX1MgfCBSX09WX1MgfCBSX0NSX1MgfCBSX0FCX1MgfCBSX05PX1MgfCBSX0xHX1MpXFxuIFxcbi1zdGF0aWMgaW50IHVoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi1cXG4gc3RhdGljIHN0cnVjdCB1Y2NfdGRtX2luZm8gdXRkbV9wcmltYXJ5X2luZm8gPSB7XFxuIFxcdC51Zl9pbmZvID0ge1xcbiBcXHRcXHQudHNhID0gMCxcXG5AQCAtNzA1LDEyICs3MDMsMTggQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcXG4gXFx0c3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBoZGxjLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgdWNjX3RkbSAqdXRkbSA9IHByaXYtXFx1MDAzZXV0ZG07XFxuLVxcdGludCByYyA9IDA7XFxuK1xcdGludCByYztcXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VoZGxjX2J1c3kgIT0gMSkge1xcbitcXHRcXHRyYyA9IGhkbGNfb3BlbihkZXYpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdFxcdGlmIChyZXF1ZXN0X2lycShwcml2LVxcdTAwM2V1dF9pbmZvLVxcdTAwM2V1Zl9pbmZvLmlycSxcXG4tXFx0XFx0XFx0XFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFxcXCJoZGxjXFxcIiwgcHJpdikpXFxuK1xcdFxcdFxcdFxcdHVjY19oZGxjX2lycV9oYW5kbGVyLCAwLCBcXFwiaGRsY1xcXCIsIHByaXYpKSB7XFxuK1xcdFxcdFxcdGhkbGNfY2xvc2UoZGV2KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soXFxuIFxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXV0X2luZm8tXFx1MDAzZXVmX2luZm8udWNjX251bSk7XFxuQEAgLTcyOSwxMyArNzMzLDkgQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG4gXFx0XFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKGRldik7XFxuIFxcdFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuLVxcbi1cXHRcXHRyYyA9IGhkbGNfb3BlbihkZXYpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdHVoZGxjX2Nsb3NlKGRldik7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVoZGxjX21lbWNsZWFuKHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2KVxcbkBAIC04ODgsNiArODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVxcdTAwM2VuZGV2KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cXHUwMDNldWNjX3ByYW1fYmFrKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWspXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4gXFx0bmV0aWZfZGV2aWNlX2RldGFjaChwcml2LVxcdTAwM2VuZGV2KTtcXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG4gXFxuQEAgLTg5NywxMCArOTAxLDYgQEAgc3RhdGljIGludCB1aGRsY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cHJpdi1cXHUwMDNlZ3VtciA9IGlvcmVhZDMyYmUoXFx1MDAyNnVmX3JlZ3MtXFx1MDAzZWd1bXIpO1xcbiBcXHRwcml2LVxcdTAwM2VndWVtciA9IGlvcmVhZDgoXFx1MDAyNnVmX3JlZ3MtXFx1MDAzZWd1ZW1yKTtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZXVjY19wcmFtX2JhayA9IGttYWxsb2Nfb2JqKCpwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWspO1xcbi1cXHRpZiAoIXByaXYtXFx1MDAzZXVjY19wcmFtX2JhaylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbiBcXHQvKiBiYWNrdXAgSERMQyBwYXJhbWV0ZXIgKi9cXG4gXFx0bWVtY3B5X2Zyb21pbyhwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWssIHByaXYtXFx1MDAzZXVjY19wcmFtLFxcbiBcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7XFxuQEAgLTEyNTUsNiArMTI1NSw4IEBAIHN0YXRpYyB2b2lkIHVjY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVxcdTAwM2VuZGV2KTtcXG4rXFxuIFxcdHVoZGxjX21lbWNsZWFuKHByaXYpO1xcbiBcXG4gXFx0aWYgKHByaXYtXFx1MDAzZXV0ZG0gXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXRkbS1cXHUwMDNlc2lfcmVncykge1xcbkBAIC0xMjY2LDYgKzEyNjgsNyBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0aW91bm1hcChwcml2LVxcdTAwM2V1dGRtLVxcdTAwM2VzaXJhbSk7XFxuIFxcdFxcdHByaXYtXFx1MDAzZXV0ZG0tXFx1MDAzZXNpcmFtID0gTlVMTDtcXG4gXFx0fVxcbitcXHRmcmVlX25ldGRldihwcml2LVxcdTAwM2VuZGV2KTtcXG4gXFx0a2ZyZWUocHJpdik7XFxuIFxcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xcbmluZGV4IGNiZWQxMGIxZDg2MmUuLmEzOGY5MGQzMDA2ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcXG5AQCAtMjYzLDYgKzI2Myw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XFxuIHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHJ0bmxfbG9jaygpO1xcbitcXHRkZXZfY2xvc2UoZGV2KTtcXG4gXFx0ZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6MzUuNDA3MDY0MjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzgyMDE5Njg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzdkMjMyNDAyMzlhNGVmOTIxYzVlMTNhZmE3OGQzZjQ5ZGYyMTRjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjEyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG4rKysgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcbkBAIC0zNCw4ICszNCw2IEBAXG4gI2RlZmluZSBURE1fUFBQT0hUX1NMSUNfTUFYSU5cbiAjZGVmaW5lIFJYX0JEX0VSUk9SUyAoUl9DRF9TIHwgUl9PVl9TIHwgUl9DUl9TIHwgUl9BQl9TIHwgUl9OT19TIHwgUl9MR19TKVxuIFxuLXN0YXRpYyBpbnQgdWhkbGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tXG4gc3RhdGljIHN0cnVjdCB1Y2NfdGRtX2luZm8gdXRkbV9wcmltYXJ5X2luZm8gPSB7XG4gXHQudWZfaW5mbyA9IHtcbiBcdFx0LnRzYSA9IDAsXG5AQCAtNzA1LDEyICs3MDMsMTggQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gXHRzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdiA9IGhkbGMtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCB1Y2NfdGRtICp1dGRtID0gcHJpdi1cdTAwM2V1dGRtO1xuLVx0aW50IHJjID0gMDtcbitcdGludCByYztcbiBcbiBcdGlmIChwcml2LVx1MDAzZWhkbGNfYnVzeSAhPSAxKSB7XG4rXHRcdHJjID0gaGRsY19vcGVuKGRldik7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4gXHRcdGlmIChyZXF1ZXN0X2lycShwcml2LVx1MDAzZXV0X2luZm8tXHUwMDNldWZfaW5mby5pcnEsXG4tXHRcdFx0XHR1Y2NfaGRsY19pcnFfaGFuZGxlciwgMCwgXCJoZGxjXCIsIHByaXYpKVxuK1x0XHRcdFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFwiaGRsY1wiLCBwcml2KSkge1xuK1x0XHRcdGhkbGNfY2xvc2UoZGV2KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdFx0fVxuIFxuIFx0XHRjZWNyX3N1YmJsb2NrID0gdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKFxuIFx0XHRcdFx0XHRwcml2LVx1MDAzZXV0X2luZm8tXHUwMDNldWZfaW5mby51Y2NfbnVtKTtcbkBAIC03MjksMTMgKzczMyw5IEBAIHN0YXRpYyBpbnQgdWhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0XHRuZXRkZXZfcmVzZXRfcXVldWUoZGV2KTtcbiBcdFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbi1cbi1cdFx0cmMgPSBoZGxjX29wZW4oZGV2KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHVoZGxjX2Nsb3NlKGRldik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWhkbGNfbWVtY2xlYW4oc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYpXG5AQCAtODg4LDYgKzg4OCwxMCBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHByaXYtXHUwMDNlbmRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0cHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspO1xuK1x0aWYgKCFwcml2LVx1MDAzZXVjY19wcmFtX2JhaylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtXHUwMDNlbmRldik7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbiBcbkBAIC04OTcsMTAgKzkwMSw2IEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRwcml2LVx1MDAzZWd1bXIgPSBpb3JlYWQzMmJlKFx1MDAyNnVmX3JlZ3MtXHUwMDNlZ3Vtcik7XG4gXHRwcml2LVx1MDAzZWd1ZW1yID0gaW9yZWFkOChcdTAwMjZ1Zl9yZWdzLVx1MDAzZWd1ZW1yKTtcbiBcbi1cdHByaXYtXHUwMDNldWNjX3ByYW1fYmFrID0ga21hbGxvY19vYmooKnByaXYtXHUwMDNldWNjX3ByYW1fYmFrKTtcbi1cdGlmICghcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuIFx0LyogYmFja3VwIEhETEMgcGFyYW1ldGVyICovXG4gXHRtZW1jcHlfZnJvbWlvKHByaXYtXHUwMDNldWNjX3ByYW1fYmFrLCBwcml2LVx1MDAzZXVjY19wcmFtLFxuIFx0XHQgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7XG5AQCAtMTI1NSw2ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuK1x0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVx1MDAzZW5kZXYpO1xuK1xuIFx0dWhkbGNfbWVtY2xlYW4ocHJpdik7XG4gXG4gXHRpZiAocHJpdi1cdTAwM2V1dGRtIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXV0ZG0tXHUwMDNlc2lfcmVncykge1xuQEAgLTEyNjYsNiArMTI2OCw3IEBAIHN0YXRpYyB2b2lkIHVjY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRpb3VubWFwKHByaXYtXHUwMDNldXRkbS1cdTAwM2VzaXJhbSk7XG4gXHRcdHByaXYtXHUwMDNldXRkbS1cdTAwM2VzaXJhbSA9IE5VTEw7XG4gXHR9XG4rXHRmcmVlX25ldGRldihwcml2LVx1MDAzZW5kZXYpO1xuIFx0a2ZyZWUocHJpdik7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJVQ0MgYmFzZWQgaGRsYyBtb2R1bGUgcmVtb3ZlZFxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuaW5kZXggY2JlZDEwYjFkODYyZS4uYTM4ZjkwZDMwMDZlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcbkBAIC0yNjMsNiArMjYzLDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbiB2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRydG5sX2xvY2soKTtcbitcdGRldl9jbG9zZShkZXYpO1xuIFx0ZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6MzUuNDA3MDY1ODc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEwNjUzNjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEZpcnN0LCB0aGUgdGFyZ2V0IGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGFyY2hpdGVjdHVyZSB3ZSdyZSBmb2N1c2VkIG9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgY2hhbmdlZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBXZSd2ZSBnb3QgYGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY2Agd2hpY2ggbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gVGhlbiwgd2UgaGF2ZSBgZHJpdmVycy9uZXQvd2FuL2hkbGMuY2AsIHNwZWNpZmljYWxseSwgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgd2hlcmUgYSBgZGV2X2Nsb3NlKGRldik7YCBjYWxsIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBgZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtgLlxuXG5Ob3csIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZXNlIGZpbGVzIGFjdHVhbGx5ICpkbyouIGBmc2xfdWNjX2hkbGMuY2AgYXBwZWFycyB0byBiZSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUG93ZXJQQy9GcmVlc2NhbGUgU29DIHBsYXRmb3Jtcy4gYGhkbGMuY2Agc2VlbXMgdG8gYmUgdGhlIGdlbmVyaWMgSERMQyBsYXllciwgd2hpY2ggbWlnaHQgYmUgbW9yZSBpbnRlcmVzdGluZyB0byBmdXp6IGlmIGl0J3MgYnJvYWRseSB1c2VkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBhcmUgZWl0aGVyIG9mIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIG9uIGFuIGFtZDY0IHN5c3RlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L3dhbi9gLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSdzIGFueSBjaGFuY2UgdGhleSdyZSBjb21waWxlZCBpbiBvciBtYWRlIGF2YWlsYWJsZSBvbiBhbWQ2NC4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhvc2UgS2NvbmZpZyBmaWxlcyB0byBmaWd1cmUgdGhpcyBvdXQuIElmIHRoZXkncmUgbm90LCB0aGVuIHdlIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo0My41MTM2MDQwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDQxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipIRExDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZz0yND1pZiBXQU5cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTI2LSMgR2VuZXJpYyBIRExDXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6Mjc6Y29uZmlnIEhETENcXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yOC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBIRExDIGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NDQ6Y29uZmlnIEhETENfUkFXXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo1Mjpjb25maWcgSERMQ19SQVdfRVRIXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNjItXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NjM6Y29uZmlnIEhETENfQ0lTQ09cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiQ2lzY28gSERMQyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzAtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NzE6Y29uZmlnIEhETENfRlJcXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy03Mi1cXHR0cmlzdGF0ZSBcXFwiRnJhbWUgUmVsYXkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTc4LVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjc5OmNvbmZpZyBIRExDX1BQUFxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJTeW5jaHJvbm91cyBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctODYtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6ODc6Y29uZmlnIEhETENfWDI1XFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIlguMjUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnPTE4MT1jb25maWcgRkFSU1lOQ1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctMTk5LVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIwMDpjb25maWcgRlNMX1FNQ19IRExDXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctMjAxLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzoyMTI6Y29uZmlnIEZTTF9VQ0NfSERMQ1xcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjQzLjU2MzgxMTg5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTA0MDY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsOlxuXG4qKkRlbHZpbmcgaW50byBIRExDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEhETEMgc3VwcG9ydCBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIEZyZWVzY2FsZSdzIFVDQyBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93YW4vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB3aWRlLWFyZWEgbmV0d29yayBkcml2ZXJzLCBpbmNsdWRpbmcgSERMQywgc2hvdWxkIHJlc2lkZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyBkZWFsaW5nIHdpdGggYEhETENgIGluIGdlbmVyYWwgYW5kIHRoZW4gem9vbSBpbiBvbiBhbnkgb3B0aW9ucyBzcGVjaWZpYyB0byBgRlNMX1VDQ19IRExDYC4gVGhlIGBGU0xfVUNDYCBpcywgb2YgY291cnNlLCB0aGUgRnJlZXNjYWxlIFVuaXZlcnNhbCBDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyLCBhIHBpZWNlIG9mIGhhcmR3YXJlIEkndmUgd29ya2VkIHdpdGggZXh0ZW5zaXZlbHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCBleHBsYWluaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIGFuZCBsaWtlbHkgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgYEtjb25maWdgIGZpbGUgd2lsbCByZWZlcmVuY2Ugb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwZXJoYXBzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aG9zZSByZWxhdGlvbnNoaXBzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgaW4gb3JkZXIgdG8gZW5hYmxlIEZyZWVzY2FsZSBIRExDIHN1cHBvcnQgYW5kIHdoYXQgaW1wYWN0IHRob3NlIGNob2ljZXMgd2lsbCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NDYuNDE0MjIwNDY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgd2FuIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFdBTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuIGludGVyZmFjZXMgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSwgc3VjaCBhcyBYLjI1LCBGcmFtZSBSZWxheSBhbmQgbGVhc2VkXFxuICAxMDpcXHRcXHQgIGxpbmVzLCBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykgb3ZlciB2YXN0XFxuICAxMTpcXHRcXHQgIGRpc3RhbmNlcyB3aXRoIGRhdGEgdHJhbnNmZXIgcmF0ZXMgc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZVxcbiAgMTI6XFx0XFx0ICBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBhc3luY2hyb25vdXMgbW9kZW0gY29ubmVjdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVXN1YWxseSwgYSBxdWl0ZSBleHBlbnNpdmUgZXh0ZXJuYWwgZGV2aWNlIGNhbGxlZCBhIGBXQU4gcm91dGVyJyBpc1xcbiAgMTU6XFx0XFx0ICBuZWVkZWQgdG8gY29ubmVjdCB0byBhIFdBTi4gQXMgYW4gYWx0ZXJuYXRpdmUsIGEgcmVsYXRpdmVseVxcbiAgMTY6XFx0XFx0ICBpbmV4cGVuc2l2ZSBXQU4gaW50ZXJmYWNlIGNhcmQgY2FuIGFsbG93IHlvdXIgTGludXggYm94IHRvIGRpcmVjdGx5XFxuICAxNzpcXHRcXHQgIGNvbm5lY3QgdG8gYSBXQU4uXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSWYgeW91IGhhdmUgb25lIG9mIHRob3NlIGNhcmRzIGFuZCB3aXNoIHRvIHVzZSBpdCB1bmRlciBMaW51eCxcXG4gIDIwOlxcdFxcdCAgc2F5IFkgaGVyZSBhbmQgYWxzbyB0byB0aGUgV0FOIGRyaXZlciBmb3IgeW91ciBjYXJkLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMzpcXHRcXG4gIDI0OlxcdGlmIFdBTlxcbiAgMjU6XFx0XFxuICAyNjpcXHQjIEdlbmVyaWMgSERMQ1xcbiAgMjc6XFx0Y29uZmlnIEhETENcXG4gIDI4OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEhETEMgbGF5ZXJcXFwiXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIHRvIHRoaXMgb3B0aW9uIGlmIHlvdXIgTGludXggYm94IGNvbnRhaW5zIGEgV0FOIChXaWRlIEFyZWFcXG4gIDMxOlxcdFxcdCAgTmV0d29yaykgY2FyZCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgYW5kIHlvdSBhcmUgcGxhbm5pbmcgdG9cXG4gIDMyOlxcdFxcdCAgY29ubmVjdCB0aGUgYm94IHRvIGEgV0FOLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydGluZyBzb2Z0d2FyZSBmcm9tXFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9oZGxjL1xcdTAwM2UuXFxuICAzNjpcXHRcXHQgIEdlbmVyaWMgSERMQyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHJhdyBIRExDLCBDaXNjbyBIRExDLCBGcmFtZVxcbiAgMzc6XFx0XFx0ICBSZWxheSwgc3luY2hyb25vdXMgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgYW5kIFguMjUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA0MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZGxjLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBIRExDX1JBV1xcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIHN1cHBvcnRcXFwiXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBIRExDX1JBV19FVEhcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJSYXcgSERMQyBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgcmF3IEhETEMgRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvblxcbiAgNTc6XFx0XFx0ICBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBZb3Ugd2lsbCBuZWVkIGl0IGZvciBFdGhlcm5ldCBvdmVyIEhETEMgYnJpZGdlcy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRjb25maWcgSERMQ19DSVNDT1xcbiAgNjQ6XFx0XFx0dHJpc3RhdGUgXFxcIkNpc2NvIEhETEMgc3VwcG9ydFxcXCJcXG4gIDY1OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgQ2lzY28gSERMQyBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzA6XFx0XFxuICA3MTpcXHRjb25maWcgSERMQ19GUlxcbiAgNzI6XFx0XFx0dHJpc3RhdGUgXFxcIkZyYW1lIFJlbGF5IHN1cHBvcnRcXFwiXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDc0OlxcdFxcdGhlbHBcXG4gIDc1OlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIEZyYW1lIFJlbGF5IG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBIRExDX1BQUFxcbiAgODA6XFx0XFx0dHJpc3RhdGUgXFxcIlN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnRcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIFBQUCBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgSERMQ19YMjVcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJYLjI1IHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICA4OTpcXHRcXHRkZXBlbmRzIG9uIEhETEMgXFx1MDAyNlxcdTAwMjYgKExBUEI9bSBcXHUwMDI2XFx1MDAyNiBIRExDPW0gfHwgTEFQQj15KVxcbiAgOTA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo0Ni40MTQyOTg5MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUzODg0NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE92ZXJzaWdodCoqXG5cbkhtbSwgSSdtIGp1c3QgcXVpY2tseSBjcm9zcy1jaGVja2luZyBzb21ldGhpbmcgaGVyZS4gSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIHdoaWxlIEkgd2FzIGF0IGl0LCBpdCBvY2N1cnJlZCB0byBtZSB0aGF0IHdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgRlNMX1VDQ19IRExDYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93YW4vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uIHRoZXJlLCBnaXZlbiB0aGUgY29udGV4dCB3ZSBhcmUgZXhhbWluaW5nLiBObyBwb2ludCBpbiBtYWtpbmcgYXNzdW1wdGlvbnMsIGJldHRlciB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NDguMTY4MTg2MTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdGNvbmZpZyBGU0xfUU1DX0hETENcXG4gMjAxOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFxcXCJcXG4gMjAyOlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAyMDM6XFx0XFx0ZGVwZW5kcyBvbiBDUE1fUU1DXFxuIDIwNDpcXHRcXHRoZWxwXFxuIDIwNTpcXHRcXHQgIEhETEMgc3VwcG9ydCB1c2luZyB0aGUgRnJlZXNjYWxlIFFVSUNDIE11bHRpY2hhbm5lbCBDb250cm9sbGVyIChRTUMpLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMDg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnNsX3FtY19oZGxjLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIxMTpcXHRcXG4gMjEyOlxcdGNvbmZpZyBGU0xfVUNDX0hETENcXG4gMjEzOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgc3VwcG9ydFxcXCJcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkVcXG4gMjE2OlxcdFxcdGhlbHBcXG4gMjE3OlxcdFxcdCAgRHJpdmVyIGZvciBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgY29udHJvbGxlci4gVGhlIGRyaXZlclxcbiAyMTg6XFx0XFx0ICBzdXBwb3J0cyBIRExDIGluIE5NU0kgYW5kIFRETSBtb2RlLlxcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnNsX3VjY19oZGxjLlxcbiAyMjI6XFx0XFxuIDIyMzpcXHRjb25maWcgU0xJQ19EUzI2NTIyXFxuIDIyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2xpYyBNYXhpbSBkczI2NTIyIGNhcmQgc3VwcG9ydFxcXCJcXG4gMjI1OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuIDIyNjpcXHRcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgQVJDSF9NWEMgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVFxcbiAyMjc6XFx0XFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIHNsaWMgbWF4aW0gY2FyZFxcbiAyMzA6XFx0XFx0ICBpbiBUMSBvciBFMSBtb2RlLlxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMzM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2xpY19kczI2NTIyLlxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRjb25maWcgSVhQNFhYX0hTU1xcbiAyMzY6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIElYUDR4eCBIU1MgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0KSBzdXBwb3J0XFxcIlxcbiAyMzc6XFx0XFx0ZGVwZW5kcyBvbiBIRExDIFxcdTAwMjZcXHUwMDI2IElYUDRYWF9OUEUgXFx1MDAyNlxcdTAwMjYgSVhQNFhYX1FNR1JcXG4gMjM4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9JWFA0WFggXFx1MDAyNlxcdTAwMjYgT0ZcXG4gMjM5OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjQ4LjE2ODI5MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNDQxNzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUVVJQ0NfRU5HSU5FKipcblxuQWxyaWdodCwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHJlcXVpcmVtZW50cyBmb3IgYFFVSUNDX0VOR0lORWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIHJpZ2h0IG5vdyBpcyB3aGV0aGVyIGl0IGhpbmdlcyBvbiBhIFBvd2VyUEMgKG9yIHNpbWlsYXIgYXJjaGl0ZWN0dXJlKSBlbnZpcm9ubWVudCwgb3IgaWYgaXQncyB0aWVkIHRvIGEgYENPTVBJTEVfVEVTVGAgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXksIGFzIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggZGVwbG95bWVudCBhbmQgdGVzdGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBpbmNsdXNpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBoZXJlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBRVUlDQ19FTkdJTkVgLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBpdHNlbGYgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NTAuMjAyNzEyMDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3MDA4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRVUlDQ19FTkdJTkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNS1cXG5kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZzo2OmNvbmZpZyBRVUlDQ19FTkdJTkVcXG5kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFVSUNDIEVuZ2luZSAoUUUpIGZyYW1ld29yayBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo1MS45MTk3MzA1MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MTU3Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciB0aGUgRnJlZXNjYWxlIFFFIERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIEZyZWVzY2FsZSBRRSBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgaG93IGl0J3Mgc2V0IHVwLiBMZXQncyBzZWUgd2hhdCdzIGluIGBkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhpcyBkcml2ZXIgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgdGhpcyBkcml2ZXIgaGFzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBRRSBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFyY2hpdGVjdHVyZSwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGl0IHN1cHBvcnRzLCBhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIGl0IHJlbGllcyBvbi4gVGltZSB0byBnZXQgc3RhcnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjU0LjIwMTMwNzExM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBRRSBDb21tdW5pY2F0aW9uIG9wdGlvbnNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFFVSUNDX0VOR0lORVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IEhBU19JT01FTVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQUEMgfHwgQVJNIHx8IEFSTTY0IHx8IENPTVBJTEVfVEVTVFxcbiAgMTA6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhlIFFVSUNDIEVuZ2luZSAoUUUpIGlzIGEgbmV3IGdlbmVyYXRpb24gb2YgY29tbXVuaWNhdGlvbnNcXG4gIDE0OlxcdFxcdCAgY29wcm9jZXNzb3JzIG9uIEZyZWVzY2FsZSBlbWJlZGRlZCBDUFVzIChha2luIHRvIENQTSBpbiBvbGRlciBjaGlwcykuXFxuICAxNTpcXHRcXHQgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHlvdSB3aXNoIHRvIGJ1aWxkIGEga2VybmVsXFxuICAxNjpcXHRcXHQgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVUNDX1NMT1dcXG4gIDE5OlxcdFxcdGJvb2xcXG4gIDIwOlxcdFxcdGRlZmF1bHQgeSBpZiBTRVJJQUxfUUUgfHwgKENQTV9RTUMgXFx1MDAyNlxcdTAwMjYgUVVJQ0NfRU5HSU5FKVxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0Mgc2xvd1xcbiAgMjM6XFx0XFx0ICBwcm90b2NvbHM6IFVBUlQsIEJJU1lOQywgUU1DXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBVQ0NfRkFTVFxcbiAgMjY6XFx0XFx0Ym9vbFxcbiAgMjc6XFx0XFx0ZGVmYXVsdCB5IGlmIFVDQ19HRVRIIHx8IFFFX1RETVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0MgZmFzdFxcbiAgMzA6XFx0XFx0ICBwcm90b2NvbHM6IEhETEMsIEV0aGVybmV0LCBBVE0sIHRyYW5zcGFyZW50XFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVQ0NcXG4gIDMzOlxcdFxcdGJvb2xcXG4gIDM0OlxcdFxcdGRlZmF1bHQgeSBpZiBVQ0NfRkFTVCB8fCBVQ0NfU0xPVyB8fCAoQ1BNX1RTQSBcXHUwMDI2XFx1MDAyNiBRVUlDQ19FTkdJTkUpXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBDUE1fVFNBXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ1BNL1FFIFRTQSBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU1cXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gQ1BNMSB8fCBRVUlDQ19FTkdJTkUgfHwgXFxcXFxcbiAgNDA6XFx0XFx0XFx0ICAgKChDUE0gfHwgUVVJQ0NfRU5HSU5FKSBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjU0LjIwMTM3NDQwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzAxNTM0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgZnNsX3VjY19oZGxjYCBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSERMQyBjb250cm9sbGVyIG9uIEZyZWVzY2FsZSdzIFFVSUNDIEVuZ2luZS4gVGhhdCBtYWtlcyBzZW5zZSwgUVVJQ0MgRW5naW5lcyBhcmUgZW1iZWRkZWQgU29Dcy4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3b25kZXIuLi4gd2hhdCdzIGdvaW5nIG9uIHdpdGggYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2VuZXJhbCBIRExDIGZyYW1ld29yayBpbnRlcmFjdHMgd2l0aCB0aGlzIHNwZWNpZmljIFFVSUNDIEVuZ2luZSBkcml2ZXIuXG5cbkxldCdzIGRpdmUgaW50byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgd2l0aGluIGBoZGxjLmNgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzLCBzbyBJIHNob3VsZCBzZWUgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlICp1c2luZyogaXQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMsIGRldGVybWluZSBob3cgSERMQyBkZXZpY2VzIGFyZSBiZWluZyBtYW5hZ2VkLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKmNyZWF0ZSogdGhlc2UgSERMQyBkZXZpY2VzIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgb24gYW4gYW1kNjQgbWFjaGluZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgY2FuIHRlc3QsIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcywgSSdsbCBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBiYXNlIGZvciBjYWxsZXJzIG9mIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCwgYnV0IGFsc28gYGFsbG9jX2hkbGNkZXZgIGFuZCBgcmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGxpZmVjeWNsZSBhbmQgaG93IHRoaXMgUVVJQ0MgRW5naW5lIGRyaXZlciBpbnRlZ3JhdGVzLCBpZiBhdCBhbGwsIHdpdGggYW55IGdlbmVyYWwgSERMQyBmcmFtZXdvcmsuIEdvdHRhIHB1bGwgdXAgbXkgdG9vbHMgYW5kIHNlYXJjaCBmb3IgYWxsIHJlZmVyZW5jZXMgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NTcuNTAyOTExMDg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDUxMzg2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlfHJlZ2lzdGVyX2hkbGNfZGV2aWNlfGFsbG9jX2hkbGNkZXYpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dhbi9jMTAxLmM9Mjk5PXN0YXRpYyBpbnQgX19pbml0IGMxMDFfcnVuKHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIHdpbmJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTMxOS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjMyMDpcXHRjYXJkLVxcdTAwM2VkZXYgPSBhbGxvY19oZGxjZGV2KGNhcmQpO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzIxLVxcdGlmICghY2FyZC1cXHUwMDNlZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTM3MC1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjM3MTpcXHRyZXN1bHQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzcyLVxcdGlmIChyZXN1bHQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmM9NDIwPXN0YXRpYyB2b2lkIF9fZXhpdCBjMTAxX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVxcdFxcdGNhcmQgPSBjYXJkLVxcdTAwM2VuZXh0X2NhcmQ7XFxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYzo0Mjg6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTQyOS1cXHRcXHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMjg2PWZzdF9pbml0X2NhcmQoc3RydWN0IGZzdF9jYXJkX2luZm8gKmNhcmQpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIyOTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0czsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMjk2OlxcdFxcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXFx1MDAzZXBvcnRzW2ldLmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMjk3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDAtXFx0XFx0XFx0d2hpbGUgKGktLSlcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjIzMDE6XFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjMwMi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMzI2PWZzdF9hZGRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNDE0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjYXJkLVxcdTAwM2VucG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM6MjQxNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbaV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNi1cXHRcXHRoZGxjX2RldmljZSAqaGRsYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwNi1cXHRmb3IgKGkgPSAwIDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0cyA7IGkrKylcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwOC1pbml0X2NhcmRfZmFpbDpcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0MC1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTcwNj1zdGF0aWMgaW50IHFtY19oZGxjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzUxLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYzo3NTI6XFx0cW1jX2hkbGMtXFx1MDAzZW5ldGRldiA9IGFsbG9jX2hkbGNkZXYocW1jX2hkbGMpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03NTMtXFx0aWYgKCFxbWNfaGRsYy1cXHUwMDNlbmV0ZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzYzLVxcdHFtY19oZGxjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cW1jX2hkbGNfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6NzY0OlxcdHJldCA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03NjUtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTc4MD1zdGF0aWMgdm9pZCBxbWNfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc4NDpcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODUtXFx0ZnJlZV9uZXRkZXYocW1jX2hkbGMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTEwNz1zdGF0aWMgaW50IHVjY19oZGxjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIxNC1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTIxNTpcXHRkZXYgPSBhbGxvY19oZGxjZGV2KHVoZGxjX3ByaXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjE2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIyOS1cXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHQoZGV2LCBcXHUwMDI2dWhkbGNfcHJpdi1cXHUwMDNlbmFwaSwgdWNjX2hkbGNfcG9sbCwgMzIpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjMwOlxcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyMzEtXFx0XFx0cmV0ID0gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTI1ND1zdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjU4OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTktXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTI0MT1zdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1MC1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI1MTpzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI2MTpFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI3MTpFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xMzg3PXN0YXRpYyBpbnQgaXhwNHh4X2hzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYy0xNDg4LVxcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM6MTQ4OTpcXHRuZGV2ID0gYWxsb2NfaGRsY2Rldihwb3J0KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE0OTAtXFx0aWYgKCFuZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MDgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTA5OlxcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUxMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xNTI1PXN0YXRpYyB2b2lkIGl4cDR4eF9oc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTI5OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MzAtXFx0ZnJlZV9uZXRkZXYocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTI4NT1zdGF0aWMgdm9pZCBuMl9kZXN0cm95X2NhcmQoY2FyZF90ICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjI5MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTMyMT1zdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDYtXFxuZHJpdmVycy9uZXQvd2FuL24yLmM6MzQ3OlxcdGNhcmQtXFx1MDAzZXBvcnRzWzBdLmRldiA9IGFsbG9jX2hkbGNkZXYoXFx1MDAyNmNhcmQtXFx1MDAzZXBvcnRzWzBdKTtcXG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDg6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMV0uZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTM0OS1cXHRpZiAoIWNhcmQtXFx1MDAzZXBvcnRzWzBdLmRldiB8fCAhY2FyZC1cXHUwMDNlcG9ydHNbMV0uZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vbjIuYy00NTgtXFxuZHJpdmVycy9uZXQvd2FuL24yLmM6NDU5OlxcdFxcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtNDYwLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yNDY9c3RhdGljIHZvaWQgcGMzMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0yNTItXFx0XFx0aWYgKGNhcmQtXFx1MDAzZXBvcnRzW2ldLmNhcmQpXFxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM6MjUzOlxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0yNTQtXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yODI9c3RhdGljIGludCBwYzMwMF9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0zNTMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5fcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjM1NDpcXHRcXHRjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYgPSBhbGxvY19oZGxjZGV2KFxcdTAwMjZjYXJkLVxcdTAwM2Vwb3J0c1tpXSk7XFxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMtMzU1LVxcdFxcdGlmICghY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTAtXFx0XFx0c2NhX2luaXRfcG9ydChwb3J0KTtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzo0NTE6XFx0XFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTItXFx0XFx0XFx0cHJfZXJyKFxcXCJ1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jPTIyNz1zdGF0aWMgdm9pZCBwY2kyMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjMzLVxcdFxcdGlmIChjYXJkLVxcdTAwM2Vwb3J0c1tpXS5jYXJkKVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyMzQ6XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yMzUtXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM9MjYzPXN0YXRpYyBpbnQgcGNpMjAwX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTAtXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyOTE6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMF0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMF0pO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyOTI6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMV0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTMtXFx0aWYgKCFjYXJkLVxcdTAwM2Vwb3J0c1swXS5uZXRkZXYgfHwgIWNhcmQtXFx1MDAzZXBvcnRzWzFdLm5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTM4NC1cXHRcXHRzY2FfaW5pdF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzozODU6XFx0XFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMzg2LVxcdFxcdFxcdHByX2VycihcXFwidW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTQ4Nj1zdGF0aWMgdm9pZCB3YW54bF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FyZC1cXHUwMDNlbl9wb3J0czsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NDkyOlxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy00OTMtXFx0XFx0ZnJlZV9uZXRkZXYoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTUzMz1zdGF0aWMgaW50IHdhbnhsX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTc1MC1cXHRcXHRzdHJ1Y3QgcG9ydCAqcG9ydCA9IFxcdTAwMjZjYXJkLVxcdTAwM2Vwb3J0c1tpXTtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYzo3NTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2hkbGNkZXYocG9ydCk7XFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzY5LVxcdFxcdGdldF9zdGF0dXMocG9ydCktXFx1MDAzZWNsb2NraW5nID0gQ0xPQ0tfRVhUO1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjc3MDpcXHRcXHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTc3MS1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiB1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaD01Nz1pbnQgaGRsY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZfc2V0dGluZ3MgKmlmcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC01OS0vKiBNdXN0IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIG9uIG1vZHVsZSBzdGFydHVwL2V4aXQgKi9cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaDo2MDojZGVmaW5lIHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldilcXHRyZWdpc3Rlcl9uZXRkZXYoZGV2KVxcbmluY2x1ZGUvbGludXgvaGRsYy5oOjYxOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC02Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaGRsYy5oPTY1PXZvaWQgdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byk7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjYtXFxuaW5jbHVkZS9saW51eC9oZGxjLmg6Njc6c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2hkbGNkZXYodm9pZCAqcHJpdik7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjAwLjU1NDMwMjQ2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDAyNTUxMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkhETEMgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIG9mIEhETEMgZHJpdmVycyB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGFyZSB3ZSBkZWFsaW5nIGV4Y2x1c2l2ZWx5IHdpdGggcGh5c2ljYWwgV0FOIGNhcmRzIGhlcmUsIG9yIGFyZSB0aGVyZSBhbnkgdmlydHVhbCBpbXBsZW1lbnRhdGlvbnMgZmxvYXRpbmcgYXJvdW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBhbGwgdGhlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC93YW4vYCBkaXJlY3RvcnksIG5hdHVyYWxseS4gQnV0LCBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZywgc28gSSBzaG91bGQgZXhwYW5kIG15IHNlYXJjaCBtb3JlIGJyb2FkbHkuIEknbGwgbmVlZCB0byBjaGVjayBhbnl3aGVyZSBlbHNlIHRoYXQgbWlnaHQgdG91Y2ggSERMQyBkaXJlY3RseS4gTXkgc2VhcmNoIHRlcm1zIHdpbGwgYmUgYEhETENgIGl0c2VsZiwgcGx1cyBhbnkgaW5zdGFuY2VzIG9mIGBhbGxvY19oZGxjZGV2YCBvciBgcmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaG9zZSBmdW5jdGlvbiBjYWxscyBzaG91bGQgYmUga2V5IGluZGljYXRvcnMuXG5cbkFjdHVhbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMsIGxldCdzIHN0YXJ0IHdpdGggYSBzaW1wbGUgaW52ZW50b3J5LiBGaXJzdCwgSSB3aWxsIGxpc3QgYWxsIHRoZSBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dhbi9gLiBUaGVuLCBiYXNlZCBvbiB0aGlzIGludmVudG9yeSwgSSB3aWxsIHJlZmluZSBteSBzZWFyY2ggYXMgbmVlZGVkLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBoZWxwIGtlZXAgdGhpbmdzIG9yZ2FuaXplZCBhbmQgcHJldmVudCBtZSBmcm9tIG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjA2LjU1Njg1NTgzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImMxMDEuY1wiLFxuICAgIFwiZmFyc3luYy5jXCIsXG4gICAgXCJmYXJzeW5jLmhcIixcbiAgICBcImZzbF9xbWNfaGRsYy5jXCIsXG4gICAgXCJmc2xfdWNjX2hkbGMuY1wiLFxuICAgIFwiZnNsX3VjY19oZGxjLmhcIixcbiAgICBcImhkNjQ1NzAuY1wiLFxuICAgIFwiaGQ2NDU3MC5oXCIsXG4gICAgXCJoZDY0NTcyLmNcIixcbiAgICBcImhkNjQ1NzIuaFwiLFxuICAgIFwiaGRsYy5jXCIsXG4gICAgXCJoZGxjX2Npc2NvLmNcIixcbiAgICBcImhkbGNfZnIuY1wiLFxuICAgIFwiaGRsY19wcHAuY1wiLFxuICAgIFwiaGRsY19yYXcuY1wiLFxuICAgIFwiaGRsY19yYXdfZXRoLmNcIixcbiAgICBcImhkbGNfeDI1LmNcIixcbiAgICBcIml4cDR4eF9oc3MuY1wiLFxuICAgIFwibGFwYmV0aGVyLmNcIixcbiAgICBcIm4yLmNcIixcbiAgICBcInBjMzAwdG9vLmNcIixcbiAgICBcInBjaTIwMHN5bi5jXCIsXG4gICAgXCJzbGljX2RzMjY1MjIuY1wiLFxuICAgIFwic2xpY19kczI2NTIyLmhcIixcbiAgICBcIndhbnhsLmNcIixcbiAgICBcIndhbnhsLmhcIixcbiAgICBcIndhbnhsZncuU1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJmcmFtZXJcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzowNi41NTY5MzI0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5ODkxNzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBIRExDIERldmljZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGxhbmRzY2FwZSBhbmQgc2VlIHdoYXQncyBvdXQgdGhlcmUgdXNpbmcgYGFsbG9jX2hkbGNkZXZgLiAgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYWxsIHRoZSBIRExDIGRldmljZXMgd2UncmUgZGVhbGluZyB3aXRoLiBMZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBzd2VlcC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQ6XG5cbiogICBgYzEwMS5jYCDigJMgdGhhdCdzIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGdvb2QgdG8ga25vdy5cbiogICBgZmFyc3luYy5jYCDigJMgY292ZXJpbmcgRmFyU3luYyBQQ0kvUENJZSBzeW5jIGNhcmRzLiBHb3QgaXQuXG4qICAgYGZzbF9xbWNfaGRsYy5jYCDigJMgRnJlZXNjYWxlIFFNQyBwbGF0Zm9ybSBkZXZpY2VzLiBDaGVja2luZy5cbiogICBgZnNsX3VjY19oZGxjLmNgIOKAkyBhbmQgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgcGxhdGZvcm0gZGV2aWNlcy5cbiogICBgaXhwNHh4X2hzcy5jYCDigJMgdGhlIEludGVsIElYUDR4eCBTb0Mgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuXG4qICAgYG4yLmNgIOKAkyBoYW5kbGluZyB0aGUgU0RMIFJJU0NvbS9OMiBJU0EgY2FyZC5cbiogICBgcGMzMDB0b28uY2Ag4oCTIEN5Y2xhZGVzLVBDMzAwIFBDSSBjYXJkLlxuKiAgIGBwY2kyMDBzeW4uY2Ag4oCTIHRoZSBHb3JhbW8gUENJMjAwU3luIFBDSSBjYXJkLlxuKiAgIGB3YW54bC5jYCDigJMgU0JFIEluYy4gd2FuWEwgUENJIGNhcmQuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBsaXN0LCBJIG5lZWQgdG8gYmUgKnRob3JvdWdoKi4gSSBzaG91bGQgd2lkZW4gdGhlIG5ldCBhIGJpdC4gSXMgYW55dGhpbmcgZWxzZSBjcmVhdGluZyBhbiBIRExDIGRldmljZSB1c2luZyBhIGRpZmZlcmVudCBhbGxvY2F0aW9uIG1ldGhvZCwgb3IgcGVyaGFwcyBsZXZlcmFnaW5nIGBoZGxjLmNgIGRpcmVjdGx5PyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgbGFwYmV0aGVyLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGl0IGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTAuMjU1ODUyMjY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI3MzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz0zMDE9c3RhdGljIGludCBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMwOC1cXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6MzA5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgbGFwYmV0aF9jYWxsYmFja3MgPSB7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMxMC1cXHQuY29ubmVjdF9jb25maXJtYXRpb24gICAgPSBsYXBiZXRoX2Nvbm5lY3RlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz0zODE9c3RhdGljIGludCBsYXBiZXRoX25ld19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy00MTktXFx0cmMgPSAtRUlPO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo0MjA6XFx0aWYgKHJlZ2lzdGVyX25ldGRldmljZShuZGV2KSlcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDIxLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00MzU9c3RhdGljIHZvaWQgbGFwYmV0aF9mcmVlX2RldmljZShzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy00MzgtXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZsYXBiZXRoLVxcdTAwM2Vub2RlKTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NDM5OlxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGxhcGJldGgtXFx1MDAzZWF4ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00OTg9c3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUwMy1cXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NTA0OlxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2bGFwYmV0aF9kZXZfbm90aWZpZXIpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MDUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jPTUxNj1zdGF0aWMgdm9pZCBfX2V4aXQgbGFwYmV0aF9jbGVhbnVwX2RyaXZlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyMS1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNmxhcGJldGhfcGFja2V0X3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo1MjI6XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmxhcGJldGhfZGV2X25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyOC1cXHRcXHRkZXZfcHV0KGxhcGJldGgtXFx1MDAzZWV0aGRldik7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUyOTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZShsYXBiZXRoLVxcdTAwM2VheGRldik7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjEwLjMxMDEzMzc4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5ODA4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIEhETEMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoaXMgSERMQyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGdlbmVyaWMgSERMQyBpcyBoYW5kbGVkIGhlcmUuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgaGRsYy5jYCBmcm9tIHRvcCB0byBib3R0b20uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb3JlIGxvZ2ljIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gZGF0YSBmcmFtaW5nLCBlcnJvciBkZXRlY3Rpb24sIGZsYWcgaGFuZGxpbmcsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MsIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZGVzaWduIHRoYXQgbWFrZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRpY2suIFVuZGVyc3RhbmRpbmcgdGhlIGdlbmVyaWMgSERMQyBhc3BlY3RzIGlzIGNydWNpYWwgYmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyLCBhcyBpdCBsaWtlbHkgZm9ybXMgdGhlIGJhc2lzIGZvciBhbnkgcHJvdG9jb2wgZXh0ZW5zaW9ucyBvciBjdXN0b21pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTIuNTg5OTQzOTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93YW4vaGRsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBHZW5lcmljIEhETEMgc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA4IEtyenlzenRvZiBIYWxhc2EgXFx1MDAzY2toY0BwbS53YXcucGxcXHUwMDNlXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQ3VycmVudGx5IHN1cHBvcnRlZDpcXG4gICA4OlxcdCAqXFx0KiByYXcgSVAtaW4tSERMQ1xcbiAgIDk6XFx0ICpcXHQqIENpc2NvIEhETENcXG4gIDEwOlxcdCAqXFx0KiBGcmFtZSBSZWxheSB3aXRoIEFOU0kgb3IgQ0NJVFQgTE1JIChib3RoIHVzZXIgYW5kIG5ldHdvcmsgc2lkZSlcXG4gIDExOlxcdCAqXFx0KiBQUFBcXG4gIDEyOlxcdCAqXFx0KiBYLjI1XFxuICAxMzpcXHQgKlxcbiAgMTQ6XFx0ICogVXNlIHNldGhkbGMgdXRpbGl0eSB0byBzZXQgbGluZSBwYXJhbWV0ZXJzLCBwcm90b2NvbCBhbmQgUFZDc1xcbiAgMTU6XFx0ICpcXG4gIDE2OlxcdCAqIEhvdyBkb2VzIGl0IHdvcms6XFxuICAxNzpcXHQgKiAtIHByb3RvLVxcdTAwM2VvcGVuKCksIGNsb3NlKCksIHN0YXJ0KCksIHN0b3AoKSBjYWxscyBhcmUgc2VyaWFsaXplZC5cXG4gIDE4OlxcdCAqICAgVGhlIG9yZGVyIGlzOiBvcGVuLCBbIHN0YXJ0LCBzdG9wIC4uLiBdIGNsb3NlIC4uLlxcbiAgMTk6XFx0ICogLSBwcm90by1cXHUwMDNlc3RhcnQoKSBhbmQgc3RvcCgpIGFyZSBjYWxsZWQgd2l0aCBzcGluX2xvY2tfaXJxIGhlbGQuXFxuICAyMDpcXHQgKi9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMjM6XFx0XFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9oZGxjLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldGRldmljZS5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAgMzM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDM0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSBcXFwiSERMQyBzdXBwb3J0IG1vZHVsZSByZXZpc2lvbiAxLjIyXFxcIjtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0I3VuZGVmIERFQlVHX0xJTktcXG4gIDQyOlxcdFxcbiAgNDM6XFx0c3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvICpmaXJzdF9wcm90bztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0c3RydWN0IGhkbGNfZGV2aWNlICpoZGxjO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQvKiBGaXJzdCBtYWtlIHN1cmUgXFxcImRldlxcXCIgaXMgYW4gSERMQyBkZXZpY2UgKi9cXG4gIDUxOlxcdFxcdGlmICghKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9XQU5fSERMQykpIHtcXG4gIDUyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbiAgNTQ6XFx0XFx0fVxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuICA1OTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNjE6XFx0XFx0fVxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRCVUdfT04oIWhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VuZXRpZl9yeCk7XFxuICA2NDpcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZW5ldGlmX3J4KHNrYik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdG5ldGRldl90eF90IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAgNzA6XFx0XFxuICA3MTpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXhtaXQpXFxuICA3MjpcXHRcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXhtaXQoc2tiLCBkZXYpO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNleG1pdChza2IsIGRldik7IC8qIGNhbGwgaGFyZHdhcmUgZHJpdmVyIGRpcmVjdGx5ICovXFxuICA3NTpcXHR9XFxuICA3NjpcXHRFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3Byb3RvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdGlmIChoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RhcnQpXFxuICA4MzpcXHRcXHRcXHRoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RhcnQoZGV2KTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXN0b3ApXFxuICA5MTpcXHRcXHRcXHRoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RvcChkZXYpO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcXG4gIDk1OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqcHRyKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAgOTg6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGM7XFxuICA5OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMDA6XFx0XFx0aW50IG9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoxMi41OTAwNTk4MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwOTEzMTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC93YW4vaGRsYy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBgaGRsYy5jYCBmaWxlIGhhcyB0byBvZmZlciBpbiB0aGUgYHdhbmAgbmV0d29yayBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEhpZ2gtTGV2ZWwgRGF0YSBMaW5rIENvbnRyb2wgKEhETEMpIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGtlcm5lbCBzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIEhETEMgZnJhbWluZyBtZWNoYW5pc21zLCBlcnJvciBkZXRlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBzb21lIGhhcmR3YXJlLXNwZWNpZmljIGludGVyYWN0aW9uIGlmIGl0J3Mgbm90IGEgcHVyZWx5IHNvZnR3YXJlLWJhc2VkIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWcgc2VxdWVuY2UgaGFuZGxpbmcsIGFkZHJlc3MgYW5kIGNvbnRyb2wgZmllbGQgcHJvY2Vzc2luZywgQ1JDIGNhbGN1bGF0aW9ucywgYW5kIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLCBlc3BlY2lhbGx5IGFyb3VuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgb3IgRE1BIHVzYWdlIGlmIGl0J3MgdGhlcmUsIHRvIHNlZSBob3cgdGhleSdyZSBtYXhpbWl6aW5nIHRocm91Z2hwdXQgZm9yIFdBTiBjb25uZWN0aW9ucyB1c2luZyB0aGlzIHByb3RvY29sLiBUaGUgY29kZSBzaG91bGQgcmV2ZWFsIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCBIRExDIHZhcmlhbnRzIGFzIHdlbGwsIGxpa2UgQ2lzY28gSERMQyBvciBGcmFtZSBSZWxheSwgaWYgc3VwcG9ydGVkLiBMZXQncyBzdGFydCBkaXNzZWN0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTUuMjk5MTkzNjQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dhbi9oZGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXG4gMTAyOlxcdFxcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXFx1MDAyNmluaXRfbmV0KSlcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSlcXG4gMTA2OlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovXFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmIChldmVudCAhPSBORVRERVZfQ0hBTkdFKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBPbmx5IGludGVyZXN0ZWQgaW4gY2FycmllciBjaGFuZ2VzICovXFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdG9uID0gbmV0aWZfY2Fycmllcl9vayhkZXYpO1xcbiAxMTI6XFx0XFxuIDExMzpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxMTQ6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX2RldmljZV9ldmVudCBORVRERVZfQ0hBTkdFLCBjYXJyaWVyICVpXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNlbmFtZSwgb24pO1xcbiAxMTY6XFx0I2VuZGlmXFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdGhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAxMTk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZWNhcnJpZXIgPT0gb24pXFxuIDEyMjpcXHRcXHRcXHRnb3RvIGNhcnJpZXJfZXhpdDsgLyogbm8gY2hhbmdlIGluIERDRCBsaW5lIGxldmVsICovXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGhkbGMtXFx1MDAzZWNhcnJpZXIgPSBvbjtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0aWYgKCFoZGxjLVxcdTAwM2VvcGVuKVxcbiAxMjc6XFx0XFx0XFx0Z290byBjYXJyaWVyX2V4aXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdGlmIChoZGxjLVxcdTAwM2VjYXJyaWVyKSB7XFxuIDEzMDpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJDYXJyaWVyIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4gMTMxOlxcdFxcdFxcdGhkbGNfcHJvdG9fc3RhcnQoZGV2KTtcXG4gMTMyOlxcdFxcdH0gZWxzZSB7XFxuIDEzMzpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJDYXJyaWVyIGxvc3RcXFxcblxcXCIpO1xcbiAxMzQ6XFx0XFx0XFx0aGRsY19wcm90b19zdG9wKGRldik7XFxuIDEzNTpcXHRcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdGNhcnJpZXJfZXhpdDpcXG4gMTM4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gMTM5OlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMTQwOlxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0LyogTXVzdCBiZSBjYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gSERMQyBkZXZpY2UgaXMgYmVpbmcgb3BlbmVkICovXFxuIDE0MzpcXHRpbnQgaGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDE0NDpcXHR7XFxuIDE0NTpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDE0NjpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxNDc6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX29wZW4oKSBjYXJyaWVyICVpIG9wZW4gJWlcXFxcblxcXCIsIGRldi1cXHUwMDNlbmFtZSxcXG4gMTQ4OlxcdFxcdCAgICAgICBoZGxjLVxcdTAwM2VjYXJyaWVyLCBoZGxjLVxcdTAwM2VvcGVuKTtcXG4gMTQ5OlxcdCNlbmRpZlxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoIWhkbGMtXFx1MDAzZXByb3RvKVxcbiAxNTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFx0Lyogbm8gcHJvdG9jb2wgYXR0YWNoZWQgKi9cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VvcGVuKSB7XFxuIDE1NTpcXHRcXHRcXHRpbnQgcmVzdWx0ID0gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZW9wZW4oZGV2KTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0XFx0aWYgKHJlc3VsdClcXG4gMTU4OlxcdFxcdFxcdFxcdHJldHVybiByZXN1bHQ7XFxuIDE1OTpcXHRcXHR9XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlY2Fycmllcikge1xcbiAxNjQ6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiQ2FycmllciBkZXRlY3RlZFxcXFxuXFxcIik7XFxuIDE2NTpcXHRcXHRcXHRoZGxjX3Byb3RvX3N0YXJ0KGRldik7XFxuIDE2NjpcXHRcXHR9IGVsc2Uge1xcbiAxNjc6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiTm8gY2FycmllclxcXFxuXFxcIik7XFxuIDE2ODpcXHRcXHR9XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAxO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAxNzM6XFx0XFx0cmV0dXJuIDA7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCAqL1xcbiAxNzg6XFx0dm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDE3OTpcXHR7XFxuIDE4MDpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDE4MTpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxODI6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX2Nsb3NlKCkgY2FycmllciAlaSBvcGVuICVpXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsXFxuIDE4MzpcXHRcXHQgICAgICAgaGRsYy1cXHUwMDNlY2FycmllciwgaGRsYy1cXHUwMDNlb3Blbik7XFxuIDE4NDpcXHQjZW5kaWZcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aGRsYy1cXHUwMDNlc3RhdGVfbG9jayk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAwO1xcbiAxODk6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZWNhcnJpZXIpXFxuIDE5MDpcXHRcXHRcXHRoZGxjX3Byb3RvX3N0b3AoZGV2KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZoZGxjLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VjbG9zZSlcXG4gMTk1OlxcdFxcdFxcdGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VjbG9zZShkZXYpO1xcbiAxOTY6XFx0fVxcbiAxOTc6XFx0RVhQT1JUX1NZTUJPTChoZGxjX2Nsb3NlKTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0aW50IGhkbGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpXFxuIDIwMDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjE1LjI5OTI4NjQwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ4NDA4NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgcmVhZGluZyB0aGF0IGNvZGUsIGV4cHJlc3NlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgIC0gTGluZXMgMjAxIE9ud2FyZCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGhkbGMuY2AgZHJpdmVyLiBJJ3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNjYW4sIGFuZCBub3cgSSdtIHN0YXJ0aW5nIGZyb20gbGluZSAyMDEgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGRyaXZlciBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRoZSBsb3dlci1sZXZlbCBmcmFtaW5nIGFuZCBwZXJoYXBzIGRhdGEgdHJhbnNtaXNzaW9uIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29yZSBIRExDIGZyYW1lIHByb2Nlc3Npbmc6IGRlZmluaXRlbHkgbG9va2luZyBmb3IgQ1JDIGNhbGN1bGF0aW9ucywgZmxhZyBieXRlIGhhbmRsaW5nLCBhbmQgZGUtc3R1ZmZpbmcvc3R1ZmZpbmcgbWVjaGFuaXNtcyBmb3IgdGhlIEhETEMgZnJhbWUncyBzdGFydCBhbmQgZW5kIGZsYWdzLCBlbnN1cmluZyBkYXRhIGludGVncml0eSBkdXJpbmcgdHJhbnNtaXNzaW9uLiBJIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5IGNvdmVyZWQgdGhhdC4gSXMgaXQgdXNpbmcgRE1BPyBBcmUgdGhlcmUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBmcmFtZSByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbj8gV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkPyBBbHNvLCBJIHdpbGwgYmUga2VlbiB0byBpZGVudGlmeSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIG9uIHRoZSBXQU4gbGluaywgdGhpbmdzIGxpa2UgZnJhbWUgY2hlY2tzdW0gZmFpbHVyZXMsIGFuZCBkYXRhIGxvc3MuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IHdhdGNoaW5nIGZvciBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRpbmcgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjayDigJMgd2hhdCBuZXRfZGV2aWNlIGNhbGxzIGFyZSBiZWluZyB1c2VkLCBhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB1cHBlci1sYXllciBwcm90b2NvbHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIHZlcnkgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoxOC41NDc2OTgwNDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2hkbGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0XFx0c3RydWN0IGhkbGNfcHJvdG8gKnByb3RvID0gZmlyc3RfcHJvdG87XFxuIDIwMjpcXHRcXHRpbnQgcmVzdWx0O1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRpZiAoZGV2X3RvX2hkbGMoZGV2KS1cXHUwMDNlcHJvdG8pIHtcXG4gMjA1OlxcdFxcdFxcdHJlc3VsdCA9IGRldl90b19oZGxjKGRldiktXFx1MDAzZXByb3RvLVxcdTAwM2Vpb2N0bChkZXYsIGlmcyk7XFxuIDIwNjpcXHRcXHRcXHRpZiAocmVzdWx0ICE9IC1FSU5WQUwpXFxuIDIwNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHQvKiBOb3QgaGFuZGxlZCBieSBjdXJyZW50bHkgYXR0YWNoZWQgcHJvdG9jb2wgKGlmIGFueSkgKi9cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0d2hpbGUgKHByb3RvKSB7XFxuIDIxMzpcXHRcXHRcXHRyZXN1bHQgPSBwcm90by1cXHUwMDNlaW9jdGwoZGV2LCBpZnMpO1xcbiAyMTQ6XFx0XFx0XFx0aWYgKHJlc3VsdCAhPSAtRUlOVkFMKVxcbiAyMTU6XFx0XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4gMjE2OlxcdFxcdFxcdHByb3RvID0gcHJvdG8tXFx1MDAzZW5leHQ7XFxuIDIxNzpcXHRcXHR9XFxuIDIxODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjE5OlxcdH1cXG4gMjIwOlxcdEVYUE9SVF9TWU1CT0woaGRsY19pb2N0bCk7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBoZGxjX251bGxfb3BzO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMjU6XFx0e1xcbiAyMjY6XFx0XFx0LyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLFxcbiAyMjc6XFx0XFx0ICogaW5jbHVkaW5nIGV0aGVyX3NldHVwKCkgY2FsbGVkIGZyb20gaGRsY19yYXdfZXRoLmMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuIDIzMDpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3NcXHRcXHQgPSBJRkZfV0FOX0hETEM7XFxuIDIzMTpcXHRcXHRkZXYtXFx1MDAzZW10dVxcdFxcdCA9IEhETENfTUFYX01UVTtcXG4gMjMyOlxcdFxcdGRldi1cXHUwMDNlbWluX210dVxcdFxcdCA9IDY4O1xcbiAyMzM6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0ID0gSERMQ19NQVhfTVRVO1xcbiAyMzQ6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlXFx0XFx0ID0gQVJQSFJEX1JBV0hETEM7XFxuIDIzNTpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlblxcdCA9IDA7XFxuIDIzNjpcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbVxcdCA9IDA7XFxuIDIzNzpcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuXFx0XFx0ID0gMDtcXG4gMjM4OlxcdFxcdGRldi1cXHUwMDNlaGVhZGVyX29wc1xcdFxcdCA9IFxcdTAwMjZoZGxjX251bGxfb3BzO1xcbiAyMzk6XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdGhkbGNfc2V0dXBfZGV2KGRldik7XFxuIDI0NjpcXHRcXHRoZGxjLVxcdTAwM2VjYXJyaWVyID0gMTtcXG4gMjQ3OlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAwO1xcbiAyNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAyNDk6XFx0fVxcbiAyNTA6XFx0XFxuIDI1MTpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGRsY19kZXZpY2UpLCBcXFwiaGRsYyVkXFxcIixcXG4gMjU2OlxcdFxcdFxcdFxcdCAgIE5FVF9OQU1FX1VOS05PV04sIGhkbGNfc2V0dXApO1xcbiAyNTc6XFx0XFx0aWYgKGRldilcXG4gMjU4OlxcdFxcdFxcdGRldl90b19oZGxjKGRldiktXFx1MDAzZXByaXYgPSBwcml2O1xcbiAyNTk6XFx0XFx0cmV0dXJuIGRldjtcXG4gMjYwOlxcdH1cXG4gMjYxOlxcdEVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyNjQ6XFx0e1xcbiAyNjU6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDI2NjpcXHRcXHRkZXZfY2xvc2UoZGV2KTtcXG4gMjY3OlxcdFxcdGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XFxuIDI2ODpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbiAyNjk6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMjcwOlxcdH1cXG4gMjcxOlxcdEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XFxuIDI3MjpcXHRcXG4gMjczOlxcdGludCBhdHRhY2hfaGRsY19wcm90b2NvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8sXFxuIDI3NDpcXHRcXHRcXHRcXHQgc2l6ZV90IHNpemUpXFxuIDI3NTpcXHR7XFxuIDI3NjpcXHRcXHRpbnQgZXJyO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRlcnIgPSBkZXRhY2hfaGRsY19wcm90b2NvbChkZXYpO1xcbiAyNzk6XFx0XFx0aWYgKGVycilcXG4gMjgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjE4LjU0Nzc4NDI4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE3Njg1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBIRExDIGRldmljZSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgaGVyZSwgc28gSSdtIHRoaW5raW5nLCBcIkhvdyBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICptYWRlKj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCBvciBpcyB0aGVyZSBzb21lIHNvZnR3YXJlIG1hZ2ljIGhhcHBlbmluZz8gQXJlIHRoZXJlIHZpcnR1YWwgZGV2aWNlcyB0aGF0IGVtdWxhdGUgSERMQywgY3JlYXRpbmcgYSBgbmV0X2RldmljZWAgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JlYXRpb24gcHJvY2Vzcy5cblxuT2theSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gZXhoYXVzdGl2ZWx5IHNjYW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgSUZGX1dBTl9IRExDYCwgYGFsbG9jX2hkbGNkZXZgLCBhbmQgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYWxsIHRoZSBjb2RlIHBhdGhzIHRoYXQgZGVhbCB3aXRoIEhETEMgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIG1hbmFnZW1lbnQuIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBncmVwIGZvciBgSUZGX1dBTl9IRExDYCB0byBzZWUgd2hlcmUgdGhlIGludGVyZmFjZSBmbGFncyBhcmUgYmVpbmcgdXNlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBuYXJyb3cgdGhlIGZvY3VzLiBUaGlzIHdpbGwgZXhwb3NlIHRoZSBrZXkgYXJlYXMgdGhhdCBkZXRlcm1pbmUgdGhlIGNyZWF0aW9uIGFuZCByZWdpc3RyYXRpb24gb2YgdGhlc2UgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjIxLjI2NTQ3MjA1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjYxMjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRkZfV0FOX0hETENcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2FuL2hkbGMuYz00NT1zdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTUwLVxcdC8qIEZpcnN0IG1ha2Ugc3VyZSBcXFwiZGV2XFxcIiBpcyBhbiBIRExDIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6NTE6XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtNTItXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTk0PXN0YXRpYyBpbnQgaGRsY19kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0xMDQtXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoxMDU6XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSlcXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNi1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7IC8qIG5vdCBhbiBIRExDIGRldmljZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYz0yMjQ9c3RhdGljIHZvaWQgaGRsY19zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjI5LVxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyMzA6XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzXFx0XFx0ID0gSUZGX1dBTl9IRExDO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjMxLVxcdGRldi1cXHUwMDNlbXR1XFx0XFx0ID0gSERMQ19NQVhfTVRVO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDU1PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzEtICogQElGRl9JU0FUQVA6IElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNzMyOiAqIEBJRkZfV0FOX0hETEM6IFdBTiBIRExDIGRldmljZVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTczMy0gKiBASUZGX1hNSVRfRFNUX1JFTEVBU0U6IGRldl9oYXJkX3N0YXJ0X3htaXQoKSBpcyBhbGxvd2VkIHRvXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE3NjU9ZW51bSBuZXRkZXZfcHJpdl9mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NjktXFx0SUZGX0lTQVRBUFxcdFxcdFxcdD0gMVxcdTAwM2NcXHUwMDNjMyxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE3NzA6XFx0SUZGX1dBTl9IRExDXFx0XFx0XFx0PSAxXFx1MDAzY1xcdTAwM2M0LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTc3MS1cXHRJRkZfWE1JVF9EU1RfUkVMRUFTRVxcdFxcdD0gMVxcdTAwM2NcXHUwMDNjNSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MjIuOTQ4MDg5MDc5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDI3MDAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBIRExDIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgYWxsb2NfaGRsY2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIGEgbWl4IG9mIGRyaXZlcnM6IElTQSBjYXJkcyBsaWtlIGBjMTAxLmNgIGFuZCBgbjIuY2AsIHNldmVyYWwgUENJIGRyaXZlcnMgZm9yIEZhclN5bmMsIEN5Y2xhZGVzLCBHb3JhbW8sIGFuZCB3YW5YTCBjYXJkcywgYW5kIE9GL3BsYXRmb3JtIGRyaXZlcnMgZm9yIEZyZWVzY2FsZSBhbmQgSVhQNHh4IFNvQ3MuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGFyaXNlczogaG93IHByZXZhbGVudCBhcmUgdGhlc2UgZGV2aWNlIHR5cGVzIGluIG1vZGVybiB2aXJ0dWFsaXphdGlvbj8gTm9uZSBvZiB0aGVzZSBhcHBlYXIgdG8gYmUgZW11bGF0ZWQgaW4gUUVNVSBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTGV0IG1lIHBhdXNlIGFuZCB0aGluay4uLiBhcmUgdGhlcmUgYW55IFVTQiBIRExDIGRyaXZlcnM/IE5vLiBXaGF0IGFib3V0IHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGxpa2UgdHVuL3RhcCBvciBydG5sIGxpbmtzPyBOb25lIGFyZSB1c2luZyBIRExDIG9yIGBhbGxvY19oZGxjZGV2YC5cblxuSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBkZWx2ZSBkZWVwZXIgaW50byBgZHJpdmVycy9uZXQvd2FuL2AgYW5kIGBoZGxjLmNgIHRvIHNlZSBpZiBJIG1pc3NlZCBhbnl0aGluZy5cblxuQSByZWxhdGVkIHRob3VnaHQsIGl0J3Mgd29ydGggcmUtZXhhbWluaW5nIGhvdyBgYzEwMS5jYCBvciBgbjIuY2AgYXJlIGluaXRpYWxpemVkLiBBcmUgdGhleSByZWx5aW5nIG9uIG1vZHVsZSBsb2FkIG9yIGBpbnNtb2RgIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQ/IElTQSBjYXJkcyBjYW4gYmUgYSBiaXQgdHJpY2t5LCByZWx5aW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBwcm9iZWQgdGhyb3VnaCBwYXJhbXMuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIHByb2JlIG1lY2hhbmlzbSBmb3IgYm90aCBgYzEwMS5jYCBhbmQgYG4yLmNgLiBJIHdpbGwgY2hlY2sgdGhvc2UgZmlsZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMxOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoyNy4yNTA3OTEyNTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2MxMDEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0Lm5kb19zaW9jd2FuZGV2ID0gYzEwMV9pb2N0bCxcXG4gMjk2OlxcdFxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBjMTAxX3Npb2NkZXZwcml2YXRlLFxcbiAyOTc6XFx0fTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSlcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDMwMjpcXHRcXHRoZGxjX2RldmljZSAqaGRsYztcXG4gMzAzOlxcdFxcdGNhcmRfdCAqY2FyZDtcXG4gMzA0OlxcdFxcdGludCByZXN1bHQ7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdGlmIChpcnEgXFx1MDAzYyAzIHx8IGlycSBcXHUwMDNlIDE1IHx8IGlycSA9PSA2KSAvKiBGSVhNRSAqLyB7XFxuIDMwNzpcXHRcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgSVJRIHZhbHVlXFxcXG5cXFwiKTtcXG4gMzA4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzMDk6XFx0XFx0fVxcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRpZiAod2luYmFzZSBcXHUwMDNjIDB4QzAwMDAgfHwgd2luYmFzZSBcXHUwMDNlIDB4REZGRkYgfHwgKHdpbmJhc2UgXFx1MDAyNiAweDNGRkYpICE9IDApIHtcXG4gMzEyOlxcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCBSQU0gdmFsdWVcXFxcblxcXCIpO1xcbiAzMTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDMxNDpcXHRcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGNhcmQgPSBremFsbG9jX29iaihjYXJkX3QpO1xcbiAzMTc6XFx0XFx0aWYgKCFjYXJkKVxcbiAzMTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRjYXJkLVxcdTAwM2VkZXYgPSBhbGxvY19oZGxjZGV2KGNhcmQpO1xcbiAzMjE6XFx0XFx0aWYgKCFjYXJkLVxcdTAwM2VkZXYpIHtcXG4gMzIyOlxcdFxcdFxcdHByX2VycihcXFwidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxcXFxuXFxcIik7XFxuIDMyMzpcXHRcXHRcXHRrZnJlZShjYXJkKTtcXG4gMzI0OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMzI1OlxcdFxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHJlcXVlc3RfaXJxKGlycSwgc2NhX2ludHIsIDAsIGRldm5hbWUsIGNhcmQpKSB7XFxuIDMyODpcXHRcXHRcXHRwcl9lcnIoXFxcImNvdWxkIG5vdCBhbGxvY2F0ZSBJUlFcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFx0XFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFx0Y2FyZC1cXHUwMDNlaXJxID0gaXJxO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbih3aW5iYXNlLCBDMTAxX01BUFBFRF9SQU1fU0laRSwgZGV2bmFtZSkpIHtcXG4gMzM1OlxcdFxcdFxcdHByX2VycihcXFwiY291bGQgbm90IHJlcXVlc3QgUkFNIHdpbmRvd1xcXFxuXFxcIik7XFxuIDMzNjpcXHRcXHRcXHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDMzODpcXHRcXHR9XFxuIDMzOTpcXHRcXHRjYXJkLVxcdTAwM2VwaHlfd2luYmFzZSA9IHdpbmJhc2U7XFxuIDM0MDpcXHRcXHRjYXJkLVxcdTAwM2V3aW4wYmFzZSA9IGlvcmVtYXAod2luYmFzZSwgQzEwMV9NQVBQRURfUkFNX1NJWkUpO1xcbiAzNDE6XFx0XFx0aWYgKCFjYXJkLVxcdTAwM2V3aW4wYmFzZSkge1xcbiAzNDI6XFx0XFx0XFx0cHJfZXJyKFxcXCJjb3VsZCBub3QgbWFwIEkvTyBhZGRyZXNzXFxcXG5cXFwiKTtcXG4gMzQzOlxcdFxcdFxcdGMxMDFfZGVzdHJveV9jYXJkKGNhcmQpO1xcbiAzNDQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjI3LjI1MDg3MDc5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwODY3Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCdzIGdvaW5nIG9uOlxuXG4qKkRlY29uc3RydWN0aW5nIGBjMTAxX3J1bmAncyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYzEwMS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBjMTAxX3J1bmAgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBrZXkgYXBwZWFycyB0byBiZSB0aGUgYHNjYV9pbml0YCBjYWxsIHdpdGhpbiBgYzEwMV9ydW5gLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gaGFwcGVucywgd3JpdGluZyB0byByZWdpc3RlcnMgYW5kIHZlcmlmeWluZyB0aGUgU0NBIGNoaXBzLiBOb3csIEkgbmVlZCB0byB6b29tIGluLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSB0aGluayBsaW5lcyAzNDUtMzgwIG9mIGBjMTAxX3J1bmAgYXJlIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODcxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzozMC4wNTE3NDA0OTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2MxMDEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRjYXJkLVxcdTAwM2V0eF9yaW5nX2J1ZmZlcnMgPSBUWF9SSU5HX0JVRkZFUlM7XFxuIDM0ODpcXHRcXHRjYXJkLVxcdTAwM2VyeF9yaW5nX2J1ZmZlcnMgPSBSWF9SSU5HX0JVRkZFUlM7XFxuIDM0OTpcXHRcXHRjYXJkLVxcdTAwM2VidWZmX29mZnNldCA9IEMxMDFfV0lORE9XX1NJWkU7IC8qIEJ5dGVzIDFEMDAtMUZGRiByZXNlcnZlZCAqL1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRyZWFkYihjYXJkLVxcdTAwM2V3aW4wYmFzZSArIEMxMDFfUEFHRSk7IC8qIFJlc2V0cyBTQ0E/ICovXFxuIDM1MjpcXHRcXHR1ZGVsYXkoMTAwKTtcXG4gMzUzOlxcdFxcdHdyaXRlYigwLCBjYXJkLVxcdTAwM2V3aW4wYmFzZSArIEMxMDFfUEFHRSk7XFxuIDM1NDpcXHRcXHR3cml0ZWIoMCwgY2FyZC1cXHUwMDNld2luMGJhc2UgKyBDMTAxX0RUUik7IC8qIFBvd2VyLXVwIGZvciBSQU0/ICovXFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHNjYV9pbml0KGNhcmQsIDApO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRkZXYgPSBwb3J0X3RvX2RldihjYXJkKTtcXG4gMzU5OlxcdFxcdGhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y2FyZC1cXHUwMDNlbG9jayk7XFxuIDM2MjpcXHRcXHRkZXYtXFx1MDAzZWlycSA9IGlycTtcXG4gMzYzOlxcdFxcdGRldi1cXHUwMDNlbWVtX3N0YXJ0ID0gd2luYmFzZTtcXG4gMzY0OlxcdFxcdGRldi1cXHUwMDNlbWVtX2VuZCA9IHdpbmJhc2UgKyBDMTAxX01BUFBFRF9SQU1fU0laRSAtIDE7XFxuIDM2NTpcXHRcXHRkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiA9IDUwO1xcbiAzNjY6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmMxMDFfb3BzO1xcbiAzNjc6XFx0XFx0aGRsYy1cXHUwMDNlYXR0YWNoID0gc2NhX2F0dGFjaDtcXG4gMzY4OlxcdFxcdGhkbGMtXFx1MDAzZXhtaXQgPSBzY2FfeG1pdDtcXG4gMzY5OlxcdFxcdGNhcmQtXFx1MDAzZXNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJlc3VsdCA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuIDM3MjpcXHRcXHRpZiAocmVzdWx0KSB7XFxuIDM3MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJ1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIpO1xcbiAzNzQ6XFx0XFx0XFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XFxuIDM3NTpcXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiAzNzY6XFx0XFx0fVxcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRzY2FfaW5pdF9wb3J0KGNhcmQpOyAvKiBTZXQgdXAgQzEwMSBtZW1vcnkgKi9cXG4gMzc5OlxcdFxcdHNldF9jYXJyaWVyKGNhcmQpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJNb3hhIEMxMDEgb24gSVJRJXUsIHVzaW5nICV1IFRYICsgJXUgUlggcGFja2V0cyByaW5nc1xcXFxuXFxcIixcXG4gMzgyOlxcdFxcdFxcdCAgICBjYXJkLVxcdTAwM2VpcnEsIGNhcmQtXFx1MDAzZXR4X3JpbmdfYnVmZmVycywgY2FyZC1cXHUwMDNlcnhfcmluZ19idWZmZXJzKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0Km5ld19jYXJkID0gY2FyZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MzAuMDUxODIyNzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MjE1MzExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSERMQyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBmc2xfdWNjX2hkbGMuY2AuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBtYWRlLiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gU3BlY2lmaWNhbGx5LCBpbiBgdWhkbGNfb3BlbmAsIGl0IG5vdyBjYWxscyBgaGRsY19vcGVuYCBlYXJsaWVyIGFuZCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIGB1aGRsY19zdXNwZW5kYCBoYXMgYSBtb3ZlIG9mIGBrbWFsbG9jX29iamAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYCBub3cgaW5jbHVkZXMgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIGFuZCBgZnJlZV9uZXRkZXZgLlxuXG5Ob3csIGxvb2tpbmcgZGVlcGVyIGF0IHRoZSBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgZnVuY3Rpb24sIGl0IGluY2x1ZGVzIGEgY2FsbCB0byBgZGV2X2Nsb3NlYCBiZWZvcmUgZGV0YWNoaW5nIHRoZSBIRExDIHByb3RvY29sIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBuZXQgZGV2aWNlLiBDcnVjaWFsbHksIEkgbmVlZCB0byBrbm93ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmUgb3IgY2xlYW51cCBmdW5jdGlvbnMgb2YgKmV2ZXJ5KiBIRExDIGhhcmR3YXJlIGRyaXZlci4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBzZWUgaXQgaW4gYHVjY19oZGxjX3JlbW92ZWAsIGBmc3RfcmVtb3ZlX29uZWAsIGBxbWNfaGRsY19yZW1vdmVgLCBgd2FueGxfcGNpX3JlbW92ZV9vbmVgLCBhbmQgb3RoZXJzLCBhbGwgb2Ygd2hpY2ggc3VnZ2VzdHMgdGhleSBhcmUgYWxsIHJlbW92ZSBmdW5jdGlvbnMuXG5cblRoaXMgYnJpbmdzIG1lIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gV2UncmUgbG9va2luZyBmb3IgY29kZSB0aGF0J3MgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBvciBcInVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoc1wiLiBUaGUgc2Vjb25kIHBvaW50IGlzIHRoYXQgdGhlIGNvZGUgaXMgdGVhcmRvd24vY2xlYW51cCBmdW5jdGlvbnMgb25seSBleGVjdXRlZCBkdXJpbmcgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcsIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuXG5MZXQncyBkaXNzZWN0IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLiBgZnNsX3VjY19oZGxjLmNgIGlzIGEgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgYSBwbGF0Zm9ybSBkcml2ZXIgaW50ZW5kZWQgZm9yIE5YUC9GcmVlc2NhbGUgUG93ZXJQQy9BUk0gU29DcyB3aXRoIFFVSUNDIEVuZ2luZSBoYXJkd2FyZS4gQ3JpdGljYWxseSwgb24gYW4gYW1kNjQgc3lzdGVtLCB0aGUgUVVJQ0NfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb25seSBidWlsZHMgd2l0aCBgQ09NUElMRV9URVNUYC4gRXZlbiB0aGVuLCBpdOKAmXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBPcGVuRmlybXdhcmUgb3IgRGV2aWNlVHJlZSwgYW5kIHJlcXVpcmVzIGFjdHVhbCBGcmVlc2NhbGUgU29DIGhhcmR3YXJlLiBJdCBjYW5ub3QgcHJvYmUgb3IgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGF0LiBUaGVyZWZvcmUsIGBmc2xfdWNjX2hkbGMuY2AgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBlbnZpcm9ubWVudC5cblxuTm93LCBjb25zaWRlcmluZyBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAsIGl0J3MgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkZXZpY2UgdW5yZWdpc3RyYXRpb24sIGRyaXZlciB0ZWFyZG93biwgb3IgbW9kdWxlIHVubG9hZC4gVGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFyZSBhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZW1vdmFsIG9mIHNwZWNpZmljIGhhcmR3YXJlIGNhcmRzLCBiZSB0aGV5IHBsYXRmb3JtIGRldmljZXMsIFBDSSwgb3IgSVNBIGNhcmRzLiBUaGVzZSBoYXJkd2FyZSBjb21wb25lbnRzIC0gdGhlIEZyZWVzY2FsZSBRRSBwbGF0Zm9ybSwgRmFyU3luYyBjYXJkcywgQ3ljbGFkZXMtUEMzMDAgUENJIGNhcmRzLCBHb3JhbW8gUENJMjAwU3luLCBvciB0aGUgTW94YSBDMTAxIElTQSBjYXJkLCBmb3IgZXhhbXBsZSAtIHNpbXBseSBkbyBub3QgZXhpc3Qgb3IgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhpcywgdGhlcmVmb3JlLCBwdXRzIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBzcXVhcmVseSB3aXRoaW4gdGhlIGNhdGVnb3J5IG9mIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyB0ZWFyZG93biwgd2hpY2ggd2UgYXJlIG5vdCBhYmxlIHRvIHRyaWdnZXIuXG5cblRvIGVuc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiB3aXRoIHJlYWNoYWJsZSBjb2RlLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhbGwgYGRyaXZlcnMvbmV0L3dhbi9gIGFuZCBiZXlvbmQsIGZvciBhbnkgb3RoZXIgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBgdWhkbGNfb3BlbmAgb3IgYHVoZGxjX3N1c3BlbmRgLiBJIHdpbGwgcGVyZm9ybSBvbmUgbGFzdCBjaGVjayBvZiB0aGUgYWxsIHRoZSBjYWxsZXJzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhlIGN1cnJlbnQgYXNzZXNzbWVudCwgaG93ZXZlciwgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MzcuNjczMzU2NjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODY2MzI4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5yZWdpc3Rlcl9oZGxjX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93YW4vYzEwMS5jPTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQgYzEwMV9jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTQyNy1cXHRcXHRjYXJkID0gY2FyZC1cXHUwMDNlbmV4dF9jYXJkO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmM6NDI4OlxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydF90b19kZXYocHRyKSk7XFxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy00MjktXFx0XFx0YzEwMV9kZXN0cm95X2NhcmQocHRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMzAwLVxcdFxcdFxcdHdoaWxlIChpLS0pXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMzAxOlxcdFxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDItXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjMyNj1mc3RfYWRkX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwNi1cXHRmb3IgKGkgPSAwIDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0cyA7IGkrKylcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwOC1pbml0X2NhcmRfZmFpbDpcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0MC1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTc4MD1zdGF0aWMgdm9pZCBxbWNfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc4NDpcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODUtXFx0ZnJlZV9uZXRkZXYocW1jX2hkbGMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTI1ND1zdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjU4OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTktXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTI2MT1FWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI3MTpFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xNTI1PXN0YXRpYyB2b2lkIGl4cDR4eF9oc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTI5OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MzAtXFx0ZnJlZV9uZXRkZXYocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTI4NT1zdGF0aWMgdm9pZCBuMl9kZXN0cm95X2NhcmQoY2FyZF90ICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjI5MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jPTI0Nj1zdGF0aWMgdm9pZCBwYzMwMF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cXHRcXHRpZiAoY2FyZC1cXHUwMDNlcG9ydHNbaV0uY2FyZClcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzoyNTM6XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYz0yMjc9c3RhdGljIHZvaWQgcGNpMjAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTIzMy1cXHRcXHRpZiAoY2FyZC1cXHUwMDNlcG9ydHNbaV0uY2FyZClcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6MjM0OlxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM9NDg2PXN0YXRpYyB2b2lkIHdhbnhsX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjYXJkLVxcdTAwM2VuX3BvcnRzOyBpKyspIHtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYzo0OTI6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5My1cXHRcXHRmcmVlX25ldGRldihjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oZGxjLmg9NTc9aW50IGhkbGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjAtI2RlZmluZSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpXFx0cmVnaXN0ZXJfbmV0ZGV2KGRldilcXG5pbmNsdWRlL2xpbnV4L2hkbGMuaDo2MTp2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjM5LjE1OTk5MzU1OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY3MjQxMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBhbGwgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gcGxhdGZvcm0tc3BlY2lmaWMgaGFyZHdhcmUgcmVtb3ZhbCBhbmQgY2xlYW51cCBwcm9jZWR1cmVzLCB0YXJnZXRpbmcgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGVuIHRoZXJlJ3MgdGhlIGBmc2xfdWNjX2hkbGMuY2AgZmlsZTsgaXQncyBleGNsdXNpdmVseSBmb3IgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgaGFyZHdhcmUsIHdoaWNoIGlzIGEgUG93ZXJQQy9lbWJlZGRlZCBTb0Mgc3BlY2lmaWMgZGV2aWNlLiBTaW5jZSB0aGUgc3lzdGVtIEknbSB3b3JraW5nIHdpdGggaXMgYW1kNjQtYmFzZWQgYW5kIHVzZXMgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIHRoYXQgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIGNvbmZpcm06XG5cbiogICBgV29ydGhGdXp6aW5nYDogRmFsc2UuIE1ha2VzIHNlbnNlOyB0aGlzIGNvZGUgaXNuJ3QgcmVsZXZhbnQgdG8gbXkgc2V0dXAuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgZHJpdmVyIChgZnNsX3VjY19oZGxjLmNgKSBhbmQgdGhlIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBoZWxwZXIgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGUgUVVJQ0MgRW5naW5lIGlzIHBsYXRmb3JtLXNwZWNpZmljIGFuZCBub3QgZm91bmQgaW4gbXkgeDg2L1FFTVUgZW52aXJvbm1lbnQuIFRoZSB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiByZW1vdmluZyBvciBjbGVhbmluZyB1cCBub24tZW11bGF0ZWQgcGh5c2ljYWwgV0FOL0hETEMgUENJL0lTQS9wbGF0Zm9ybSBkcml2ZXJzLiBTbywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG1ha2VzIHNlbnNlLlxuKiAgIGBFbmFibGVDb25maWdzYDogRW1wdHkuIE5vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkIGhlcmUuXG4qICAgYEZvY3VzU3ltYm9sc2A6IEVtcHR5LiBObyBzcGVjaWZpYyBzeW1ib2xzIHRvIHRyYWNrLlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2OTEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjQzLjIyNzIzNzIzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMpIGFuZCB0aGUgZ2VuZXJpYyBIRExDIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgKGRyaXZlcnMvbmV0L3dhbi9oZGxjLmMpLiBUaGUgZnNsX3VjY19oZGxjIGRyaXZlciBpcyBzcGVjaWZpYyB0byBGcmVlc2NhbGUvTlhQIFNvQyBjb3Byb2Nlc3NvciBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhlIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgaGVscGVyIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIHJlbW92ZSBhbmQgbW9kdWxlIGV4aXQgcm91dGluZXMgZm9yIHBoeXNpY2FsIFdBTiBoYXJkd2FyZSBjb250cm9sbGVycyAoRmFyc3luYywgd2FuWEwsIFBDMzAwLCBldGMuKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6NDMuMjI3MjYzMTM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowplwzd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-11 00:11:23 +0000 UTC FinishedAt: 2026-09-11 00:13:44 +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+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjN2QyMzI0MDIzOWE0ZWY5MjFjNWUxM2FmYTc4ZDNmNDlkZjIxNGM3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBTZXAgMTEgMDA6MTI6MzQgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcbkBAIC0zNCw4ICYjNDM7MzQsNiBAQFxuICNkZWZpbmUgVERNX1BQUE9IVF9TTElDX01BWElOXG4gI2RlZmluZSBSWF9CRF9FUlJPUlMgKFJfQ0RfUyB8IFJfT1ZfUyB8IFJfQ1JfUyB8IFJfQUJfUyB8IFJfTk9fUyB8IFJfTEdfUylcbiBcbi1zdGF0aWMgaW50IHVoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuLVxuIHN0YXRpYyBzdHJ1Y3QgdWNjX3RkbV9pbmZvIHV0ZG1fcHJpbWFyeV9pbmZvID0ge1xuIFx0LnVmX2luZm8gPSB7XG4gXHRcdC50c2EgPSAwLFxuQEAgLTcwNSwxMiAmIzQzOzcwMywxOCBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiBcdHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2ID0gaGRsYy1cdTAwM2Vwcml2O1xuIFx0c3RydWN0IHVjY190ZG0gKnV0ZG0gPSBwcml2LVx1MDAzZXV0ZG07XG4tXHRpbnQgcmMgPSAwO1xuJiM0MztcdGludCByYztcbiBcbiBcdGlmIChwcml2LVx1MDAzZWhkbGNfYnVzeSAhPSAxKSB7XG4mIzQzO1x0XHRyYyA9IGhkbGNfb3BlbihkZXYpO1xuJiM0MztcdFx0aWYgKHJjKVxuJiM0MztcdFx0XHRyZXR1cm4gcmM7XG4mIzQzO1xuIFx0XHRpZiAocmVxdWVzdF9pcnEocHJpdi1cdTAwM2V1dF9pbmZvLVx1MDAzZXVmX2luZm8uaXJxLFxuLVx0XHRcdFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFwmIzM0O2hkbGNcJiMzNDssIHByaXYpKVxuJiM0MztcdFx0XHRcdHVjY19oZGxjX2lycV9oYW5kbGVyLCAwLCBcJiMzNDtoZGxjXCYjMzQ7LCBwcml2KSkge1xuJiM0MztcdFx0XHRoZGxjX2Nsb3NlKGRldik7XG4gXHRcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0XHR9XG4gXG4gXHRcdGNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soXG4gXHRcdFx0XHRcdHByaXYtXHUwMDNldXRfaW5mby1cdTAwM2V1Zl9pbmZvLnVjY19udW0pO1xuQEAgLTcyOSwxMyAmIzQzOzczMyw5IEBAIHN0YXRpYyBpbnQgdWhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0XHRuZXRkZXZfcmVzZXRfcXVldWUoZGV2KTtcbiBcdFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbi1cbi1cdFx0cmMgPSBoZGxjX29wZW4oZGV2KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHVoZGxjX2Nsb3NlKGRldik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcmM7XG4mIzQzO1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHVoZGxjX21lbWNsZWFuKHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2KVxuQEAgLTg4OCw2ICYjNDM7ODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRpZiAoIW5ldGlmX3J1bm5pbmcocHJpdi1cdTAwM2VuZGV2KSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0cHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspO1xuJiM0MztcdGlmICghcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspXG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtXHUwMDNlbmRldik7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbiBcbkBAIC04OTcsMTAgJiM0Mzs5MDEsNiBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0cHJpdi1cdTAwM2VndW1yID0gaW9yZWFkMzJiZShcdTAwMjZ1Zl9yZWdzLVx1MDAzZWd1bXIpO1xuIFx0cHJpdi1cdTAwM2VndWVtciA9IGlvcmVhZDgoXHUwMDI2dWZfcmVncy1cdTAwM2VndWVtcik7XG4gXG4tXHRwcml2LVx1MDAzZXVjY19wcmFtX2JhayA9IGttYWxsb2Nfb2JqKCpwcml2LVx1MDAzZXVjY19wcmFtX2Jhayk7XG4tXHRpZiAoIXByaXYtXHUwMDNldWNjX3ByYW1fYmFrKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbi1cbiBcdC8qIGJhY2t1cCBIRExDIHBhcmFtZXRlciAqL1xuIFx0bWVtY3B5X2Zyb21pbyhwcml2LVx1MDAzZXVjY19wcmFtX2JhaywgcHJpdi1cdTAwM2V1Y2NfcHJhbSxcbiBcdFx0ICAgICAgc2l6ZW9mKHN0cnVjdCB1Y2NfaGRsY19wYXJhbSkpO1xuQEAgLTEyNTUsNiAmIzQzOzEyNTUsOCBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YShcdTAwMjZwZGV2LVx1MDAzZWRldik7XG4gXG4mIzQzO1x0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVx1MDAzZW5kZXYpO1xuJiM0MztcbiBcdHVoZGxjX21lbWNsZWFuKHByaXYpO1xuIFxuIFx0aWYgKHByaXYtXHUwMDNldXRkbSBcdTAwMjZcdTAwMjYgcHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpX3JlZ3MpIHtcbkBAIC0xMjY2LDYgJiM0MzsxMjY4LDcgQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4gXHRcdGlvdW5tYXAocHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpcmFtKTtcbiBcdFx0cHJpdi1cdTAwM2V1dGRtLVx1MDAzZXNpcmFtID0gTlVMTDtcbiBcdH1cbiYjNDM7XHRmcmVlX25ldGRldihwcml2LVx1MDAzZW5kZXYpO1xuIFx0a2ZyZWUocHJpdik7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7VUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcXG5cJiMzNDspO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jXG5pbmRleCBjYmVkMTBiMWQ4NjJlLi5hMzhmOTBkMzAwNmVkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuQEAgLTI2Myw2ICYjNDM7MjYzLDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbiB2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRydG5sX2xvY2soKTtcbiYjNDM7XHRkZXZfY2xvc2UoZGV2KTtcbiBcdGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XG4gXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xuIFx0cnRubF91bmxvY2soKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGM3ZDIzMjQwMjM5YTRlZjkyMWM1ZTEzYWZhNzhkM2Y0OWRmMjE0YzcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIFNlcCAxMSAwMDoxMjozNCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYyBiL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYwppbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jCkBAIC0zNCw4ICYjNDM7MzQsNiBAQAogI2RlZmluZSBURE1fUFBQT0hUX1NMSUNfTUFYSU4KICNkZWZpbmUgUlhfQkRfRVJST1JTIChSX0NEX1MgfCBSX09WX1MgfCBSX0NSX1MgfCBSX0FCX1MgfCBSX05PX1MgfCBSX0xHX1MpCiAKLXN0YXRpYyBpbnQgdWhkbGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7Ci0KIHN0YXRpYyBzdHJ1Y3QgdWNjX3RkbV9pbmZvIHV0ZG1fcHJpbWFyeV9pbmZvID0gewogCS51Zl9pbmZvID0gewogCQkudHNhID0gMCwKQEAgLTcwNSwxMiAmIzQzOzcwMywxOCBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAloZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7CiAJc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBoZGxjLSZndDtwcml2OwogCXN0cnVjdCB1Y2NfdGRtICp1dGRtID0gcHJpdi0mZ3Q7dXRkbTsKLQlpbnQgcmMgPSAwOwomIzQzOwlpbnQgcmM7CiAKIAlpZiAocHJpdi0mZ3Q7aGRsY19idXN5ICE9IDEpIHsKJiM0MzsJCXJjID0gaGRsY19vcGVuKGRldik7CiYjNDM7CQlpZiAocmMpCiYjNDM7CQkJcmV0dXJuIHJjOwomIzQzOwogCQlpZiAocmVxdWVzdF9pcnEocHJpdi0mZ3Q7dXRfaW5mby0mZ3Q7dWZfaW5mby5pcnEsCi0JCQkJdWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsICYjMzQ7aGRsYyYjMzQ7LCBwcml2KSkKJiM0MzsJCQkJdWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsICYjMzQ7aGRsYyYjMzQ7LCBwcml2KSkgewomIzQzOwkJCWhkbGNfY2xvc2UoZGV2KTsKIAkJCXJldHVybiAtRU5PREVWOwomIzQzOwkJfQogCiAJCWNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soCiAJCQkJCXByaXYtJmd0O3V0X2luZm8tJmd0O3VmX2luZm8udWNjX251bSk7CkBAIC03MjksMTMgJiM0Mzs3MzMsOSBAQCBzdGF0aWMgaW50IHVoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAkJbmFwaV9lbmFibGUoJmFtcDtwcml2LSZndDtuYXBpKTsKIAkJbmV0ZGV2X3Jlc2V0X3F1ZXVlKGRldik7CiAJCW5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7Ci0KLQkJcmMgPSBoZGxjX29wZW4oZGV2KTsKLQkJaWYgKHJjKQotCQkJdWhkbGNfY2xvc2UoZGV2KTsKIAl9CiAKLQlyZXR1cm4gcmM7CiYjNDM7CXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCB1aGRsY19tZW1jbGVhbihzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdikKQEAgLTg4OCw2ICYjNDM7ODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpCiAJaWYgKCFuZXRpZl9ydW5uaW5nKHByaXYtJmd0O25kZXYpKQogCQlyZXR1cm4gMDsKIAomIzQzOwlwcml2LSZndDt1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi0mZ3Q7dWNjX3ByYW1fYmFrKTsKJiM0MzsJaWYgKCFwcml2LSZndDt1Y2NfcHJhbV9iYWspCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKIAluZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtJmd0O25kZXYpOwogCW5hcGlfZGlzYWJsZSgmYW1wO3ByaXYtJmd0O25hcGkpOwogCkBAIC04OTcsMTAgJiM0Mzs5MDEsNiBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQogCXByaXYtJmd0O2d1bXIgPSBpb3JlYWQzMmJlKCZhbXA7dWZfcmVncy0mZ3Q7Z3Vtcik7CiAJcHJpdi0mZ3Q7Z3VlbXIgPSBpb3JlYWQ4KCZhbXA7dWZfcmVncy0mZ3Q7Z3VlbXIpOwogCi0JcHJpdi0mZ3Q7dWNjX3ByYW1fYmFrID0ga21hbGxvY19vYmooKnByaXYtJmd0O3VjY19wcmFtX2Jhayk7Ci0JaWYgKCFwcml2LSZndDt1Y2NfcHJhbV9iYWspCi0JCXJldHVybiAtRU5PTUVNOwotCiAJLyogYmFja3VwIEhETEMgcGFyYW1ldGVyICovCiAJbWVtY3B5X2Zyb21pbyhwcml2LSZndDt1Y2NfcHJhbV9iYWssIHByaXYtJmd0O3VjY19wcmFtLAogCQkgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7CkBAIC0xMjU1LDYgJiM0MzsxMjU1LDggQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiB7CiAJc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoJmFtcDtwZGV2LSZndDtkZXYpOwogCiYjNDM7CXVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi0mZ3Q7bmRldik7CiYjNDM7CiAJdWhkbGNfbWVtY2xlYW4ocHJpdik7CiAKIAlpZiAocHJpdi0mZ3Q7dXRkbSAmYW1wOyZhbXA7IHByaXYtJmd0O3V0ZG0tJmd0O3NpX3JlZ3MpIHsKQEAgLTEyNjYsNiAmIzQzOzEyNjgsNyBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKIAkJaW91bm1hcChwcml2LSZndDt1dGRtLSZndDtzaXJhbSk7CiAJCXByaXYtJmd0O3V0ZG0tJmd0O3NpcmFtID0gTlVMTDsKIAl9CiYjNDM7CWZyZWVfbmV0ZGV2KHByaXYtJmd0O25kZXYpOwogCWtmcmVlKHByaXYpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7VUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcbiYjMzQ7KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vaGRsYy5jCmluZGV4IGNiZWQxMGIxZDg2MmUuLmEzOGY5MGQzMDA2ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuYwpAQCAtMjYzLDYgJiM0MzsyNjMsNyBAQCBFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpOwogdm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJcnRubF9sb2NrKCk7CiYjNDM7CWRldl9jbG9zZShkZXYpOwogCWRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7CiAJdW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTsKIAlydG5sX3VubG9jaygpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDcyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMjg0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRmVhc2liaWxpdHkgQXNzZXNzbWVudCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIGFuZCBzZWUgaWYgaXQmIzM5O3Mgd29ydGggb3VyIHRpbWUgdG8gZnV6ei4gRmlyc3QsIHRoZSB0YXJnZXQgaXMgYW1kNjQsIHNvIHRoYXQmIzM5O3MgdGhlIGFyY2hpdGVjdHVyZSB3ZSYjMzk7cmUgZm9jdXNlZCBvbi4KCk15IGluaXRpYWwgdGhvdWdodCBpcyB0byBsb29rIGF0IHRoZSBjaGFuZ2VkIGZpbGVzIGFuZCBmdW5jdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY2Agd2hpY2ggbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gVGhlbiwgd2UgaGF2ZSBgZHJpdmVycy9uZXQvd2FuL2hkbGMuY2AsIHNwZWNpZmljYWxseSwgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgd2hlcmUgYSBgZGV2X2Nsb3NlKGRldik7YCBjYWxsIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBgZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtgLgoKTm93LCBJIG5lZWQgYSBjbGVhcmVyIHBpY3R1cmUgb2Ygd2hhdCB0aGVzZSBmaWxlcyBhY3R1YWxseSAqZG8qLiBgZnNsX3VjY19oZGxjLmNgIGFwcGVhcnMgdG8gYmUgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBkcml2ZXIsIHdoaWNoIGlzIHNwZWNpZmljIHRvIFBvd2VyUEMvRnJlZXNjYWxlIFNvQyBwbGF0Zm9ybXMuIGBoZGxjLmNgIHNlZW1zIHRvIGJlIHRoZSBnZW5lcmljIEhETEMgbGF5ZXIsIHdoaWNoIG1pZ2h0IGJlIG1vcmUgaW50ZXJlc3RpbmcgdG8gZnV6eiBpZiBpdCYjMzk7cyBicm9hZGx5IHVzZWQuCgpUaGUga2V5IHF1ZXN0aW9uIGlzOiBhcmUgZWl0aGVyIG9mIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIG9uIGFuIGFtZDY0IHN5c3RlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L3dhbi9gLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSYjMzk7cyBhbnkgY2hhbmNlIHRoZXkmIzM5O3JlIGNvbXBpbGVkIGluIG9yIG1hZGUgYXZhaWxhYmxlIG9uIGFtZDY0LiBJJiMzOTtsbCBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhvc2UgS2NvbmZpZyBmaWxlcyB0byBmaWd1cmUgdGhpcyBvdXQuIElmIHRoZXkmIzM5O3JlIG5vdCwgdGhlbiB3ZSBjYW4gc2F2ZSBhIGxvdCBvZiB0aW1lLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZy4qSERMQyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4vS2NvbmZpZz0yND1pZiBXQU5cbi0tXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yNi0jIEdlbmVyaWMgSERMQ1xuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6Mjc6Y29uZmlnIEhETENcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTI4LVx0dHJpc3RhdGUgXCYjMzQ7R2VuZXJpYyBIRExDIGxheWVyXCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDMtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo0NDpjb25maWcgSERMQ19SQVdcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTQ1LVx0dHJpc3RhdGUgXCYjMzQ7UmF3IEhETEMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTUxLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NTI6Y29uZmlnIEhETENfUkFXX0VUSFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtSYXcgSERMQyBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTYyLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NjM6Y29uZmlnIEhETENfQ0lTQ09cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTY0LVx0dHJpc3RhdGUgXCYjMzQ7Q2lzY28gSERMQyBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzAtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo3MTpjb25maWcgSERMQ19GUlxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzItXHR0cmlzdGF0ZSBcJiMzNDtGcmFtZSBSZWxheSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzgtXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo3OTpjb25maWcgSERMQ19QUFBcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7U3luY2hyb25vdXMgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTg2LVxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6ODc6Y29uZmlnIEhETENfWDI1XG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O1guMjUgcHJvdG9jb2wgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnPTE4MT1jb25maWcgRkFSU1lOQ1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTE5OS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIwMDpjb25maWcgRlNMX1FNQ19IRExDXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yMDEtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMS1cbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIxMjpjb25maWcgRlNMX1VDQ19IRExDXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yMTMtXHR0cmlzdGF0ZSBcJiMzNDtGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUzMzYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsOgoKKipEZWx2aW5nIGludG8gSERMQyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiBob3cgSERMQyBzdXBwb3J0IGlzIGNvbmZpZ3VyZWQgaW4gdGhlIGtlcm5lbCwgcGFydGljdWxhcmx5IGFzIGl0IHJlbGF0ZXMgdG8gRnJlZXNjYWxlJiMzOTtzIFVDQyBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IGZvciBgZHJpdmVycy9uZXQvd2FuL0tjb25maWdgLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBmb3Igd2lkZS1hcmVhIG5ldHdvcmsgZHJpdmVycywgaW5jbHVkaW5nIEhETEMsIHNob3VsZCByZXNpZGUuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlIHNlY3Rpb25zIGRlYWxpbmcgd2l0aCBgSERMQ2AgaW4gZ2VuZXJhbCBhbmQgdGhlbiB6b29tIGluIG9uIGFueSBvcHRpb25zIHNwZWNpZmljIHRvIGBGU0xfVUNDX0hETENgLiBUaGUgYEZTTF9VQ0NgIGlzLCBvZiBjb3Vyc2UsIHRoZSBGcmVlc2NhbGUgVW5pdmVyc2FsIENvbW11bmljYXRpb25zIENvbnRyb2xsZXIsIGEgcGllY2Ugb2YgaGFyZHdhcmUgSSYjMzk7dmUgd29ya2VkIHdpdGggZXh0ZW5zaXZlbHkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQgZXhwbGFpbmluZyB0aGUgaW1wbGljYXRpb25zIG9mIGVuYWJsaW5nIHRoZXNlIGZlYXR1cmVzLCBhbmQgbGlrZWx5IHNvbWUgZGVmYXVsdCBzZXR0aW5ncy4gSSYjMzk7bSBhbHNvIGFudGljaXBhdGluZyB0aGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSB3aWxsIHJlZmVyZW5jZSBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIHBlcmhhcHMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIGFuZCBJJiMzOTtsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aG9zZSByZWxhdGlvbnNoaXBzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byB1bmRlcnN0YW5kIGFsbCB0aGUgY29uZGl0aW9ucyB0aGF0IG11c3QgYmUgbWV0IGluIG9yZGVyIHRvIGVuYWJsZSBGcmVlc2NhbGUgSERMQyBzdXBwb3J0IGFuZCB3aGF0IGltcGFjdCB0aG9zZSBjaG9pY2VzIHdpbGwgaGF2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA5MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgd2FuIGRldmljZXMgY29uZmlndXJhdGlvblxuICAgNDpcdCNcbiAgIDU6XHRcbiAgIDY6XHRtZW51Y29uZmlnIFdBTlxuICAgNzpcdFx0Ym9vbCBcJiMzNDtXYW4gaW50ZXJmYWNlcyBzdXBwb3J0XCYjMzQ7XG4gICA4Olx0XHRoZWxwXG4gICA5Olx0XHQgIFdpZGUgQXJlYSBOZXR3b3JrcyAoV0FOcyksIHN1Y2ggYXMgWC4yNSwgRnJhbWUgUmVsYXkgYW5kIGxlYXNlZFxuICAxMDpcdFx0ICBsaW5lcywgYXJlIHVzZWQgdG8gaW50ZXJjb25uZWN0IExvY2FsIEFyZWEgTmV0d29ya3MgKExBTnMpIG92ZXIgdmFzdFxuICAxMTpcdFx0ICBkaXN0YW5jZXMgd2l0aCBkYXRhIHRyYW5zZmVyIHJhdGVzIHNpZ25pZmljYW50bHkgaGlnaGVyIHRoYW4gdGhvc2VcbiAgMTI6XHRcdCAgYWNoaWV2YWJsZSB3aXRoIGNvbW1vbmx5IHVzZWQgYXN5bmNocm9ub3VzIG1vZGVtIGNvbm5lY3Rpb25zLlxuICAxMzpcdFxuICAxNDpcdFx0ICBVc3VhbGx5LCBhIHF1aXRlIGV4cGVuc2l2ZSBleHRlcm5hbCBkZXZpY2UgY2FsbGVkIGEgYFdBTiByb3V0ZXImIzM5OyBpc1xuICAxNTpcdFx0ICBuZWVkZWQgdG8gY29ubmVjdCB0byBhIFdBTi4gQXMgYW4gYWx0ZXJuYXRpdmUsIGEgcmVsYXRpdmVseVxuICAxNjpcdFx0ICBpbmV4cGVuc2l2ZSBXQU4gaW50ZXJmYWNlIGNhcmQgY2FuIGFsbG93IHlvdXIgTGludXggYm94IHRvIGRpcmVjdGx5XG4gIDE3Olx0XHQgIGNvbm5lY3QgdG8gYSBXQU4uXG4gIDE4Olx0XG4gIDE5Olx0XHQgIElmIHlvdSBoYXZlIG9uZSBvZiB0aG9zZSBjYXJkcyBhbmQgd2lzaCB0byB1c2UgaXQgdW5kZXIgTGludXgsXG4gIDIwOlx0XHQgIHNheSBZIGhlcmUgYW5kIGFsc28gdG8gdGhlIFdBTiBkcml2ZXIgZm9yIHlvdXIgY2FyZC5cbiAgMjE6XHRcbiAgMjI6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMjM6XHRcbiAgMjQ6XHRpZiBXQU5cbiAgMjU6XHRcbiAgMjY6XHQjIEdlbmVyaWMgSERMQ1xuICAyNzpcdGNvbmZpZyBIRExDXG4gIDI4Olx0XHR0cmlzdGF0ZSBcJiMzNDtHZW5lcmljIEhETEMgbGF5ZXJcJiMzNDtcbiAgMjk6XHRcdGhlbHBcbiAgMzA6XHRcdCAgU2F5IFkgdG8gdGhpcyBvcHRpb24gaWYgeW91ciBMaW51eCBib3ggY29udGFpbnMgYSBXQU4gKFdpZGUgQXJlYVxuICAzMTpcdFx0ICBOZXR3b3JrKSBjYXJkIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciBhbmQgeW91IGFyZSBwbGFubmluZyB0b1xuICAzMjpcdFx0ICBjb25uZWN0IHRoZSBib3ggdG8gYSBXQU4uXG4gIDMzOlx0XG4gIDM0Olx0XHQgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydGluZyBzb2Z0d2FyZSBmcm9tXG4gIDM1Olx0XHQgIFx1MDAzY2h0dHA6Ly93d3cua2VybmVsLm9yZy9wdWIvbGludXgvdXRpbHMvbmV0L2hkbGMvXHUwMDNlLlxuICAzNjpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIGN1cnJlbnRseSBzdXBwb3J0cyByYXcgSERMQywgQ2lzY28gSERMQywgRnJhbWVcbiAgMzc6XHRcdCAgUmVsYXksIHN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIGFuZCBYLjI1LlxuICAzODpcdFxuICAzOTpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAgNDA6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGhkbGMuXG4gIDQxOlx0XG4gIDQyOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDQzOlx0XG4gIDQ0Olx0Y29uZmlnIEhETENfUkFXXG4gIDQ1Olx0XHR0cmlzdGF0ZSBcJiMzNDtSYXcgSERMQyBzdXBwb3J0XCYjMzQ7XG4gIDQ2Olx0XHRkZXBlbmRzIG9uIEhETENcbiAgNDc6XHRcdGhlbHBcbiAgNDg6XHRcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuICA0OTpcdFxuICA1MDpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA1MTpcdFxuICA1MjpcdGNvbmZpZyBIRExDX1JBV19FVEhcbiAgNTM6XHRcdHRyaXN0YXRlIFwmIzM0O1JhdyBIRExDIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XCYjMzQ7XG4gIDU0Olx0XHRkZXBlbmRzIG9uIEhETENcbiAgNTU6XHRcdGhlbHBcbiAgNTY6XHRcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIEV0aGVybmV0IGRldmljZSBlbXVsYXRpb25cbiAgNTc6XHRcdCAgb3ZlciBXQU4gY29ubmVjdGlvbnMuXG4gIDU4Olx0XG4gIDU5Olx0XHQgIFlvdSB3aWxsIG5lZWQgaXQgZm9yIEV0aGVybmV0IG92ZXIgSERMQyBicmlkZ2VzLlxuICA2MDpcdFxuICA2MTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA2MjpcdFxuICA2MzpcdGNvbmZpZyBIRExDX0NJU0NPXG4gIDY0Olx0XHR0cmlzdGF0ZSBcJiMzNDtDaXNjbyBIRExDIHN1cHBvcnRcJiMzNDtcbiAgNjU6XHRcdGRlcGVuZHMgb24gSERMQ1xuICA2NjpcdFx0aGVscFxuICA2NzpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgQ2lzY28gSERMQyBvdmVyIFdBTiBjb25uZWN0aW9ucy5cbiAgNjg6XHRcbiAgNjk6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzA6XHRcbiAgNzE6XHRjb25maWcgSERMQ19GUlxuICA3MjpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJhbWUgUmVsYXkgc3VwcG9ydFwmIzM0O1xuICA3MzpcdFx0ZGVwZW5kcyBvbiBIRExDXG4gIDc0Olx0XHRoZWxwXG4gIDc1Olx0XHQgIEdlbmVyaWMgSERMQyBkcml2ZXIgc3VwcG9ydGluZyBGcmFtZSBSZWxheSBvdmVyIFdBTiBjb25uZWN0aW9ucy5cbiAgNzY6XHRcbiAgNzc6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNzg6XHRcbiAgNzk6XHRjb25maWcgSERMQ19QUFBcbiAgODA6XHRcdHRyaXN0YXRlIFwmIzM0O1N5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnRcJiMzNDtcbiAgODE6XHRcdGRlcGVuZHMgb24gSERMQ1xuICA4MjpcdFx0aGVscFxuICA4MzpcdFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgUFBQIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuICA4NDpcdFxuICA4NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuICA4NjpcdFxuICA4NzpcdGNvbmZpZyBIRExDX1gyNVxuICA4ODpcdFx0dHJpc3RhdGUgXCYjMzQ7WC4yNSBwcm90b2NvbCBzdXBwb3J0XCYjMzQ7XG4gIDg5Olx0XHRkZXBlbmRzIG9uIEhETEMgXHUwMDI2XHUwMDI2IChMQVBCPW0gXHUwMDI2XHUwMDI2IEhETEM9bSB8fCBMQVBCPXkpXG4gIDkwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjgxNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkludmVzdGlnYXRpbmcgYSBQb3RlbnRpYWwgT3ZlcnNpZ2h0KioKCkhtbSwgSSYjMzk7bSBqdXN0IHF1aWNrbHkgY3Jvc3MtY2hlY2tpbmcgc29tZXRoaW5nIGhlcmUuIEkgd2FzIHRoaW5raW5nIGFib3V0IHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kLCB3aGlsZSBJIHdhcyBhdCBpdCwgaXQgb2NjdXJyZWQgdG8gbWUgdGhhdCB3ZSBzaG91bGQgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIHNldHRpbmcgYEZTTF9VQ0NfSERMQ2Agd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvd2FuL0tjb25maWdgIGZpbGUuIEkgbmVlZCB0byBtYWtlIHN1cmUgd2UgaGF2ZW4mIzM5O3QgbWlzc2VkIGEgcG90ZW50aWFsIGRlcGVuZGVuY3kgb3IgaW50ZXJhY3Rpb24gdGhlcmUsIGdpdmVuIHRoZSBjb250ZXh0IHdlIGFyZSBleGFtaW5pbmcuIE5vIHBvaW50IGluIG1ha2luZyBhc3N1bXB0aW9ucywgYmV0dGVyIHRvIGJlIHRob3JvdWdoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDIwMDpcdGNvbmZpZyBGU0xfUU1DX0hETENcbiAyMDE6XHRcdHRyaXN0YXRlIFwmIzM0O0ZyZWVzY2FsZSBRTUMgSERMQyBzdXBwb3J0XCYjMzQ7XG4gMjAyOlx0XHRkZXBlbmRzIG9uIEhETENcbiAyMDM6XHRcdGRlcGVuZHMgb24gQ1BNX1FNQ1xuIDIwNDpcdFx0aGVscFxuIDIwNTpcdFx0ICBIRExDIHN1cHBvcnQgdXNpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBNdWx0aWNoYW5uZWwgQ29udHJvbGxlciAoUU1DKS5cbiAyMDY6XHRcbiAyMDc6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMjA4Olx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBmc2xfcW1jX2hkbGMuXG4gMjA5Olx0XG4gMjEwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjExOlx0XG4gMjEyOlx0Y29uZmlnIEZTTF9VQ0NfSERMQ1xuIDIxMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHN1cHBvcnRcJiMzNDtcbiAyMTQ6XHRcdGRlcGVuZHMgb24gSERMQ1xuIDIxNTpcdFx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkVcbiAyMTY6XHRcdGhlbHBcbiAyMTc6XHRcdCAgRHJpdmVyIGZvciBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgY29udHJvbGxlci4gVGhlIGRyaXZlclxuIDIxODpcdFx0ICBzdXBwb3J0cyBIRExDIGluIE5NU0kgYW5kIFRETSBtb2RlLlxuIDIxOTpcdFxuIDIyMDpcdFx0ICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGVcbiAyMjE6XHRcdCAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGZzbF91Y2NfaGRsYy5cbiAyMjI6XHRcbiAyMjM6XHRjb25maWcgU0xJQ19EUzI2NTIyXG4gMjI0Olx0XHR0cmlzdGF0ZSBcJiMzNDtTbGljIE1heGltIGRzMjY1MjIgY2FyZCBzdXBwb3J0XCYjMzQ7XG4gMjI1Olx0XHRkZXBlbmRzIG9uIFNQSVxuIDIyNjpcdFx0ZGVwZW5kcyBvbiBGU0xfU09DIHx8IEFSQ0hfTVhDIHx8IEFSQ0hfTEFZRVJTQ0FQRSB8fCBDT01QSUxFX1RFU1RcbiAyMjc6XHRcdHNlbGVjdCBCSVRSRVZFUlNFXG4gMjI4Olx0XHRoZWxwXG4gMjI5Olx0XHQgIFRoaXMgbW9kdWxlIGluaXRpYWxpemVzIGFuZCBjb25maWd1cmVzIHRoZSBzbGljIG1heGltIGNhcmRcbiAyMzA6XHRcdCAgaW4gVDEgb3IgRTEgbW9kZS5cbiAyMzE6XHRcbiAyMzI6XHRcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXG4gMjMzOlx0XHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzbGljX2RzMjY1MjIuXG4gMjM0Olx0XG4gMjM1Olx0Y29uZmlnIElYUDRYWF9IU1NcbiAyMzY6XHRcdHRyaXN0YXRlIFwmIzM0O0ludGVsIElYUDR4eCBIU1MgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0KSBzdXBwb3J0XCYjMzQ7XG4gMjM3Olx0XHRkZXBlbmRzIG9uIEhETEMgXHUwMDI2XHUwMDI2IElYUDRYWF9OUEUgXHUwMDI2XHUwMDI2IElYUDRYWF9RTUdSXG4gMjM4Olx0XHRkZXBlbmRzIG9uIEFSQ0hfSVhQNFhYIFx1MDAyNlx1MDAyNiBPRlxuIDIzOTpcdFx0c2VsZWN0IE1GRF9TWVNDT05cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NjQyCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkRlY2lwaGVyaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUVVJQ0NfRU5HSU5FKioKCkFscmlnaHQsIHNvIEkmIzM5O20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgdGhlIHVuZGVybHlpbmcgcmVxdWlyZW1lbnRzIGZvciBgUVVJQ0NfRU5HSU5FYC4gVGhlIGNydWNpYWwgcXVlc3Rpb24gcmlnaHQgbm93IGlzIHdoZXRoZXIgaXQgaGluZ2VzIG9uIGEgUG93ZXJQQyAob3Igc2ltaWxhciBhcmNoaXRlY3R1cmUpIGVudmlyb25tZW50LCBvciBpZiBpdCYjMzk7cyB0aWVkIHRvIGEgYENPTVBJTEVfVEVTVGAgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXksIGFzIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggZGVwbG95bWVudCBhbmQgdGVzdGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBpbmNsdXNpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBoZXJlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBRVUlDQ19FTkdJTkVgLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGNvZGUgaXRzZWxmIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBRVUlDQ19FTkdJTkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNS1cbmRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnOjY6Y29uZmlnIFFVSUNDX0VOR0lORVxuZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNy1cdGJvb2wgXCYjMzQ7UVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzkxMQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkFuYWx5emluZyB0aGUgS2NvbmZpZyBmb3IgdGhlIEZyZWVzY2FsZSBRRSBEcml2ZXIqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgRnJlZXNjYWxlIFFFIGRyaXZlciBjb25maWd1cmF0aW9uLiBNeSBmaXJzdCBzdGVwIGlzIHRvIGdldCBteSBiZWFyaW5ncyBhbmQgdW5kZXJzdGFuZCBob3cgaXQmIzM5O3Mgc2V0IHVwLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gYGRyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhpcyBkcml2ZXIgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgdGhpcyBkcml2ZXIgaGFzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBRRSBkcml2ZXImIzM5O3MgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCBob3cgaXQgaW50ZWdyYXRlcyBpbnRvIHRoZSBicm9hZGVyIHN5c3RlbS1vbi1hLWNoaXAgKFNvQykgYXJjaGl0ZWN0dXJlLCB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgaXQgc3VwcG9ydHMsIGFuZCB3aGF0IG90aGVyIGNvbXBvbmVudHMgaXQgcmVsaWVzIG9uLiBUaW1lIHRvIGdldCBzdGFydGVkIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvc29jL2ZzbC9xZS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XG4gICAyOlx0I1xuICAgMzpcdCMgUUUgQ29tbXVuaWNhdGlvbiBvcHRpb25zXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNvbmZpZyBRVUlDQ19FTkdJTkVcbiAgIDc6XHRcdGJvb2wgXCYjMzQ7UVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcJiMzNDtcbiAgIDg6XHRcdGRlcGVuZHMgb24gT0YgXHUwMDI2XHUwMDI2IEhBU19JT01FTVxuICAgOTpcdFx0ZGVwZW5kcyBvbiBQUEMgfHwgQVJNIHx8IEFSTTY0IHx8IENPTVBJTEVfVEVTVFxuICAxMDpcdFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXG4gIDExOlx0XHRzZWxlY3QgQ1JDMzJcbiAgMTI6XHRcdGhlbHBcbiAgMTM6XHRcdCAgVGhlIFFVSUNDIEVuZ2luZSAoUUUpIGlzIGEgbmV3IGdlbmVyYXRpb24gb2YgY29tbXVuaWNhdGlvbnNcbiAgMTQ6XHRcdCAgY29wcm9jZXNzb3JzIG9uIEZyZWVzY2FsZSBlbWJlZGRlZCBDUFVzIChha2luIHRvIENQTSBpbiBvbGRlciBjaGlwcykuXG4gIDE1Olx0XHQgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHlvdSB3aXNoIHRvIGJ1aWxkIGEga2VybmVsXG4gIDE2Olx0XHQgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLlxuICAxNzpcdFxuICAxODpcdGNvbmZpZyBVQ0NfU0xPV1xuICAxOTpcdFx0Ym9vbFxuICAyMDpcdFx0ZGVmYXVsdCB5IGlmIFNFUklBTF9RRSB8fCAoQ1BNX1FNQyBcdTAwMjZcdTAwMjYgUVVJQ0NfRU5HSU5FKVxuICAyMTpcdFx0aGVscFxuICAyMjpcdFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0Mgc2xvd1xuICAyMzpcdFx0ICBwcm90b2NvbHM6IFVBUlQsIEJJU1lOQywgUU1DXG4gIDI0Olx0XG4gIDI1Olx0Y29uZmlnIFVDQ19GQVNUXG4gIDI2Olx0XHRib29sXG4gIDI3Olx0XHRkZWZhdWx0IHkgaWYgVUNDX0dFVEggfHwgUUVfVERNXG4gIDI4Olx0XHRoZWxwXG4gIDI5Olx0XHQgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHFlX2xpYiBzdXBwb3J0IHRvIFVDQyBmYXN0XG4gIDMwOlx0XHQgIHByb3RvY29sczogSERMQywgRXRoZXJuZXQsIEFUTSwgdHJhbnNwYXJlbnRcbiAgMzE6XHRcbiAgMzI6XHRjb25maWcgVUNDXG4gIDMzOlx0XHRib29sXG4gIDM0Olx0XHRkZWZhdWx0IHkgaWYgVUNDX0ZBU1QgfHwgVUNDX1NMT1cgfHwgKENQTV9UU0EgXHUwMDI2XHUwMDI2IFFVSUNDX0VOR0lORSlcbiAgMzU6XHRcbiAgMzY6XHRjb25maWcgQ1BNX1RTQVxuICAzNzpcdFx0dHJpc3RhdGUgXCYjMzQ7Q1BNL1FFIFRTQSBzdXBwb3J0XCYjMzQ7XG4gIDM4Olx0XHRkZXBlbmRzIG9uIE9GIFx1MDAyNlx1MDAyNiBIQVNfSU9NRU1cbiAgMzk6XHRcdGRlcGVuZHMgb24gQ1BNMSB8fCBRVUlDQ19FTkdJTkUgfHwgXFxcbiAgNDA6XHRcdFx0ICAgKChDUE0gfHwgUVVJQ0NfRU5HSU5FKSBcdTAwMjZcdTAwMjYgQ09NUElMRV9URVNUKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4Njk1CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBEcml2ZXIqKgoKT2theSwgc28gYGZzbF91Y2NfaGRsY2AgaXMgdGhlIGRyaXZlciBmb3IgdGhlIEhETEMgY29udHJvbGxlciBvbiBGcmVlc2NhbGUmIzM5O3MgUVVJQ0MgRW5naW5lLiBUaGF0IG1ha2VzIHNlbnNlLCBRVUlDQyBFbmdpbmVzIGFyZSBlbWJlZGRlZCBTb0NzLiBCdXQgaG9sZCBvbiwgSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBJIHdvbmRlci4uLiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2VuZXJhbCBIRExDIGZyYW1ld29yayBpbnRlcmFjdHMgd2l0aCB0aGlzIHNwZWNpZmljIFFVSUNDIEVuZ2luZSBkcml2ZXIuCgpMZXQmIzM5O3MgZGl2ZSBpbnRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCB3aXRoaW4gYGhkbGMuY2AuIFRoYXQgZnVuY3Rpb24gaXMga2V5IGZvciBjbGVhbmluZyB1cCByZXNvdXJjZXMsIHNvIEkgc2hvdWxkIHNlZSBob3cgb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSBhcmUgKnVzaW5nKiBpdC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxscywgZGV0ZXJtaW5lIGhvdyBIRExDIGRldmljZXMgYXJlIGJlaW5nIG1hbmFnZWQuCgpUaGUgcmVhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKmNyZWF0ZSogdGhlc2UgSERMQyBkZXZpY2VzIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgb24gYW4gYW1kNjQgbWFjaGluZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgY2FuIHRlc3QsIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLgoKUmlnaHQsIHNvIHRvIGdldCBhIGdvb2QgaGFuZGxlIG9uIHRoaXMsIEkmIzM5O2xsIG5lZWQgdG8gc2VhcmNoIHRoZSBjb2RlIGJhc2UgZm9yIGNhbGxlcnMgb2YgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBidXQgYWxzbyBgYWxsb2NfaGRsY2RldmAgYW5kIGByZWdpc3Rlcl9oZGxjX2RldmljZWAuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBkZXZpY2UgbGlmZWN5Y2xlIGFuZCBob3cgdGhpcyBRVUlDQyBFbmdpbmUgZHJpdmVyIGludGVncmF0ZXMsIGlmIGF0IGFsbCwgd2l0aCBhbnkgZ2VuZXJhbCBIRExDIGZyYW1ld29yay4gR290dGEgcHVsbCB1cCBteSB0b29scyBhbmQgc2VhcmNoIGZvciBhbGwgcmVmZXJlbmNlcyB0byB0aG9zZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oyh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlfHJlZ2lzdGVyX2hkbGNfZGV2aWNlfGFsbG9jX2hkbGNkZXYpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmM9Mjk5PXN0YXRpYyBpbnQgX19pbml0IGMxMDFfcnVuKHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIHdpbmJhc2UpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy0zMTktXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjMyMDpcdGNhcmQtXHUwMDNlZGV2ID0gYWxsb2NfaGRsY2RldihjYXJkKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzIxLVx0aWYgKCFjYXJkLVx1MDAzZWRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzcwLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYzozNzE6XHRyZXN1bHQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy0zNzItXHRpZiAocmVzdWx0KSB7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYz00MjA9c3RhdGljIHZvaWQgX19leGl0IGMxMDFfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVx0XHRjYXJkID0gY2FyZC1cdTAwM2VuZXh0X2NhcmQ7XG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjQyODpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI5LVx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjI5NS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMjk2Olx0XHRlcnIgPSByZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIyOTctXHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDAtXHRcdFx0d2hpbGUgKGktLSlcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM6MjMwMTpcdFx0XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMzAyLVx0XHRcdHJldHVybiBlcnI7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMzI2PWZzdF9hZGRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyNDE1Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfaGRsY2RldihcdTAwMjZjYXJkLVx1MDAzZXBvcnRzW2ldKTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNi1cdFx0aGRsY19kZXZpY2UgKmhkbGM7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA2LVx0Zm9yIChpID0gMCA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzIDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA4LWluaXRfY2FyZF9mYWlsOlxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTI1NDAtXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzA2PXN0YXRpYyBpbnQgcW1jX2hkbGNfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzUxLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc1MjpcdHFtY19oZGxjLVx1MDAzZW5ldGRldiA9IGFsbG9jX2hkbGNkZXYocW1jX2hkbGMpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc1My1cdGlmICghcW1jX2hkbGMtXHUwMDNlbmV0ZGV2KSB7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc2My1cdHFtY19oZGxjLVx1MDAzZW5ldGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2cW1jX2hkbGNfbmV0ZGV2X29wcztcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYzo3NjQ6XHRyZXQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc2NS1cdGlmIChyZXQpIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzgwPXN0YXRpYyB2b2lkIHFtY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6Nzg0Olx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc4NS1cdGZyZWVfbmV0ZGV2KHFtY19oZGxjLVx1MDAzZW5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTExMDc9c3RhdGljIGludCB1Y2NfaGRsY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjE0LVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jOjEyMTU6XHRkZXYgPSBhbGxvY19oZGxjZGV2KHVoZGxjX3ByaXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyMTYtXHRpZiAoIWRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjI5LVx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0KGRldiwgXHUwMDI2dWhkbGNfcHJpdi1cdTAwM2VuYXBpLCB1Y2NfaGRsY19wb2xsLCAzMik7XG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTIzMDpcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIzMS1cdFx0cmV0ID0gLUVOT0JVRlM7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTEyNTQ9c3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTctXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTI1ODpcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU5LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM9MjQxPXN0YXRpYyB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1MC1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjUxOnN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oZGxjZGV2KHZvaWQgKnByaXYpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1Mi17XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNjAtfVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNjE6RVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNjM6dm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI2NC17XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNzAtfVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyNzE6RVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKTtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM9MTM4Nz1zdGF0aWMgaW50IGl4cDR4eF9oc3NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE0ODgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE0ODk6XHRuZGV2ID0gYWxsb2NfaGRsY2Rldihwb3J0KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTQ5MC1cdGlmICghbmRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUwOC1cbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM6MTUwOTpcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKG5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYy0xNTEwLVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jPTE1MjU9c3RhdGljIHZvaWQgaXhwNHh4X2hzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE1Mjk6XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHBvcnQtXHUwMDNlbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUzMC1cdGZyZWVfbmV0ZGV2KHBvcnQtXHUwMDNlbmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYz0yODU9c3RhdGljIHZvaWQgbjJfZGVzdHJveV9jYXJkKGNhcmRfdCAqY2FyZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0yOTItXG5kcml2ZXJzL25ldC93YW4vbjIuYzoyOTM6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2FuL24yLmM9MzIxPXN0YXRpYyBpbnQgX19pbml0IG4yX3J1bih1bnNpZ25lZCBsb25nIGlvLCB1bnNpZ25lZCBsb25nIGlycSxcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDYtXG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDc6XHRjYXJkLVx1MDAzZXBvcnRzWzBdLmRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1swXSk7XG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDg6XHRjYXJkLVx1MDAzZXBvcnRzWzFdLmRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1sxXSk7XG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDktXHRpZiAoIWNhcmQtXHUwMDNlcG9ydHNbMF0uZGV2IHx8ICFjYXJkLVx1MDAzZXBvcnRzWzFdLmRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTQ1OC1cbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjQ1OTpcdFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTQ2MC1cdFx0XHRwcl93YXJuKFwmIzM0O3VuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM9MjQ2PXN0YXRpYyB2b2lkIHBjMzAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjI1MzpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cbi0tXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yODI9c3RhdGljIGludCBwYzMwMF9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMtMzUzLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FyZC1cdTAwM2VuX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM6MzU0Olx0XHRjYXJkLVx1MDAzZXBvcnRzW2ldLm5ldGRldiA9IGFsbG9jX2hkbGNkZXYoXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1tpXSk7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0zNTUtXHRcdGlmICghY2FyZC1cdTAwM2Vwb3J0c1tpXS5uZXRkZXYpIHtcbi0tXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTAtXHRcdHNjYV9pbml0X3BvcnQocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzo0NTE6XHRcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTItXHRcdFx0cHJfZXJyKFwmIzM0O3VuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcblwmIzM0Oyk7XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jPTIyNz1zdGF0aWMgdm9pZCBwY2kyMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTIzMy1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyMzQ6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLm5ldGRldik7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjM1LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYz0yNjM9c3RhdGljIGludCBwY2kyMDBfcGNpX2luaXRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTAtXHRwY2lfc2V0X2RydmRhdGEocGRldiwgY2FyZCk7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6MjkxOlx0Y2FyZC1cdTAwM2Vwb3J0c1swXS5uZXRkZXYgPSBhbGxvY19oZGxjZGV2KFx1MDAyNmNhcmQtXHUwMDNlcG9ydHNbMF0pO1xuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jOjI5MjpcdGNhcmQtXHUwMDNlcG9ydHNbMV0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcdTAwMjZjYXJkLVx1MDAzZXBvcnRzWzFdKTtcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTMtXHRpZiAoIWNhcmQtXHUwMDNlcG9ydHNbMF0ubmV0ZGV2IHx8ICFjYXJkLVx1MDAzZXBvcnRzWzFdLm5ldGRldikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0zODQtXHRcdHNjYV9pbml0X3BvcnQocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6Mzg1Olx0XHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTM4Ni1cdFx0XHRwcl9lcnIoXCYjMzQ7dW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxuXCYjMzQ7KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYz00ODY9c3RhdGljIHZvaWQgd2FueGxfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNDkxLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgY2FyZC1cdTAwM2VuX3BvcnRzOyBpJiM0MzsmIzQzOykge1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NDkyOlx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0uZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5My1cdFx0ZnJlZV9uZXRkZXYoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTUzMz1zdGF0aWMgaW50IHdhbnhsX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcbi0tXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy03NTAtXHRcdHN0cnVjdCBwb3J0ICpwb3J0ID0gXHUwMDI2Y2FyZC1cdTAwM2Vwb3J0c1tpXTtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjc1MTpcdFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2hkbGNkZXYocG9ydCk7XG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy03NTItXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzY5LVx0XHRnZXRfc3RhdHVzKHBvcnQpLVx1MDAzZWNsb2NraW5nID0gQ0xPQ0tfRVhUO1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NzcwOlx0XHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzcxLVx0XHRcdHByX2VycihcJiMzNDslczogdW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxuXCYjMzQ7LFxuLS1cbmluY2x1ZGUvbGludXgvaGRsYy5oPTU3PWludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC01OS0vKiBNdXN0IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIG9uIG1vZHVsZSBzdGFydHVwL2V4aXQgKi9cbmluY2x1ZGUvbGludXgvaGRsYy5oOjYwOiNkZWZpbmUgcmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KVx0cmVnaXN0ZXJfbmV0ZGV2KGRldilcbmluY2x1ZGUvbGludXgvaGRsYy5oOjYxOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbmluY2x1ZGUvbGludXgvaGRsYy5oLTYyLVxuLS1cbmluY2x1ZGUvbGludXgvaGRsYy5oPTY1PXZvaWQgdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byk7XG5pbmNsdWRlL2xpbnV4L2hkbGMuaC02Ni1cbmluY2x1ZGUvbGludXgvaGRsYy5oOjY3OnN0cnVjdCBuZXRfZGV2aWNlICphbGxvY19oZGxjZGV2KHZvaWQgKnByaXYpO1xuaW5jbHVkZS9saW51eC9oZGxjLmgtNjgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzMzU1CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogODMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSERMQyBEcml2ZXIgSW52ZXN0aWdhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIG9mIEhETEMgZHJpdmVycyB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGFyZSB3ZSBkZWFsaW5nIGV4Y2x1c2l2ZWx5IHdpdGggcGh5c2ljYWwgV0FOIGNhcmRzIGhlcmUsIG9yIGFyZSB0aGVyZSBhbnkgdmlydHVhbCBpbXBsZW1lbnRhdGlvbnMgZmxvYXRpbmcgYXJvdW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS4KCk15IGZpcnN0IHRob3VnaHQgaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIG1ldGljdWxvdXNseSBleGFtaW5lIGFsbCB0aGUgZmlsZXMuIFNwZWNpZmljYWxseSwgSSBzaG91bGQgYmUgbG9va2luZyBhdCB0aGUgYGRyaXZlcnMvbmV0L3dhbi9gIGRpcmVjdG9yeSwgbmF0dXJhbGx5LiBCdXQsIEkgZG9uJiMzOTt0IHdhbnQgdG8gbWlzcyBhbnl0aGluZywgc28gSSBzaG91bGQgZXhwYW5kIG15IHNlYXJjaCBtb3JlIGJyb2FkbHkuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYW55d2hlcmUgZWxzZSB0aGF0IG1pZ2h0IHRvdWNoIEhETEMgZGlyZWN0bHkuIE15IHNlYXJjaCB0ZXJtcyB3aWxsIGJlIGBIRExDYCBpdHNlbGYsIHBsdXMgYW55IGluc3RhbmNlcyBvZiBgYWxsb2NfaGRsY2RldmAgb3IgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhvc2UgZnVuY3Rpb24gY2FsbHMgc2hvdWxkIGJlIGtleSBpbmRpY2F0b3JzLgoKQWN0dWFsbHksIGJlZm9yZSBJIGdldCBsb3N0IGluIHRoZSB3ZWVkcywgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYSBzaW1wbGUgaW52ZW50b3J5LiBGaXJzdCwgSSB3aWxsIGxpc3QgYWxsIHRoZSBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dhbi9gLiBUaGVuLCBiYXNlZCBvbiB0aGlzIGludmVudG9yeSwgSSB3aWxsIHJlZmluZSBteSBzZWFyY2ggYXMgbmVlZGVkLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBoZWxwIGtlZXAgdGhpbmdzIG9yZ2FuaXplZCBhbmQgcHJldmVudCBtZSBmcm9tIG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDtjMTAxLmMmIzM0OywKICAgICYjMzQ7ZmFyc3luYy5jJiMzNDssCiAgICAmIzM0O2ZhcnN5bmMuaCYjMzQ7LAogICAgJiMzNDtmc2xfcW1jX2hkbGMuYyYjMzQ7LAogICAgJiMzNDtmc2xfdWNjX2hkbGMuYyYjMzQ7LAogICAgJiMzNDtmc2xfdWNjX2hkbGMuaCYjMzQ7LAogICAgJiMzNDtoZDY0NTcwLmMmIzM0OywKICAgICYjMzQ7aGQ2NDU3MC5oJiMzNDssCiAgICAmIzM0O2hkNjQ1NzIuYyYjMzQ7LAogICAgJiMzNDtoZDY0NTcyLmgmIzM0OywKICAgICYjMzQ7aGRsYy5jJiMzNDssCiAgICAmIzM0O2hkbGNfY2lzY28uYyYjMzQ7LAogICAgJiMzNDtoZGxjX2ZyLmMmIzM0OywKICAgICYjMzQ7aGRsY19wcHAuYyYjMzQ7LAogICAgJiMzNDtoZGxjX3Jhdy5jJiMzNDssCiAgICAmIzM0O2hkbGNfcmF3X2V0aC5jJiMzNDssCiAgICAmIzM0O2hkbGNfeDI1LmMmIzM0OywKICAgICYjMzQ7aXhwNHh4X2hzcy5jJiMzNDssCiAgICAmIzM0O2xhcGJldGhlci5jJiMzNDssCiAgICAmIzM0O24yLmMmIzM0OywKICAgICYjMzQ7cGMzMDB0b28uYyYjMzQ7LAogICAgJiMzNDtwY2kyMDBzeW4uYyYjMzQ7LAogICAgJiMzNDtzbGljX2RzMjY1MjIuYyYjMzQ7LAogICAgJiMzNDtzbGljX2RzMjY1MjIuaCYjMzQ7LAogICAgJiMzNDt3YW54bC5jJiMzNDssCiAgICAmIzM0O3dhbnhsLmgmIzM0OywKICAgICYjMzQ7d2FueGxmdy5TJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBbCiAgICAmIzM0O2ZyYW1lciYjMzQ7CiAgXQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MDA3CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKgoKT2theSwgdGltZSB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGxhbmRzY2FwZSBhbmQgc2VlIHdoYXQmIzM5O3Mgb3V0IHRoZXJlIHVzaW5nIGBhbGxvY19oZGxjZGV2YC4gIEkgbmVlZCB0byBnZXQgYSBmaXJtIGdyYXNwIG9uIGFsbCB0aGUgSERMQyBkZXZpY2VzIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGguIExldCYjMzk7cyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBzd2VlcC4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0OgoKKiAgIGBjMTAxLmNgIOKAkyB0aGF0JiMzOTtzIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGdvb2QgdG8ga25vdy4KKiAgIGBmYXJzeW5jLmNgIOKAkyBjb3ZlcmluZyBGYXJTeW5jIFBDSS9QQ0llIHN5bmMgY2FyZHMuIEdvdCBpdC4KKiAgIGBmc2xfcW1jX2hkbGMuY2Ag4oCTIEZyZWVzY2FsZSBRTUMgcGxhdGZvcm0gZGV2aWNlcy4gQ2hlY2tpbmcuCiogICBgZnNsX3VjY19oZGxjLmNgIOKAkyBhbmQgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgcGxhdGZvcm0gZGV2aWNlcy4KKiAgIGBpeHA0eHhfaHNzLmNgIOKAkyB0aGUgSW50ZWwgSVhQNHh4IFNvQyBzeW5jaHJvbm91cyBzZXJpYWwgcG9ydC4KKiAgIGBuMi5jYCDigJMgaGFuZGxpbmcgdGhlIFNETCBSSVNDb20vTjIgSVNBIGNhcmQuCiogICBgcGMzMDB0b28uY2Ag4oCTIEN5Y2xhZGVzLVBDMzAwIFBDSSBjYXJkLgoqICAgYHBjaTIwMHN5bi5jYCDigJMgdGhlIEdvcmFtbyBQQ0kyMDBTeW4gUENJIGNhcmQuCiogICBgd2FueGwuY2Ag4oCTIFNCRSBJbmMuIHdhblhMIFBDSSBjYXJkLgoKSG9sZCBvbiBhIHNlY29uZC4uLiBiZWZvcmUgSSBnZXQgdG9vIGRlZXAgaW50byB0aGlzIGxpc3QsIEkgbmVlZCB0byBiZSAqdGhvcm91Z2gqLiBJIHNob3VsZCB3aWRlbiB0aGUgbmV0IGEgYml0LiBJcyBhbnl0aGluZyBlbHNlIGNyZWF0aW5nIGFuIEhETEMgZGV2aWNlIHVzaW5nIGEgZGlmZmVyZW50IGFsbG9jYXRpb24gbWV0aG9kLCBvciBwZXJoYXBzIGxldmVyYWdpbmcgYGhkbGMuY2AgZGlyZWN0bHk/IEkgd2FudCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4KCk9rYXksIGxldCYjMzk7cyBzdGFydCB3aXRoIGBsYXBiZXRoZXIuY2AgdG8gc2VlIGlmIHRoZXJlIGlzIHNvbWV0aGluZyBlbHNlIGdvaW5nIG9uLiBJJiMzOTtsbCBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGl0IGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZWdpc3Rlcl8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jPTMwMT1zdGF0aWMgaW50IGxhcGJldGhfc2V0X21hY19hZGRyZXNzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMwOC1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzozMDk6c3RhdGljIGNvbnN0IHN0cnVjdCBsYXBiX3JlZ2lzdGVyX3N0cnVjdCBsYXBiZXRoX2NhbGxiYWNrcyA9IHtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy0zMTAtXHQuY29ubmVjdF9jb25maXJtYXRpb24gICAgPSBsYXBiZXRoX2Nvbm5lY3RlZCxcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9MzgxPXN0YXRpYyBpbnQgbGFwYmV0aF9uZXdfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTQxOS1cdHJjID0gLUVJTztcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo0MjA6XHRpZiAocmVnaXN0ZXJfbmV0ZGV2aWNlKG5kZXYpKVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTQyMS1cdFx0Z290byBmYWlsO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00MzU9c3RhdGljIHZvaWQgbGFwYmV0aF9mcmVlX2RldmljZShzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDM4LVx0bGlzdF9kZWxfcmN1KFx1MDAyNmxhcGJldGgtXHUwMDNlbm9kZSk7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NDM5Olx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UobGFwYmV0aC1cdTAwM2VheGRldik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDQwLX1cbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM9NDk4PXN0YXRpYyBpbnQgX19pbml0IGxhcGJldGhfaW5pdF9kcml2ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTAzLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUwNDpcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcdTAwMjZsYXBiZXRoX2Rldl9ub3RpZmllcik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTA1LVx0aWYgKGVycikge1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz01MTY9c3RhdGljIHZvaWQgX19leGl0IGxhcGJldGhfY2xlYW51cF9kcml2ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTIxLVx0ZGV2X3JlbW92ZV9wYWNrKFx1MDAyNmxhcGJldGhfcGFja2V0X3R5cGUpO1xuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUyMjpcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmxhcGJldGhfZGV2X25vdGlmaWVyKTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MjMtXG4tLVxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyOC1cdFx0ZGV2X3B1dChsYXBiZXRoLVx1MDAzZWV0aGRldik7XG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NTI5Olx0XHR1bnJlZ2lzdGVyX25ldGRldmljZShsYXBiZXRoLVx1MDAzZWF4ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MzAtXHR9XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MzM2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgRGVlcCBpbnRvIHRoZSBIRExDIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHRpbWUgdG8gcmVhbGx5IGdldCBpbnRvIHRoZSBuaXR0eS1ncml0dHkgb2YgdGhpcyBIRExDIGltcGxlbWVudGF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgZ2VuZXJpYyBIRExDIGlzIGhhbmRsZWQgaGVyZS4gSSYjMzk7bSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgaGRsYy5jYCBmcm9tIHRvcCB0byBib3R0b20uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb3JlIGxvZ2ljIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gZGF0YSBmcmFtaW5nLCBlcnJvciBkZXRlY3Rpb24sIGZsYWcgaGFuZGxpbmcsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBlc3NlbnRpYWwgYnVpbGRpbmcgYmxvY2tzLCB0aGUgY3JpdGljYWwgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIG51YW5jZXMgb2YgdGhlIGRlc2lnbiB0aGF0IG1ha2UgdGhpcyBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiB0aWNrLiBVbmRlcnN0YW5kaW5nIHRoZSBnZW5lcmljIEhETEMgYXNwZWN0cyBpcyBjcnVjaWFsIGJlZm9yZSBJIGdldCBhbnkgZnVydGhlciwgYXMgaXQgbGlrZWx5IGZvcm1zIHRoZSBiYXNpcyBmb3IgYW55IHByb3RvY29sIGV4dGVuc2lvbnMgb3IgY3VzdG9taXphdGlvbnMgdGhhdCBtaWdodCBiZSBwcmVzZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdC8qXG4gICAzOlx0ICogR2VuZXJpYyBIRExDIHN1cHBvcnQgcm91dGluZXMgZm9yIExpbnV4XG4gICA0Olx0ICpcbiAgIDU6XHQgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA4IEtyenlzenRvZiBIYWxhc2EgXHUwMDNja2hjQHBtLndhdy5wbFx1MDAzZVxuICAgNjpcdCAqXG4gICA3Olx0ICogQ3VycmVudGx5IHN1cHBvcnRlZDpcbiAgIDg6XHQgKlx0KiByYXcgSVAtaW4tSERMQ1xuICAgOTpcdCAqXHQqIENpc2NvIEhETENcbiAgMTA6XHQgKlx0KiBGcmFtZSBSZWxheSB3aXRoIEFOU0kgb3IgQ0NJVFQgTE1JIChib3RoIHVzZXIgYW5kIG5ldHdvcmsgc2lkZSlcbiAgMTE6XHQgKlx0KiBQUFBcbiAgMTI6XHQgKlx0KiBYLjI1XG4gIDEzOlx0ICpcbiAgMTQ6XHQgKiBVc2Ugc2V0aGRsYyB1dGlsaXR5IHRvIHNldCBsaW5lIHBhcmFtZXRlcnMsIHByb3RvY29sIGFuZCBQVkNzXG4gIDE1Olx0ICpcbiAgMTY6XHQgKiBIb3cgZG9lcyBpdCB3b3JrOlxuICAxNzpcdCAqIC0gcHJvdG8tXHUwMDNlb3BlbigpLCBjbG9zZSgpLCBzdGFydCgpLCBzdG9wKCkgY2FsbHMgYXJlIHNlcmlhbGl6ZWQuXG4gIDE4Olx0ICogICBUaGUgb3JkZXIgaXM6IG9wZW4sIFsgc3RhcnQsIHN0b3AgLi4uIF0gY2xvc2UgLi4uXG4gIDE5Olx0ICogLSBwcm90by1cdTAwM2VzdGFydCgpIGFuZCBzdG9wKCkgYXJlIGNhbGxlZCB3aXRoIHNwaW5fbG9ja19pcnEgaGVsZC5cbiAgMjA6XHQgKi9cbiAgMjE6XHRcbiAgMjI6XHQjZGVmaW5lIHByX2ZtdChmbXQpIEtCVUlMRF9NT0ROQU1FIFwmIzM0OzogXCYjMzQ7IGZtdFxuICAyMzpcdFxuICAyNDpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vycm5vLmhcdTAwM2VcbiAgMjU6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9oZGxjLmhcdTAwM2VcbiAgMjY6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9hcnAuaFx1MDAzZVxuICAyNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luZXRkZXZpY2UuaFx1MDAzZVxuICAyODpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICAyOTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L2tlcm5lbC5oXHUwMDNlXG4gIDMwOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAgMzE6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gIDMyOlx0I2luY2x1ZGUgXHUwMDNjbGludXgvcGt0X3NjaGVkLmhcdTAwM2VcbiAgMzM6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9wb2xsLmhcdTAwM2VcbiAgMzQ6XHQjaW5jbHVkZSBcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFx1MDAzZVxuICAzNTpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4gIDM2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gIDM3Olx0I2luY2x1ZGUgXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFx1MDAzZVxuICAzODpcdFxuICAzOTpcdHN0YXRpYyBjb25zdCBjaGFyICp2ZXJzaW9uID0gXCYjMzQ7SERMQyBzdXBwb3J0IG1vZHVsZSByZXZpc2lvbiAxLjIyXCYjMzQ7O1xuICA0MDpcdFxuICA0MTpcdCN1bmRlZiBERUJVR19MSU5LXG4gIDQyOlx0XG4gIDQzOlx0c3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvICpmaXJzdF9wcm90bztcbiAgNDQ6XHRcbiAgNDU6XHRzdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gIDQ2Olx0XHRcdCAgICBzdHJ1Y3QgcGFja2V0X3R5cGUgKnAsIHN0cnVjdCBuZXRfZGV2aWNlICpvcmlnX2RldilcbiAgNDc6XHR7XG4gIDQ4Olx0XHRzdHJ1Y3QgaGRsY19kZXZpY2UgKmhkbGM7XG4gIDQ5Olx0XG4gIDUwOlx0XHQvKiBGaXJzdCBtYWtlIHN1cmUgXCYjMzQ7ZGV2XCYjMzQ7IGlzIGFuIEhETEMgZGV2aWNlICovXG4gIDUxOlx0XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xuICA1MjpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNTM6XHRcdFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xuICA1NDpcdFx0fVxuICA1NTpcdFxuICA1NjpcdFx0aGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gIDU3Olx0XG4gIDU4Olx0XHRpZiAoIW5ldF9lcShkZXZfbmV0KGRldiksIFx1MDAyNmluaXRfbmV0KSkge1xuICA1OTpcdFx0XHRrZnJlZV9za2Ioc2tiKTtcbiAgNjA6XHRcdFx0cmV0dXJuIDA7XG4gIDYxOlx0XHR9XG4gIDYyOlx0XG4gIDYzOlx0XHRCVUdfT04oIWhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlbmV0aWZfcngpO1xuICA2NDpcdFx0cmV0dXJuIGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlbmV0aWZfcngoc2tiKTtcbiAgNjU6XHR9XG4gIDY2Olx0XG4gIDY3Olx0bmV0ZGV2X3R4X3QgaGRsY19zdGFydF94bWl0KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDY4Olx0e1xuICA2OTpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuICA3MDpcdFxuICA3MTpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNleG1pdClcbiAgNzI6XHRcdFx0cmV0dXJuIGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNleG1pdChza2IsIGRldik7XG4gIDczOlx0XG4gIDc0Olx0XHRyZXR1cm4gaGRsYy1cdTAwM2V4bWl0KHNrYiwgZGV2KTsgLyogY2FsbCBoYXJkd2FyZSBkcml2ZXIgZGlyZWN0bHkgKi9cbiAgNzU6XHR9XG4gIDc2Olx0RVhQT1JUX1NZTUJPTChoZGxjX3N0YXJ0X3htaXQpO1xuICA3NzpcdFxuICA3ODpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3Byb3RvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gIDc5Olx0e1xuICA4MDpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuICA4MTpcdFxuICA4MjpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RhcnQpXG4gIDgzOlx0XHRcdGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RhcnQoZGV2KTtcbiAgODQ6XHR9XG4gIDg1Olx0XG4gIDg2Olx0c3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICA4NzpcdHtcbiAgODg6XHRcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiAgODk6XHRcbiAgOTA6XHRcdGlmIChoZGxjLVx1MDAzZXByb3RvLVx1MDAzZXN0b3ApXG4gIDkxOlx0XHRcdGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlc3RvcChkZXYpO1xuICA5MjpcdH1cbiAgOTM6XHRcbiAgOTQ6XHRzdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbiAgOTU6XHRcdFx0XHQgICAgIHZvaWQgKnB0cilcbiAgOTY6XHR7XG4gIDk3Olx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2luZm9fdG9fZGV2KHB0cik7XG4gIDk4Olx0XHRoZGxjX2RldmljZSAqaGRsYztcbiAgOTk6XHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gMTAwOlx0XHRpbnQgb247XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDA4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUgd2UgZ28uLi4KCioqRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoaXMgYGhkbGMuY2AgZmlsZSBoYXMgdG8gb2ZmZXIgaW4gdGhlIGB3YW5gIG5ldHdvcmsgZHJpdmVyIGNvbnRleHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBIaWdoLUxldmVsIERhdGEgTGluayBDb250cm9sIChIRExDKSBpcyBpbXBsZW1lbnRlZCB3aXRoaW4gdGhpcyBrZXJuZWwgc3BhY2UuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHR5cGljYWwgSERMQyBmcmFtaW5nIG1lY2hhbmlzbXMsIGVycm9yIGRldGVjdGlvbiwgYW5kIHBvdGVudGlhbGx5IHNvbWUgaGFyZHdhcmUtc3BlY2lmaWMgaW50ZXJhY3Rpb24gaWYgaXQmIzM5O3Mgbm90IGEgcHVyZWx5IHNvZnR3YXJlLWJhc2VkIGltcGxlbWVudGF0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciB0aGluZ3MgbGlrZSBmbGFnIHNlcXVlbmNlIGhhbmRsaW5nLCBhZGRyZXNzIGFuZCBjb250cm9sIGZpZWxkIHByb2Nlc3NpbmcsIENSQyBjYWxjdWxhdGlvbnMsIGFuZCBvZiBjb3Vyc2UsIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciBtZWNoYW5pc21zLiBJIHdhbnQgdG8gcGF5IGF0dGVudGlvbiB0byBhbnkgcG90ZW50aWFsIG9wdGltaXphdGlvbnMgdGhleSYjMzk7dmUgaW1wbGVtZW50ZWQsIGVzcGVjaWFsbHkgYXJvdW5kIGludGVycnVwdCBoYW5kbGluZyBvciBETUEgdXNhZ2UgaWYgaXQmIzM5O3MgdGhlcmUsIHRvIHNlZSBob3cgdGhleSYjMzk7cmUgbWF4aW1pemluZyB0aHJvdWdocHV0IGZvciBXQU4gY29ubmVjdGlvbnMgdXNpbmcgdGhpcyBwcm90b2NvbC4gVGhlIGNvZGUgc2hvdWxkIHJldmVhbCBob3cgdGhleSYjMzk7cmUgaGFuZGxpbmcgZGlmZmVyZW50IEhETEMgdmFyaWFudHMgYXMgd2VsbCwgbGlrZSBDaXNjbyBIRExDIG9yIEZyYW1lIFJlbGF5LCBpZiBzdXBwb3J0ZWQuIExldCYjMzk7cyBzdGFydCBkaXNzZWN0aW5nIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9oZGxjLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxMDE6XHRcbiAxMDI6XHRcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXHUwMDI2aW5pdF9uZXQpKVxuIDEwMzpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMTA0Olx0XG4gMTA1Olx0XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSlcbiAxMDY6XHRcdFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBub3QgYW4gSERMQyBkZXZpY2UgKi9cbiAxMDc6XHRcbiAxMDg6XHRcdGlmIChldmVudCAhPSBORVRERVZfQ0hBTkdFKVxuIDEwOTpcdFx0XHRyZXR1cm4gTk9USUZZX0RPTkU7IC8qIE9ubHkgaW50ZXJlc3RlZCBpbiBjYXJyaWVyIGNoYW5nZXMgKi9cbiAxMTA6XHRcbiAxMTE6XHRcdG9uID0gbmV0aWZfY2Fycmllcl9vayhkZXYpO1xuIDExMjpcdFxuIDExMzpcdCNpZmRlZiBERUJVR19MSU5LXG4gMTE0Olx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDslczogaGRsY19kZXZpY2VfZXZlbnQgTkVUREVWX0NIQU5HRSwgY2FycmllciAlaVxcblwmIzM0OyxcbiAxMTU6XHRcdCAgICAgICBkZXYtXHUwMDNlbmFtZSwgb24pO1xuIDExNjpcdCNlbmRpZlxuIDExNzpcdFxuIDExODpcdFx0aGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMTE5Olx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcbiAxMjA6XHRcbiAxMjE6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIgPT0gb24pXG4gMTIyOlx0XHRcdGdvdG8gY2Fycmllcl9leGl0OyAvKiBubyBjaGFuZ2UgaW4gRENEIGxpbmUgbGV2ZWwgKi9cbiAxMjM6XHRcbiAxMjQ6XHRcdGhkbGMtXHUwMDNlY2FycmllciA9IG9uO1xuIDEyNTpcdFxuIDEyNjpcdFx0aWYgKCFoZGxjLVx1MDAzZW9wZW4pXG4gMTI3Olx0XHRcdGdvdG8gY2Fycmllcl9leGl0O1xuIDEyODpcdFxuIDEyOTpcdFx0aWYgKGhkbGMtXHUwMDNlY2Fycmllcikge1xuIDEzMDpcdFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O0NhcnJpZXIgZGV0ZWN0ZWRcXG5cJiMzNDspO1xuIDEzMTpcdFx0XHRoZGxjX3Byb3RvX3N0YXJ0KGRldik7XG4gMTMyOlx0XHR9IGVsc2Uge1xuIDEzMzpcdFx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O0NhcnJpZXIgbG9zdFxcblwmIzM0Oyk7XG4gMTM0Olx0XHRcdGhkbGNfcHJvdG9fc3RvcChkZXYpO1xuIDEzNTpcdFx0fVxuIDEzNjpcdFxuIDEzNzpcdGNhcnJpZXJfZXhpdDpcbiAxMzg6XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrLCBmbGFncyk7XG4gMTM5Olx0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4gMTQwOlx0fVxuIDE0MTpcdFxuIDE0MjpcdC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIG9wZW5lZCAqL1xuIDE0MzpcdGludCBoZGxjX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAxNDQ6XHR7XG4gMTQ1Olx0XHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMTQ2Olx0I2lmZGVmIERFQlVHX0xJTktcbiAxNDc6XHRcdHByaW50ayhLRVJOX0RFQlVHIFwmIzM0OyVzOiBoZGxjX29wZW4oKSBjYXJyaWVyICVpIG9wZW4gJWlcXG5cJiMzNDssIGRldi1cdTAwM2VuYW1lLFxuIDE0ODpcdFx0ICAgICAgIGhkbGMtXHUwMDNlY2FycmllciwgaGRsYy1cdTAwM2VvcGVuKTtcbiAxNDk6XHQjZW5kaWZcbiAxNTA6XHRcbiAxNTE6XHRcdGlmICghaGRsYy1cdTAwM2Vwcm90bylcbiAxNTI6XHRcdFx0cmV0dXJuIC1FTk9TWVM7XHQvKiBubyBwcm90b2NvbCBhdHRhY2hlZCAqL1xuIDE1MzpcdFxuIDE1NDpcdFx0aWYgKGhkbGMtXHUwMDNlcHJvdG8tXHUwMDNlb3Blbikge1xuIDE1NTpcdFx0XHRpbnQgcmVzdWx0ID0gaGRsYy1cdTAwM2Vwcm90by1cdTAwM2VvcGVuKGRldik7XG4gMTU2Olx0XG4gMTU3Olx0XHRcdGlmIChyZXN1bHQpXG4gMTU4Olx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcbiAxNTk6XHRcdH1cbiAxNjA6XHRcbiAxNjE6XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrKTtcbiAxNjI6XHRcbiAxNjM6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIpIHtcbiAxNjQ6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtDYXJyaWVyIGRldGVjdGVkXFxuXCYjMzQ7KTtcbiAxNjU6XHRcdFx0aGRsY19wcm90b19zdGFydChkZXYpO1xuIDE2NjpcdFx0fSBlbHNlIHtcbiAxNjc6XHRcdFx0bmV0ZGV2X2luZm8oZGV2LCBcJiMzNDtObyBjYXJyaWVyXFxuXCYjMzQ7KTtcbiAxNjg6XHRcdH1cbiAxNjk6XHRcbiAxNzA6XHRcdGhkbGMtXHUwMDNlb3BlbiA9IDE7XG4gMTcxOlx0XG4gMTcyOlx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2aGRsYy1cdTAwM2VzdGF0ZV9sb2NrKTtcbiAxNzM6XHRcdHJldHVybiAwO1xuIDE3NDpcdH1cbiAxNzU6XHRFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7XG4gMTc2Olx0XG4gMTc3Olx0LyogTXVzdCBiZSBjYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gSERMQyBkZXZpY2UgaXMgYmVpbmcgY2xvc2VkICovXG4gMTc4Olx0dm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gMTc5Olx0e1xuIDE4MDpcdFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xuIDE4MTpcdCNpZmRlZiBERUJVR19MSU5LXG4gMTgyOlx0XHRwcmludGsoS0VSTl9ERUJVRyBcJiMzNDslczogaGRsY19jbG9zZSgpIGNhcnJpZXIgJWkgb3BlbiAlaVxcblwmIzM0OywgZGV2LVx1MDAzZW5hbWUsXG4gMTgzOlx0XHQgICAgICAgaGRsYy1cdTAwM2VjYXJyaWVyLCBoZGxjLVx1MDAzZW9wZW4pO1xuIDE4NDpcdCNlbmRpZlxuIDE4NTpcdFxuIDE4NjpcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2spO1xuIDE4NzpcdFxuIDE4ODpcdFx0aGRsYy1cdTAwM2VvcGVuID0gMDtcbiAxODk6XHRcdGlmIChoZGxjLVx1MDAzZWNhcnJpZXIpXG4gMTkwOlx0XHRcdGhkbGNfcHJvdG9fc3RvcChkZXYpO1xuIDE5MTpcdFxuIDE5MjpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmhkbGMtXHUwMDNlc3RhdGVfbG9jayk7XG4gMTkzOlx0XG4gMTk0Olx0XHRpZiAoaGRsYy1cdTAwM2Vwcm90by1cdTAwM2VjbG9zZSlcbiAxOTU6XHRcdFx0aGRsYy1cdTAwM2Vwcm90by1cdTAwM2VjbG9zZShkZXYpO1xuIDE5NjpcdH1cbiAxOTc6XHRFWFBPUlRfU1lNQk9MKGhkbGNfY2xvc2UpO1xuIDE5ODpcdFxuIDE5OTpcdGludCBoZGxjX2lvY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpZl9zZXR0aW5ncyAqaWZzKVxuIDIwMDpcdHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg3NjEKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiByZWFkaW5nIHRoYXQgY29kZSwgZXhwcmVzc2VkIGFzIGlmIGl0JiMzOTtzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC93YW4vaGRsYy5jYCAtIExpbmVzIDIwMSBPbndhcmQqKgoKQWxyaWdodCwgdGltZSB0byBkaWcgZGVlcGVyIGludG8gdGhpcyBgaGRsYy5jYCBkcml2ZXIuIEkmIzM5O3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNjYW4sIGFuZCBub3cgSSYjMzk7bSBzdGFydGluZyBmcm9tIGxpbmUgMjAxIHRvIHRoZSBlbmQgb2YgdGhlIGZpbGUuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHRoaXMgZHJpdmVyIGlzIGRvaW5nLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IGl0IGhhbmRsZXMgdGhlIGxvd2VyLWxldmVsIGZyYW1pbmcgYW5kIHBlcmhhcHMgZGF0YSB0cmFuc21pc3Npb24gb3ZlciBXQU4gY29ubmVjdGlvbnMuCgpJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvcmUgSERMQyBmcmFtZSBwcm9jZXNzaW5nOiBkZWZpbml0ZWx5IGxvb2tpbmcgZm9yIENSQyBjYWxjdWxhdGlvbnMsIGZsYWcgYnl0ZSBoYW5kbGluZywgYW5kIGRlLXN0dWZmaW5nL3N0dWZmaW5nIG1lY2hhbmlzbXMgZm9yIHRoZSBIRExDIGZyYW1lJiMzOTtzIHN0YXJ0IGFuZCBlbmQgZmxhZ3MsIGVuc3VyaW5nIGRhdGEgaW50ZWdyaXR5IGR1cmluZyB0cmFuc21pc3Npb24uIEkgYWxzbyB3YW50IHRvIHVuZGVyc3RhbmQgaG93IGl0IGludGVyZmFjZXMgd2l0aCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZSwgaWYgd2UgaGF2ZW7igJl0IGFscmVhZHkgY292ZXJlZCB0aGF0LiBJcyBpdCB1c2luZyBETUE/IEFyZSB0aGVyZSBpbnRlcnJ1cHQgaGFuZGxlcnMgZm9yIGZyYW1lIHJlY2VwdGlvbiBhbmQgdHJhbnNtaXNzaW9uPyBXaGF0IHNwZWNpZmljIGhhcmR3YXJlIHJlZ2lzdGVycyBhcmUgYmVpbmcgbWFuaXB1bGF0ZWQ/IEFsc28sIEkgd2lsbCBiZSBrZWVuIHRvIGlkZW50aWZ5IGhvdyB0aGUgZHJpdmVyIGhhbmRsZXMgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgb24gdGhlIFdBTiBsaW5rLCB0aGluZ3MgbGlrZSBmcmFtZSBjaGVja3N1bSBmYWlsdXJlcywgYW5kIGRhdGEgbG9zcy4KCkkmIzM5O2xsIGJlIHNwZWNpZmljYWxseSB3YXRjaGluZyBmb3IgaG93IHRoZSBkcml2ZXIgaGFuZGxlcyB0aGUgbmV0d29yayBkZXZpY2Ugc3RydWN0dXJlLCBhbmQgaG93IGl0IGlzIGludGVncmF0aW5nIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBuZXR3b3JraW5nIHN0YWNrIOKAkyB3aGF0IG5ldF9kZXZpY2UgY2FsbHMgYXJlIGJlaW5nIHVzZWQsIGFuZCBob3cgaXQmIzM5O3MgaW50ZXJmYWNpbmcgd2l0aCB1cHBlci1sYXllciBwcm90b2NvbHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIHZlcnkgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2hkbGMuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIwMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjAxOlx0XHRzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8gPSBmaXJzdF9wcm90bztcbiAyMDI6XHRcdGludCByZXN1bHQ7XG4gMjAzOlx0XG4gMjA0Olx0XHRpZiAoZGV2X3RvX2hkbGMoZGV2KS1cdTAwM2Vwcm90bykge1xuIDIwNTpcdFx0XHRyZXN1bHQgPSBkZXZfdG9faGRsYyhkZXYpLVx1MDAzZXByb3RvLVx1MDAzZWlvY3RsKGRldiwgaWZzKTtcbiAyMDY6XHRcdFx0aWYgKHJlc3VsdCAhPSAtRUlOVkFMKVxuIDIwNzpcdFx0XHRcdHJldHVybiByZXN1bHQ7XG4gMjA4Olx0XHR9XG4gMjA5Olx0XG4gMjEwOlx0XHQvKiBOb3QgaGFuZGxlZCBieSBjdXJyZW50bHkgYXR0YWNoZWQgcHJvdG9jb2wgKGlmIGFueSkgKi9cbiAyMTE6XHRcbiAyMTI6XHRcdHdoaWxlIChwcm90bykge1xuIDIxMzpcdFx0XHRyZXN1bHQgPSBwcm90by1cdTAwM2Vpb2N0bChkZXYsIGlmcyk7XG4gMjE0Olx0XHRcdGlmIChyZXN1bHQgIT0gLUVJTlZBTClcbiAyMTU6XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuIDIxNjpcdFx0XHRwcm90byA9IHByb3RvLVx1MDAzZW5leHQ7XG4gMjE3Olx0XHR9XG4gMjE4Olx0XHRyZXR1cm4gLUVJTlZBTDtcbiAyMTk6XHR9XG4gMjIwOlx0RVhQT1JUX1NZTUJPTChoZGxjX2lvY3RsKTtcbiAyMjE6XHRcbiAyMjI6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGhlYWRlcl9vcHMgaGRsY19udWxsX29wcztcbiAyMjM6XHRcbiAyMjQ6XHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDIyNTpcdHtcbiAyMjY6XHRcdC8qIFJlLWluaXQgYWxsIHZhcmlhYmxlcyBjaGFuZ2VkIGJ5IEhETEMgcHJvdG9jb2wgZHJpdmVycyxcbiAyMjc6XHRcdCAqIGluY2x1ZGluZyBldGhlcl9zZXR1cCgpIGNhbGxlZCBmcm9tIGhkbGNfcmF3X2V0aC5jLlxuIDIyODpcdFx0ICovXG4gMjI5Olx0XHRkZXYtXHUwMDNlZmxhZ3NcdFx0ID0gSUZGX1BPSU5UT1BPSU5UIHwgSUZGX05PQVJQO1xuIDIzMDpcdFx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdFx0ID0gSUZGX1dBTl9IRExDO1xuIDIzMTpcdFx0ZGV2LVx1MDAzZW10dVx0XHQgPSBIRExDX01BWF9NVFU7XG4gMjMyOlx0XHRkZXYtXHUwMDNlbWluX210dVx0XHQgPSA2ODtcbiAyMzM6XHRcdGRldi1cdTAwM2VtYXhfbXR1XHRcdCA9IEhETENfTUFYX01UVTtcbiAyMzQ6XHRcdGRldi1cdTAwM2V0eXBlXHRcdCA9IEFSUEhSRF9SQVdIRExDO1xuIDIzNTpcdFx0ZGV2LVx1MDAzZWhhcmRfaGVhZGVyX2xlblx0ID0gMDtcbiAyMzY6XHRcdGRldi1cdTAwM2VuZWVkZWRfaGVhZHJvb21cdCA9IDA7XG4gMjM3Olx0XHRkZXYtXHUwMDNlYWRkcl9sZW5cdFx0ID0gMDtcbiAyMzg6XHRcdGRldi1cdTAwM2VoZWFkZXJfb3BzXHRcdCA9IFx1MDAyNmhkbGNfbnVsbF9vcHM7XG4gMjM5Olx0fVxuIDI0MDpcdFxuIDI0MTpcdHN0YXRpYyB2b2lkIGhkbGNfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAyNDI6XHR7XG4gMjQzOlx0XHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gMjQ0Olx0XG4gMjQ1Olx0XHRoZGxjX3NldHVwX2RldihkZXYpO1xuIDI0NjpcdFx0aGRsYy1cdTAwM2VjYXJyaWVyID0gMTtcbiAyNDc6XHRcdGhkbGMtXHUwMDNlb3BlbiA9IDA7XG4gMjQ4Olx0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZoZGxjLVx1MDAzZXN0YXRlX2xvY2spO1xuIDI0OTpcdH1cbiAyNTA6XHRcbiAyNTE6XHRzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxuIDI1MjpcdHtcbiAyNTM6XHRcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gMjU0Olx0XG4gMjU1Olx0XHRkZXYgPSBhbGxvY19uZXRkZXYoc2l6ZW9mKHN0cnVjdCBoZGxjX2RldmljZSksIFwmIzM0O2hkbGMlZFwmIzM0OyxcbiAyNTY6XHRcdFx0XHQgICBORVRfTkFNRV9VTktOT1dOLCBoZGxjX3NldHVwKTtcbiAyNTc6XHRcdGlmIChkZXYpXG4gMjU4Olx0XHRcdGRldl90b19oZGxjKGRldiktXHUwMDNlcHJpdiA9IHByaXY7XG4gMjU5Olx0XHRyZXR1cm4gZGV2O1xuIDI2MDpcdH1cbiAyNjE6XHRFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xuIDI2MjpcdFxuIDI2MzpcdHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIDI2NDpcdHtcbiAyNjU6XHRcdHJ0bmxfbG9jaygpO1xuIDI2NjpcdFx0ZGV2X2Nsb3NlKGRldik7XG4gMjY3Olx0XHRkZXRhY2hfaGRsY19wcm90b2NvbChkZXYpO1xuIDI2ODpcdFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcbiAyNjk6XHRcdHJ0bmxfdW5sb2NrKCk7XG4gMjcwOlx0fVxuIDI3MTpcdEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XG4gMjcyOlx0XG4gMjczOlx0aW50IGF0dGFjaF9oZGxjX3Byb3RvY29sKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byxcbiAyNzQ6XHRcdFx0XHQgc2l6ZV90IHNpemUpXG4gMjc1Olx0e1xuIDI3NjpcdFx0aW50IGVycjtcbiAyNzc6XHRcbiAyNzg6XHRcdGVyciA9IGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XG4gMjc5Olx0XHRpZiAoZXJyKVxuIDI4MDpcdFx0XHRyZXR1cm4gZXJyO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDMzOQoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIEhETEMgZGV2aWNlIHNpdHVhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBoZXJlLCBzbyBJJiMzOTttIHRoaW5raW5nLCAmIzM0O0hvdyBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICptYWRlKj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCBvciBpcyB0aGVyZSBzb21lIHNvZnR3YXJlIG1hZ2ljIGhhcHBlbmluZz8gQXJlIHRoZXJlIHZpcnR1YWwgZGV2aWNlcyB0aGF0IGVtdWxhdGUgSERMQywgY3JlYXRpbmcgYSBgbmV0X2RldmljZWAgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JlYXRpb24gcHJvY2Vzcy4KCk9rYXksIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSYjMzk7bSBnb2luZyB0byBleGhhdXN0aXZlbHkgc2NhbiB0aGUga2VybmVsIHNvdXJjZS4gSSYjMzk7bGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgSUZGX1dBTl9IRExDYCwgYGFsbG9jX2hkbGNkZXZgLCBhbmQgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYWxsIHRoZSBjb2RlIHBhdGhzIHRoYXQgZGVhbCB3aXRoIEhETEMgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIG1hbmFnZW1lbnQuIEkmIzM5O2xsIHN0YXJ0IHdpdGggYSBzdHJhaWdodGZvcndhcmQgZ3JlcCBmb3IgYElGRl9XQU5fSERMQ2AgdG8gc2VlIHdoZXJlIHRoZSBpbnRlcmZhY2UgZmxhZ3MgYXJlIGJlaW5nIHVzZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIG5hcnJvdyB0aGUgZm9jdXMuIFRoaXMgd2lsbCBleHBvc2UgdGhlIGtleSBhcmVhcyB0aGF0IGRldGVybWluZSB0aGUgY3JlYXRpb24gYW5kIHJlZ2lzdHJhdGlvbiBvZiB0aGVzZSBkZXZpY2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtJRkZfV0FOX0hETEMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2hkbGMuYz00NT1zdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy01MC1cdC8qIEZpcnN0IG1ha2Ugc3VyZSBcJiMzNDtkZXZcJiMzNDsgaXMgYW4gSERMQyBkZXZpY2UgKi9cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6NTE6XHRpZiAoIShkZXYtXHUwMDNlcHJpdl9mbGFncyBcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy01Mi1cdFx0a2ZyZWVfc2tiKHNrYik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYz05ND1zdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNC1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MTA1Olx0aWYgKCEoZGV2LVx1MDAzZXByaXZfZmxhZ3MgXHUwMDI2IElGRl9XQU5fSERMQykpXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNi1cdFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBub3QgYW4gSERMQyBkZXZpY2UgKi9cbi0tXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTIyND1zdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjI5LVx0ZGV2LVx1MDAzZWZsYWdzXHRcdCA9IElGRl9QT0lOVE9QT0lOVCB8IElGRl9OT0FSUDtcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjMwOlx0ZGV2LVx1MDAzZXByaXZfZmxhZ3NcdFx0ID0gSUZGX1dBTl9IRExDO1xuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yMzEtXHRkZXYtXHUwMDNlbXR1XHRcdCA9IEhETENfTUFYX01UVTtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE0NTU9c3RydWN0IG5ldF9kZXZpY2Vfb3BzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzEtICogQElGRl9JU0FUQVA6IElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE3MzI6ICogQElGRl9XQU5fSERMQzogV0FOIEhETEMgZGV2aWNlXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzMtICogQElGRl9YTUlUX0RTVF9SRUxFQVNFOiBkZXZfaGFyZF9zdGFydF94bWl0KCkgaXMgYWxsb3dlZCB0b1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MTc2NT1lbnVtIG5ldGRldl9wcml2X2ZsYWdzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NjktXHRJRkZfSVNBVEFQXHRcdFx0PSAxXHUwMDNjXHUwMDNjMyxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg6MTc3MDpcdElGRl9XQU5fSERMQ1x0XHRcdD0gMVx1MDAzY1x1MDAzYzQsXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NzEtXHRJRkZfWE1JVF9EU1RfUkVMRUFTRVx0XHQ9IDFcdTAwM2NcdTAwM2M1LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTMxOQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDM5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEhETEMgRHJpdmVyIExhbmRzY2FwZSoqCgpPa2F5LCBzbyBgYWxsb2NfaGRsY2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIGEgbWl4IG9mIGRyaXZlcnM6IElTQSBjYXJkcyBsaWtlIGBjMTAxLmNgIGFuZCBgbjIuY2AsIHNldmVyYWwgUENJIGRyaXZlcnMgZm9yIEZhclN5bmMsIEN5Y2xhZGVzLCBHb3JhbW8sIGFuZCB3YW5YTCBjYXJkcywgYW5kIE9GL3BsYXRmb3JtIGRyaXZlcnMgZm9yIEZyZWVzY2FsZSBhbmQgSVhQNHh4IFNvQ3MuCgpOb3csIGEgY3J1Y2lhbCBxdWVzdGlvbiBhcmlzZXM6IGhvdyBwcmV2YWxlbnQgYXJlIHRoZXNlIGRldmljZSB0eXBlcyBpbiBtb2Rlcm4gdmlydHVhbGl6YXRpb24/IE5vbmUgb2YgdGhlc2UgYXBwZWFyIHRvIGJlIGVtdWxhdGVkIGluIFFFTVUgb3Igc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXBzLiBUaGF0JiMzOTtzIGEga2V5IG9ic2VydmF0aW9uLiBMZXQgbWUgcGF1c2UgYW5kIHRoaW5rLi4uIGFyZSB0aGVyZSBhbnkgVVNCIEhETEMgZHJpdmVycz8gTm8uIFdoYXQgYWJvdXQgdmlydHVhbCBuZXR3b3JrIGRldmljZXMgbGlrZSB0dW4vdGFwIG9yIHJ0bmwgbGlua3M/IE5vbmUgYXJlIHVzaW5nIEhETEMgb3IgYGFsbG9jX2hkbGNkZXZgLgoKSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQmIzM5O3MgZGVsdmUgZGVlcGVyIGludG8gYGRyaXZlcnMvbmV0L3dhbi9gIGFuZCBgaGRsYy5jYCB0byBzZWUgaWYgSSBtaXNzZWQgYW55dGhpbmcuCgpBIHJlbGF0ZWQgdGhvdWdodCwgaXQmIzM5O3Mgd29ydGggcmUtZXhhbWluaW5nIGhvdyBgYzEwMS5jYCBvciBgbjIuY2AgYXJlIGluaXRpYWxpemVkLiBBcmUgdGhleSByZWx5aW5nIG9uIG1vZHVsZSBsb2FkIG9yIGBpbnNtb2RgIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQ/IElTQSBjYXJkcyBjYW4gYmUgYSBiaXQgdHJpY2t5LCByZWx5aW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBwcm9iZWQgdGhyb3VnaCBwYXJhbXMuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIHByb2JlIG1lY2hhbmlzbSBmb3IgYm90aCBgYzEwMS5jYCBhbmQgYG4yLmNgLiBJIHdpbGwgY2hlY2sgdGhvc2UgZmlsZXMgbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5NTpcdFx0Lm5kb19zaW9jd2FuZGV2ID0gYzEwMV9pb2N0bCxcbiAyOTY6XHRcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBjMTAxX3Npb2NkZXZwcml2YXRlLFxuIDI5NzpcdH07XG4gMjk4Olx0XG4gMjk5Olx0c3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSlcbiAzMDA6XHR7XG4gMzAxOlx0XHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2O1xuIDMwMjpcdFx0aGRsY19kZXZpY2UgKmhkbGM7XG4gMzAzOlx0XHRjYXJkX3QgKmNhcmQ7XG4gMzA0Olx0XHRpbnQgcmVzdWx0O1xuIDMwNTpcdFxuIDMwNjpcdFx0aWYgKGlycSBcdTAwM2MgMyB8fCBpcnEgXHUwMDNlIDE1IHx8IGlycSA9PSA2KSAvKiBGSVhNRSAqLyB7XG4gMzA3Olx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIElSUSB2YWx1ZVxcblwmIzM0Oyk7XG4gMzA4Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDMwOTpcdFx0fVxuIDMxMDpcdFxuIDMxMTpcdFx0aWYgKHdpbmJhc2UgXHUwMDNjIDB4QzAwMDAgfHwgd2luYmFzZSBcdTAwM2UgMHhERkZGRiB8fCAod2luYmFzZSBcdTAwMjYgMHgzRkZGKSAhPSAwKSB7XG4gMzEyOlx0XHRcdHByX2VycihcJiMzNDtpbnZhbGlkIFJBTSB2YWx1ZVxcblwmIzM0Oyk7XG4gMzEzOlx0XHRcdHJldHVybiAtRU5PREVWO1xuIDMxNDpcdFx0fVxuIDMxNTpcdFxuIDMxNjpcdFx0Y2FyZCA9IGt6YWxsb2Nfb2JqKGNhcmRfdCk7XG4gMzE3Olx0XHRpZiAoIWNhcmQpXG4gMzE4Olx0XHRcdHJldHVybiAtRU5PQlVGUztcbiAzMTk6XHRcbiAzMjA6XHRcdGNhcmQtXHUwMDNlZGV2ID0gYWxsb2NfaGRsY2RldihjYXJkKTtcbiAzMjE6XHRcdGlmICghY2FyZC1cdTAwM2VkZXYpIHtcbiAzMjI6XHRcdFx0cHJfZXJyKFwmIzM0O3VuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnlcXG5cJiMzNDspO1xuIDMyMzpcdFx0XHRrZnJlZShjYXJkKTtcbiAzMjQ6XHRcdFx0cmV0dXJuIC1FTk9CVUZTO1xuIDMyNTpcdFx0fVxuIDMyNjpcdFxuIDMyNzpcdFx0aWYgKHJlcXVlc3RfaXJxKGlycSwgc2NhX2ludHIsIDAsIGRldm5hbWUsIGNhcmQpKSB7XG4gMzI4Olx0XHRcdHByX2VycihcJiMzNDtjb3VsZCBub3QgYWxsb2NhdGUgSVJRXFxuXCYjMzQ7KTtcbiAzMjk6XHRcdFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XG4gMzMwOlx0XHRcdHJldHVybiAtRUJVU1k7XG4gMzMxOlx0XHR9XG4gMzMyOlx0XHRjYXJkLVx1MDAzZWlycSA9IGlycTtcbiAzMzM6XHRcbiAzMzQ6XHRcdGlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHdpbmJhc2UsIEMxMDFfTUFQUEVEX1JBTV9TSVpFLCBkZXZuYW1lKSkge1xuIDMzNTpcdFx0XHRwcl9lcnIoXCYjMzQ7Y291bGQgbm90IHJlcXVlc3QgUkFNIHdpbmRvd1xcblwmIzM0Oyk7XG4gMzM2Olx0XHRcdGMxMDFfZGVzdHJveV9jYXJkKGNhcmQpO1xuIDMzNzpcdFx0XHRyZXR1cm4gLUVCVVNZO1xuIDMzODpcdFx0fVxuIDMzOTpcdFx0Y2FyZC1cdTAwM2VwaHlfd2luYmFzZSA9IHdpbmJhc2U7XG4gMzQwOlx0XHRjYXJkLVx1MDAzZXdpbjBiYXNlID0gaW9yZW1hcCh3aW5iYXNlLCBDMTAxX01BUFBFRF9SQU1fU0laRSk7XG4gMzQxOlx0XHRpZiAoIWNhcmQtXHUwMDNld2luMGJhc2UpIHtcbiAzNDI6XHRcdFx0cHJfZXJyKFwmIzM0O2NvdWxkIG5vdCBtYXAgSS9PIGFkZHJlc3NcXG5cJiMzNDspO1xuIDM0MzpcdFx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcbiAzNDQ6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODcxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbjoKCioqRGVjb25zdHJ1Y3RpbmcgYGMxMDFfcnVuYCYjMzk7cyBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBjMTAxLmNgIGZpbGUgYW5kIHNwZWNpZmljYWxseSB0aGUgYGMxMDFfcnVuYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCBodW5jaCBpcyB0aGF0IGl0JiMzOTtzIGhhbmRsaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCYjMzk7cyBnb2luZyBvbiBoZXJlLiBUaGUga2V5IGFwcGVhcnMgdG8gYmUgdGhlIGBzY2FfaW5pdGAgY2FsbCB3aXRoaW4gYGMxMDFfcnVuYC4gSSBzdXNwZWN0IHRoaXMgaXMgd2hlcmUgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9uIGhhcHBlbnMsIHdyaXRpbmcgdG8gcmVnaXN0ZXJzIGFuZCB2ZXJpZnlpbmcgdGhlIFNDQSBjaGlwcy4gTm93LCBJIG5lZWQgdG8gem9vbSBpbi4gQmFzZWQgb24gdGhlIGNvbnRleHQsIEkgdGhpbmsgbGluZXMgMzQ1LTM4MCBvZiBgYzEwMV9ydW5gIGFyZSB3aGVyZSB0aGUgYWN0aW9uIGhhcHBlbnMuIExldCBtZSBnbyB0YWtlIGEgbG9vayB0aGVyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3dhbi9jMTAxLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM0NTpcdFx0fVxuIDM0NjpcdFxuIDM0NzpcdFx0Y2FyZC1cdTAwM2V0eF9yaW5nX2J1ZmZlcnMgPSBUWF9SSU5HX0JVRkZFUlM7XG4gMzQ4Olx0XHRjYXJkLVx1MDAzZXJ4X3JpbmdfYnVmZmVycyA9IFJYX1JJTkdfQlVGRkVSUztcbiAzNDk6XHRcdGNhcmQtXHUwMDNlYnVmZl9vZmZzZXQgPSBDMTAxX1dJTkRPV19TSVpFOyAvKiBCeXRlcyAxRDAwLTFGRkYgcmVzZXJ2ZWQgKi9cbiAzNTA6XHRcbiAzNTE6XHRcdHJlYWRiKGNhcmQtXHUwMDNld2luMGJhc2UgJiM0MzsgQzEwMV9QQUdFKTsgLyogUmVzZXRzIFNDQT8gKi9cbiAzNTI6XHRcdHVkZWxheSgxMDApO1xuIDM1MzpcdFx0d3JpdGViKDAsIGNhcmQtXHUwMDNld2luMGJhc2UgJiM0MzsgQzEwMV9QQUdFKTtcbiAzNTQ6XHRcdHdyaXRlYigwLCBjYXJkLVx1MDAzZXdpbjBiYXNlICYjNDM7IEMxMDFfRFRSKTsgLyogUG93ZXItdXAgZm9yIFJBTT8gKi9cbiAzNTU6XHRcbiAzNTY6XHRcdHNjYV9pbml0KGNhcmQsIDApO1xuIDM1NzpcdFxuIDM1ODpcdFx0ZGV2ID0gcG9ydF90b19kZXYoY2FyZCk7XG4gMzU5Olx0XHRoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcbiAzNjA6XHRcbiAzNjE6XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNmNhcmQtXHUwMDNlbG9jayk7XG4gMzYyOlx0XHRkZXYtXHUwMDNlaXJxID0gaXJxO1xuIDM2MzpcdFx0ZGV2LVx1MDAzZW1lbV9zdGFydCA9IHdpbmJhc2U7XG4gMzY0Olx0XHRkZXYtXHUwMDNlbWVtX2VuZCA9IHdpbmJhc2UgJiM0MzsgQzEwMV9NQVBQRURfUkFNX1NJWkUgLSAxO1xuIDM2NTpcdFx0ZGV2LVx1MDAzZXR4X3F1ZXVlX2xlbiA9IDUwO1xuIDM2NjpcdFx0ZGV2LVx1MDAzZW5ldGRldl9vcHMgPSBcdTAwMjZjMTAxX29wcztcbiAzNjc6XHRcdGhkbGMtXHUwMDNlYXR0YWNoID0gc2NhX2F0dGFjaDtcbiAzNjg6XHRcdGhkbGMtXHUwMDNleG1pdCA9IHNjYV94bWl0O1xuIDM2OTpcdFx0Y2FyZC1cdTAwM2VzZXR0aW5ncy5jbG9ja190eXBlID0gQ0xPQ0tfRVhUO1xuIDM3MDpcdFxuIDM3MTpcdFx0cmVzdWx0ID0gcmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbiAzNzI6XHRcdGlmIChyZXN1bHQpIHtcbiAzNzM6XHRcdFx0cHJfd2FybihcJiMzNDt1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXG5cJiMzNDspO1xuIDM3NDpcdFx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcbiAzNzU6XHRcdFx0cmV0dXJuIHJlc3VsdDtcbiAzNzY6XHRcdH1cbiAzNzc6XHRcbiAzNzg6XHRcdHNjYV9pbml0X3BvcnQoY2FyZCk7IC8qIFNldCB1cCBDMTAxIG1lbW9yeSAqL1xuIDM3OTpcdFx0c2V0X2NhcnJpZXIoY2FyZCk7XG4gMzgwOlx0XG4gMzgxOlx0XHRuZXRkZXZfaW5mbyhkZXYsIFwmIzM0O01veGEgQzEwMSBvbiBJUlEldSwgdXNpbmcgJXUgVFggJiM0MzsgJXUgUlggcGFja2V0cyByaW5nc1xcblwmIzM0OyxcbiAzODI6XHRcdFx0ICAgIGNhcmQtXHUwMDNlaXJxLCBjYXJkLVx1MDAzZXR4X3JpbmdfYnVmZmVycywgY2FyZC1cdTAwM2VyeF9yaW5nX2J1ZmZlcnMpO1xuIDM4MzpcdFxuIDM4NDpcdFx0Km5ld19jYXJkID0gY2FyZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4NTQKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxMzMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEhETEMgRHJpdmVyIFBhdGNoIGZvciBGdXp6aW5nIFN1aXRhYmlsaXR5KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBmc2xfdWNjX2hkbGMuY2AuIEZpcnN0LCBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZS4gU28sIEkgc2VlIHRoYXQgdGhlIHBhdGNoIG1vZGlmaWVzIGB1aGRsY19vcGVuYCwgYHVoZGxjX3N1c3BlbmRgLCBhbmQgYHVjY19oZGxjX3JlbW92ZWAuIFNwZWNpZmljYWxseSwgaW4gYHVoZGxjX29wZW5gLCBpdCBub3cgY2FsbHMgYGhkbGNfb3BlbmAgZWFybGllciBhbmQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBgdWhkbGNfc3VzcGVuZGAgaGFzIGEgbW92ZSBvZiBga21hbGxvY19vYmpgLCBhbmQgYHVjY19oZGxjX3JlbW92ZWAgbm93IGluY2x1ZGVzIGNhbGxzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBhbmQgYGZyZWVfbmV0ZGV2YC4KCk5vdywgbG9va2luZyBkZWVwZXIgYXQgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgaXQgaW5jbHVkZXMgYSBjYWxsIHRvIGBkZXZfY2xvc2VgIGJlZm9yZSBkZXRhY2hpbmcgdGhlIEhETEMgcHJvdG9jb2wgYW5kIHVucmVnaXN0ZXJpbmcgdGhlIG5ldCBkZXZpY2UuIENydWNpYWxseSwgSSBuZWVkIHRvIGtub3cgKndoZXJlKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmUgb3IgY2xlYW51cCBmdW5jdGlvbnMgb2YgKmV2ZXJ5KiBIRExDIGhhcmR3YXJlIGRyaXZlci4gVGhhdCYjMzk7cyBhIGtleSBvYnNlcnZhdGlvbi4gV2Ugc2VlIGl0IGluIGB1Y2NfaGRsY19yZW1vdmVgLCBgZnN0X3JlbW92ZV9vbmVgLCBgcW1jX2hkbGNfcmVtb3ZlYCwgYHdhbnhsX3BjaV9yZW1vdmVfb25lYCwgYW5kIG90aGVycywgYWxsIG9mIHdoaWNoIHN1Z2dlc3RzIHRoZXkgYXJlIGFsbCByZW1vdmUgZnVuY3Rpb25zLgoKVGhpcyBicmluZ3MgbWUgdG8gdGhlIG5lZ2F0aXZlIGNyaXRlcmlhIGZvciBmdXp6aW5nLiBXZSYjMzk7cmUgbG9va2luZyBmb3IgY29kZSB0aGF0JiMzOTtzICYjMzQ7c3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlJiMzNDsgb3IgJiMzNDt1bnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHMmIzM0Oy4gVGhlIHNlY29uZCBwb2ludCBpcyB0aGF0IHRoZSBjb2RlIGlzIHRlYXJkb3duL2NsZWFudXAgZnVuY3Rpb25zIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnLCBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KCkxldCYjMzk7cyBkaXNzZWN0IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLiBgZnNsX3VjY19oZGxjLmNgIGlzIGEgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgYSBwbGF0Zm9ybSBkcml2ZXIgaW50ZW5kZWQgZm9yIE5YUC9GcmVlc2NhbGUgUG93ZXJQQy9BUk0gU29DcyB3aXRoIFFVSUNDIEVuZ2luZSBoYXJkd2FyZS4gQ3JpdGljYWxseSwgb24gYW4gYW1kNjQgc3lzdGVtLCB0aGUgUVVJQ0NfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb25seSBidWlsZHMgd2l0aCBgQ09NUElMRV9URVNUYC4gRXZlbiB0aGVuLCBpdOKAmXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBPcGVuRmlybXdhcmUgb3IgRGV2aWNlVHJlZSwgYW5kIHJlcXVpcmVzIGFjdHVhbCBGcmVlc2NhbGUgU29DIGhhcmR3YXJlLiBJdCBjYW5ub3QgcHJvYmUgb3IgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGF0LiBUaGVyZWZvcmUsIGBmc2xfdWNjX2hkbGMuY2AgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBlbnZpcm9ubWVudC4KCk5vdywgY29uc2lkZXJpbmcgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBpdCYjMzk7cyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRldmljZSB1bnJlZ2lzdHJhdGlvbiwgZHJpdmVyIHRlYXJkb3duLCBvciBtb2R1bGUgdW5sb2FkLiBUaGUgY2FsbGluZyBmdW5jdGlvbnMgYXJlIGFsbCBhc3NvY2lhdGVkIHdpdGggdGhlIHJlbW92YWwgb2Ygc3BlY2lmaWMgaGFyZHdhcmUgY2FyZHMsIGJlIHRoZXkgcGxhdGZvcm0gZGV2aWNlcywgUENJLCBvciBJU0EgY2FyZHMuIFRoZXNlIGhhcmR3YXJlIGNvbXBvbmVudHMgLSB0aGUgRnJlZXNjYWxlIFFFIHBsYXRmb3JtLCBGYXJTeW5jIGNhcmRzLCBDeWNsYWRlcy1QQzMwMCBQQ0kgY2FyZHMsIEdvcmFtbyBQQ0kyMDBTeW4sIG9yIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGZvciBleGFtcGxlIC0gc2ltcGx5IGRvIG5vdCBleGlzdCBvciBhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnRzLiBUaGlzLCB0aGVyZWZvcmUsIHB1dHMgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIHNxdWFyZWx5IHdpdGhpbiB0aGUgY2F0ZWdvcnkgb2Ygc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGNvZGUuIFRoZSBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZHVyaW5nIHRlYXJkb3duLCB3aGljaCB3ZSBhcmUgbm90IGFibGUgdG8gdHJpZ2dlci4KClRvIGVuc3VyZSB0aGVyZSYjMzk7cyBubyBzdWJ0bGUgaW50ZXJhY3Rpb24gd2l0aCByZWFjaGFibGUgY29kZSwgSSBzaG91bGQgc2NhbiB0aGUgcmVzdCBvZiB0aGUga2VybmVsLCBzcGVjaWZpY2FsbHkgYWxsIGBkcml2ZXJzL25ldC93YW4vYCBhbmQgYmV5b25kLCBmb3IgYW55IG90aGVyIGNhbGxzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCwgYHVoZGxjX29wZW5gIG9yIGB1aGRsY19zdXNwZW5kYC4gSSB3aWxsIHBlcmZvcm0gb25lIGxhc3QgY2hlY2sgb2YgdGhlIGFsbCB0aGUgY2FsbGVycyB0byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAuIFRoZSBjdXJyZW50IGFzc2Vzc21lbnQsIGhvd2V2ZXIsIGlzIHRoYXQgdGhpcyBwYXRjaCBtb2RpZmllcyBjb2RlIHRoYXQgaXMgaW5oZXJlbnRseSB1bnJlYWNoYWJsZSBpbiBhIHN0YW5kYXJkIGZ1enppbmcgc2V0dXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VucmVnaXN0ZXJfaGRsY19kZXZpY2UmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvd2FuL2MxMDEuYz00MjA9c3RhdGljIHZvaWQgX19leGl0IGMxMDFfY2xlYW51cCh2b2lkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVx0XHRjYXJkID0gY2FyZC1cdTAwM2VuZXh0X2NhcmQ7XG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjQyODpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI5LVx0XHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjMwMC1cdFx0XHR3aGlsZSAoaS0tKVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMzAxOlx0XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDItXHRcdFx0cmV0dXJuIGVycjtcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jPTIzMjY9ZnN0X2FkZF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA2LVx0Zm9yIChpID0gMCA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbnBvcnRzIDsgaSYjNDM7JiM0MzspXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cdTAwM2Vwb3J0c1tpXS5kZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNTA4LWluaXRfY2FyZF9mYWlsOlxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTI1NDAtXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XHRcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cdFx0ZnJlZV9uZXRkZXYoZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM9NzgwPXN0YXRpYyB2b2lkIHFtY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6Nzg0Olx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShxbWNfaGRsYy1cdTAwM2VuZXRkZXYpO1xuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jLTc4NS1cdGZyZWVfbmV0ZGV2KHFtY19oZGxjLVx1MDAzZW5ldGRldik7XG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jPTEyNTQ9c3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4tLVxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTctXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTI1ODpcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cdTAwM2VuZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU5LVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM9MjYxPUVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI2Mi1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0yNjQte1xuLS1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjcxOkVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI3Mi1cbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jPTE1MjU9c3RhdGljIHZvaWQgaXhwNHh4X2hzc19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jOjE1Mjk6XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHBvcnQtXHUwMDNlbmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUzMC1cdGZyZWVfbmV0ZGV2KHBvcnQtXHUwMDNlbmV0ZGV2KTtcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYz0yODU9c3RhdGljIHZvaWQgbjJfZGVzdHJveV9jYXJkKGNhcmRfdCAqY2FyZClcbi0tXG5kcml2ZXJzL25ldC93YW4vbjIuYy0yOTItXG5kcml2ZXJzL25ldC93YW4vbjIuYzoyOTM6XHRcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVx0XHR9XG4tLVxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM9MjQ2PXN0YXRpYyB2b2lkIHBjMzAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cdFx0aWYgKGNhcmQtXHUwMDNlcG9ydHNbaV0uY2FyZClcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjI1MzpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cbi0tXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM9MjI3PXN0YXRpYyB2b2lkIHBjaTIwMF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcbi0tXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjMzLVx0XHRpZiAoY2FyZC1cdTAwM2Vwb3J0c1tpXS5jYXJkKVxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jOjIzNDpcdFx0XHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yMzUtXG4tLVxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM9NDg2PXN0YXRpYyB2b2lkIHdhbnhsX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIGNhcmQtXHUwMDNlbl9wb3J0czsgaSYjNDM7JiM0MzspIHtcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjQ5MjpcdFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVx1MDAzZXBvcnRzW2ldLmRldik7XG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy00OTMtXHRcdGZyZWVfbmV0ZGV2KGNhcmQtXHUwMDNlcG9ydHNbaV0uZGV2KTtcbi0tXG5pbmNsdWRlL2xpbnV4L2hkbGMuaD01Nz1pbnQgaGRsY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZfc2V0dGluZ3MgKmlmcyk7XG4tLVxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjAtI2RlZmluZSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpXHRyZWdpc3Rlcl9uZXRkZXYoZGV2KVxuaW5jbHVkZS9saW51eC9oZGxjLmg6NjE6dm9pZCB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuaW5jbHVkZS9saW51eC9oZGxjLmgtNjItXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzExIDAwOjEzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjkxCgkJCQkJCQlvdXRwdXQ6IDE4NgoJCQkJCQkJdGhvdWdodHM6IDI5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoaXMgUGF0Y2gqKgoKT2theSwgc28gbG9va2luZyBhdCB0aGlzIHBhdGNoLCBteSBpbml0aWFsIHRob3VnaHRzIGFyZSB0aGF0IGFsbCBjYWxscyB0byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgYXJlIGRlZmluaXRlbHkgcmVsYXRlZCB0byBwbGF0Zm9ybS1zcGVjaWZpYyBoYXJkd2FyZSByZW1vdmFsIGFuZCBjbGVhbnVwIHByb2NlZHVyZXMsIHRhcmdldGluZyBwaHlzaWNhbCBoYXJkd2FyZSB0aGF0IGlzbiYjMzk7dCBlbXVsYXRlZCBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGVuIHRoZXJlJiMzOTtzIHRoZSBgZnNsX3VjY19oZGxjLmNgIGZpbGU7IGl0JiMzOTtzIGV4Y2x1c2l2ZWx5IGZvciB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBoYXJkd2FyZSwgd2hpY2ggaXMgYSBQb3dlclBDL2VtYmVkZGVkIFNvQyBzcGVjaWZpYyBkZXZpY2UuIFNpbmNlIHRoZSBzeXN0ZW0gSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgYW1kNjQtYmFzZWQgYW5kIHVzZXMgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIHRoYXQgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuCgpMZXQmIzM5O3MgZG8gYSBxdWljayBkb3VibGUtY2hlY2sgdG8gY29uZmlybToKCiogICBgV29ydGhGdXp6aW5nYDogRmFsc2UuIE1ha2VzIHNlbnNlOyB0aGlzIGNvZGUgaXNuJiMzOTt0IHJlbGV2YW50IHRvIG15IHNldHVwLgoqICAgYFJlYXNvbmluZ2A6IFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgZHJpdmVyIChgZnNsX3VjY19oZGxjLmNgKSBhbmQgdGhlIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBoZWxwZXIgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGUgUVVJQ0MgRW5naW5lIGlzIHBsYXRmb3JtLXNwZWNpZmljIGFuZCBub3QgZm91bmQgaW4gbXkgeDg2L1FFTVUgZW52aXJvbm1lbnQuIFRoZSB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiByZW1vdmluZyBvciBjbGVhbmluZyB1cCBub24tZW11bGF0ZWQgcGh5c2ljYWwgV0FOL0hETEMgUENJL0lTQS9wbGF0Zm9ybSBkcml2ZXJzLiBTbywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG1ha2VzIHNlbnNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBFbXB0eS4gTm8gY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBuZWVkZWQgaGVyZS4KKiAgIGBGb2N1c1N5bWJvbHNgOiBFbXB0eS4gTm8gc3BlY2lmaWMgc3ltYm9scyB0byB0cmFjay4KClJpZ2h0LCBhbGwgY2xlYXIuIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIGFuZCBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMSAwMDoxMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMpIGFuZCB0aGUgZ2VuZXJpYyBIRExDIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgKGRyaXZlcnMvbmV0L3dhbi9oZGxjLmMpLiBUaGUgZnNsX3VjY19oZGxjIGRyaXZlciBpcyBzcGVjaWZpYyB0byBGcmVlc2NhbGUvTlhQIFNvQyBjb3Byb2Nlc3NvciBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhlIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgaGVscGVyIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIHJlbW92ZSBhbmQgbW9kdWxlIGV4aXQgcm91dGluZXMgZm9yIHBoeXNpY2FsIFdBTiBoYXJkd2FyZSBjb250cm9sbGVycyAoRmFyc3luYywgd2FuWEwsIFBDMzAwLCBldGMuKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTEgMDA6MTM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjM0Ljk1MjU0MjYzNVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjc0NzMzMzUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjM0Ljk1MjU0NzI0NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzODcwNDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYzdkMjMyNDAyMzlhNGVmOTIxYzVlMTNhZmE3OGQzZjQ5ZGYyMTRjN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIFNlcCAxMSAwMDoxMjozNCAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY1xcbkBAIC0zNCw4ICszNCw2IEBAXFxuICNkZWZpbmUgVERNX1BQUE9IVF9TTElDX01BWElOXFxuICNkZWZpbmUgUlhfQkRfRVJST1JTIChSX0NEX1MgfCBSX09WX1MgfCBSX0NSX1MgfCBSX0FCX1MgfCBSX05PX1MgfCBSX0xHX1MpXFxuIFxcbi1zdGF0aWMgaW50IHVoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbi1cXG4gc3RhdGljIHN0cnVjdCB1Y2NfdGRtX2luZm8gdXRkbV9wcmltYXJ5X2luZm8gPSB7XFxuIFxcdC51Zl9pbmZvID0ge1xcbiBcXHRcXHQudHNhID0gMCxcXG5AQCAtNzA1LDEyICs3MDMsMTggQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdGhkbGNfZGV2aWNlICpoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcXG4gXFx0c3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBoZGxjLVxcdTAwM2Vwcml2O1xcbiBcXHRzdHJ1Y3QgdWNjX3RkbSAqdXRkbSA9IHByaXYtXFx1MDAzZXV0ZG07XFxuLVxcdGludCByYyA9IDA7XFxuK1xcdGludCByYztcXG4gXFxuIFxcdGlmIChwcml2LVxcdTAwM2VoZGxjX2J1c3kgIT0gMSkge1xcbitcXHRcXHRyYyA9IGhkbGNfb3BlbihkZXYpO1xcbitcXHRcXHRpZiAocmMpXFxuK1xcdFxcdFxcdHJldHVybiByYztcXG4rXFxuIFxcdFxcdGlmIChyZXF1ZXN0X2lycShwcml2LVxcdTAwM2V1dF9pbmZvLVxcdTAwM2V1Zl9pbmZvLmlycSxcXG4tXFx0XFx0XFx0XFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFxcXCJoZGxjXFxcIiwgcHJpdikpXFxuK1xcdFxcdFxcdFxcdHVjY19oZGxjX2lycV9oYW5kbGVyLCAwLCBcXFwiaGRsY1xcXCIsIHByaXYpKSB7XFxuK1xcdFxcdFxcdGhkbGNfY2xvc2UoZGV2KTtcXG4gXFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdFxcdH1cXG4gXFxuIFxcdFxcdGNlY3Jfc3ViYmxvY2sgPSB1Y2NfZmFzdF9nZXRfcWVfY3Jfc3ViYmxvY2soXFxuIFxcdFxcdFxcdFxcdFxcdHByaXYtXFx1MDAzZXV0X2luZm8tXFx1MDAzZXVmX2luZm8udWNjX251bSk7XFxuQEAgLTcyOSwxMyArNzMzLDkgQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcdFxcdG5hcGlfZW5hYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG4gXFx0XFx0bmV0ZGV2X3Jlc2V0X3F1ZXVlKGRldik7XFxuIFxcdFxcdG5ldGlmX3N0YXJ0X3F1ZXVlKGRldik7XFxuLVxcbi1cXHRcXHRyYyA9IGhkbGNfb3BlbihkZXYpO1xcbi1cXHRcXHRpZiAocmMpXFxuLVxcdFxcdFxcdHVoZGxjX2Nsb3NlKGRldik7XFxuIFxcdH1cXG4gXFxuLVxcdHJldHVybiByYztcXG4rXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIHVoZGxjX21lbWNsZWFuKHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2KVxcbkBAIC04ODgsNiArODg4LDEwIEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuIFxcdGlmICghbmV0aWZfcnVubmluZyhwcml2LVxcdTAwM2VuZGV2KSlcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbitcXHRwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cXHUwMDNldWNjX3ByYW1fYmFrKTtcXG4rXFx0aWYgKCFwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWspXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4gXFx0bmV0aWZfZGV2aWNlX2RldGFjaChwcml2LVxcdTAwM2VuZGV2KTtcXG4gXFx0bmFwaV9kaXNhYmxlKFxcdTAwMjZwcml2LVxcdTAwM2VuYXBpKTtcXG4gXFxuQEAgLTg5NywxMCArOTAxLDYgQEAgc3RhdGljIGludCB1aGRsY19zdXNwZW5kKHN0cnVjdCBkZXZpY2UgKmRldilcXG4gXFx0cHJpdi1cXHUwMDNlZ3VtciA9IGlvcmVhZDMyYmUoXFx1MDAyNnVmX3JlZ3MtXFx1MDAzZWd1bXIpO1xcbiBcXHRwcml2LVxcdTAwM2VndWVtciA9IGlvcmVhZDgoXFx1MDAyNnVmX3JlZ3MtXFx1MDAzZWd1ZW1yKTtcXG4gXFxuLVxcdHByaXYtXFx1MDAzZXVjY19wcmFtX2JhayA9IGttYWxsb2Nfb2JqKCpwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWspO1xcbi1cXHRpZiAoIXByaXYtXFx1MDAzZXVjY19wcmFtX2JhaylcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcbiBcXHQvKiBiYWNrdXAgSERMQyBwYXJhbWV0ZXIgKi9cXG4gXFx0bWVtY3B5X2Zyb21pbyhwcml2LVxcdTAwM2V1Y2NfcHJhbV9iYWssIHByaXYtXFx1MDAzZXVjY19wcmFtLFxcbiBcXHRcXHQgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7XFxuQEAgLTEyNTUsNiArMTI1NSw4IEBAIHN0YXRpYyB2b2lkIHVjY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCB1Y2NfaGRsY19wcml2YXRlICpwcml2ID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZwZGV2LVxcdTAwM2VkZXYpO1xcbiBcXG4rXFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVxcdTAwM2VuZGV2KTtcXG4rXFxuIFxcdHVoZGxjX21lbWNsZWFuKHByaXYpO1xcbiBcXG4gXFx0aWYgKHByaXYtXFx1MDAzZXV0ZG0gXFx1MDAyNlxcdTAwMjYgcHJpdi1cXHUwMDNldXRkbS1cXHUwMDNlc2lfcmVncykge1xcbkBAIC0xMjY2LDYgKzEyNjgsNyBAQCBzdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4gXFx0XFx0aW91bm1hcChwcml2LVxcdTAwM2V1dGRtLVxcdTAwM2VzaXJhbSk7XFxuIFxcdFxcdHByaXYtXFx1MDAzZXV0ZG0tXFx1MDAzZXNpcmFtID0gTlVMTDtcXG4gXFx0fVxcbitcXHRmcmVlX25ldGRldihwcml2LVxcdTAwM2VuZGV2KTtcXG4gXFx0a2ZyZWUocHJpdik7XFxuIFxcbiBcXHRkZXZfaW5mbyhcXHUwMDI2cGRldi1cXHUwMDNlZGV2LCBcXFwiVUNDIGJhc2VkIGhkbGMgbW9kdWxlIHJlbW92ZWRcXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xcbmluZGV4IGNiZWQxMGIxZDg2MmUuLmEzOGY5MGQzMDA2ZWQgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcXG5AQCAtMjYzLDYgKzI2Myw3IEBAIEVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XFxuIHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHJ0bmxfbG9jaygpO1xcbitcXHRkZXZfY2xvc2UoZGV2KTtcXG4gXFx0ZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtcXG4gXFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2UoZGV2KTtcXG4gXFx0cnRubF91bmxvY2soKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6MzUuNDA3MDY0MjY4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NzgyMDE5Njg2OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgY2hhbmdlcyBtb2RpZnkgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBwbGF0Zm9ybSBkcml2ZXIgKGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYykgYW5kIHRoZSBnZW5lcmljIEhETEMgdW5yZWdpc3RyYXRpb24gZnVuY3Rpb24gdW5yZWdpc3Rlcl9oZGxjX2RldmljZSAoZHJpdmVycy9uZXQvd2FuL2hkbGMuYykuIFRoZSBmc2xfdWNjX2hkbGMgZHJpdmVyIGlzIHNwZWNpZmljIHRvIEZyZWVzY2FsZS9OWFAgU29DIGNvcHJvY2Vzc29yIGhhcmR3YXJlIGFuZCBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIG9uIGFtZDY0LiBUaGUgdW5yZWdpc3Rlcl9oZGxjX2RldmljZSBoZWxwZXIgaXMgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkcml2ZXIgcmVtb3ZlIGFuZCBtb2R1bGUgZXhpdCByb3V0aW5lcyBmb3IgcGh5c2ljYWwgV0FOIGhhcmR3YXJlIGNvbnRyb2xsZXJzIChGYXJzeW5jLCB3YW5YTCwgUEMzMDAsIGV0Yy4pIHRoYXQgYXJlIG5vdCBlbXVsYXRlZCBpbiBRRU1VLiBDb25zZXF1ZW50bHksIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYzdkMjMyNDAyMzlhNGVmOTIxYzVlMTNhZmE3OGQzZjQ5ZGYyMTRjN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgU2VwIDExIDAwOjEyOjM0IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG5pbmRleCA4MDlmMjFmYjkzZjU2Li4zNzExNTBlZmMxYTY1IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jXG4rKysgYi9kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmNcbkBAIC0zNCw4ICszNCw2IEBAXG4gI2RlZmluZSBURE1fUFBQT0hUX1NMSUNfTUFYSU5cbiAjZGVmaW5lIFJYX0JEX0VSUk9SUyAoUl9DRF9TIHwgUl9PVl9TIHwgUl9DUl9TIHwgUl9BQl9TIHwgUl9OT19TIHwgUl9MR19TKVxuIFxuLXN0YXRpYyBpbnQgdWhkbGNfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4tXG4gc3RhdGljIHN0cnVjdCB1Y2NfdGRtX2luZm8gdXRkbV9wcmltYXJ5X2luZm8gPSB7XG4gXHQudWZfaW5mbyA9IHtcbiBcdFx0LnRzYSA9IDAsXG5AQCAtNzA1LDEyICs3MDMsMTggQEAgc3RhdGljIGludCB1aGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XG4gXHRzdHJ1Y3QgdWNjX2hkbGNfcHJpdmF0ZSAqcHJpdiA9IGhkbGMtXHUwMDNlcHJpdjtcbiBcdHN0cnVjdCB1Y2NfdGRtICp1dGRtID0gcHJpdi1cdTAwM2V1dGRtO1xuLVx0aW50IHJjID0gMDtcbitcdGludCByYztcbiBcbiBcdGlmIChwcml2LVx1MDAzZWhkbGNfYnVzeSAhPSAxKSB7XG4rXHRcdHJjID0gaGRsY19vcGVuKGRldik7XG4rXHRcdGlmIChyYylcbitcdFx0XHRyZXR1cm4gcmM7XG4rXG4gXHRcdGlmIChyZXF1ZXN0X2lycShwcml2LVx1MDAzZXV0X2luZm8tXHUwMDNldWZfaW5mby5pcnEsXG4tXHRcdFx0XHR1Y2NfaGRsY19pcnFfaGFuZGxlciwgMCwgXCJoZGxjXCIsIHByaXYpKVxuK1x0XHRcdFx0dWNjX2hkbGNfaXJxX2hhbmRsZXIsIDAsIFwiaGRsY1wiLCBwcml2KSkge1xuK1x0XHRcdGhkbGNfY2xvc2UoZGV2KTtcbiBcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbitcdFx0fVxuIFxuIFx0XHRjZWNyX3N1YmJsb2NrID0gdWNjX2Zhc3RfZ2V0X3FlX2NyX3N1YmJsb2NrKFxuIFx0XHRcdFx0XHRwcml2LVx1MDAzZXV0X2luZm8tXHUwMDNldWZfaW5mby51Y2NfbnVtKTtcbkBAIC03MjksMTMgKzczMyw5IEBAIHN0YXRpYyBpbnQgdWhkbGNfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0XHRuYXBpX2VuYWJsZShcdTAwMjZwcml2LVx1MDAzZW5hcGkpO1xuIFx0XHRuZXRkZXZfcmVzZXRfcXVldWUoZGV2KTtcbiBcdFx0bmV0aWZfc3RhcnRfcXVldWUoZGV2KTtcbi1cbi1cdFx0cmMgPSBoZGxjX29wZW4oZGV2KTtcbi1cdFx0aWYgKHJjKVxuLVx0XHRcdHVoZGxjX2Nsb3NlKGRldik7XG4gXHR9XG4gXG4tXHRyZXR1cm4gcmM7XG4rXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgdWhkbGNfbWVtY2xlYW4oc3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYpXG5AQCAtODg4LDYgKzg4OCwxMCBAQCBzdGF0aWMgaW50IHVoZGxjX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KVxuIFx0aWYgKCFuZXRpZl9ydW5uaW5nKHByaXYtXHUwMDNlbmRldikpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0cHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWsgPSBrbWFsbG9jX29iaigqcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspO1xuK1x0aWYgKCFwcml2LVx1MDAzZXVjY19wcmFtX2JhaylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4gXHRuZXRpZl9kZXZpY2VfZGV0YWNoKHByaXYtXHUwMDNlbmRldik7XG4gXHRuYXBpX2Rpc2FibGUoXHUwMDI2cHJpdi1cdTAwM2VuYXBpKTtcbiBcbkBAIC04OTcsMTAgKzkwMSw2IEBAIHN0YXRpYyBpbnQgdWhkbGNfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpXG4gXHRwcml2LVx1MDAzZWd1bXIgPSBpb3JlYWQzMmJlKFx1MDAyNnVmX3JlZ3MtXHUwMDNlZ3Vtcik7XG4gXHRwcml2LVx1MDAzZWd1ZW1yID0gaW9yZWFkOChcdTAwMjZ1Zl9yZWdzLVx1MDAzZWd1ZW1yKTtcbiBcbi1cdHByaXYtXHUwMDNldWNjX3ByYW1fYmFrID0ga21hbGxvY19vYmooKnByaXYtXHUwMDNldWNjX3ByYW1fYmFrKTtcbi1cdGlmICghcHJpdi1cdTAwM2V1Y2NfcHJhbV9iYWspXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuLVxuIFx0LyogYmFja3VwIEhETEMgcGFyYW1ldGVyICovXG4gXHRtZW1jcHlfZnJvbWlvKHByaXYtXHUwMDNldWNjX3ByYW1fYmFrLCBwcml2LVx1MDAzZXVjY19wcmFtLFxuIFx0XHQgICAgICBzaXplb2Yoc3RydWN0IHVjY19oZGxjX3BhcmFtKSk7XG5AQCAtMTI1NSw2ICsxMjU1LDggQEAgc3RhdGljIHZvaWQgdWNjX2hkbGNfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXG4ge1xuIFx0c3RydWN0IHVjY19oZGxjX3ByaXZhdGUgKnByaXYgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2cGRldi1cdTAwM2VkZXYpO1xuIFxuK1x0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwcml2LVx1MDAzZW5kZXYpO1xuK1xuIFx0dWhkbGNfbWVtY2xlYW4ocHJpdik7XG4gXG4gXHRpZiAocHJpdi1cdTAwM2V1dGRtIFx1MDAyNlx1MDAyNiBwcml2LVx1MDAzZXV0ZG0tXHUwMDNlc2lfcmVncykge1xuQEAgLTEyNjYsNiArMTI2OCw3IEBAIHN0YXRpYyB2b2lkIHVjY19oZGxjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxuIFx0XHRpb3VubWFwKHByaXYtXHUwMDNldXRkbS1cdTAwM2VzaXJhbSk7XG4gXHRcdHByaXYtXHUwMDNldXRkbS1cdTAwM2VzaXJhbSA9IE5VTEw7XG4gXHR9XG4rXHRmcmVlX25ldGRldihwcml2LVx1MDAzZW5kZXYpO1xuIFx0a2ZyZWUocHJpdik7XG4gXG4gXHRkZXZfaW5mbyhcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJVQ0MgYmFzZWQgaGRsYyBtb2R1bGUgcmVtb3ZlZFxcblwiKTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC93YW4vaGRsYy5jIGIvZHJpdmVycy9uZXQvd2FuL2hkbGMuY1xuaW5kZXggY2JlZDEwYjFkODYyZS4uYTM4ZjkwZDMwMDZlZCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcbisrKyBiL2RyaXZlcnMvbmV0L3dhbi9oZGxjLmNcbkBAIC0yNjMsNiArMjYzLDcgQEAgRVhQT1JUX1NZTUJPTChhbGxvY19oZGxjZGV2KTtcbiB2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRydG5sX2xvY2soKTtcbitcdGRldl9jbG9zZShkZXYpO1xuIFx0ZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGRldik7XG4gXHRydG5sX3VubG9jaygpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6MzUuNDA3MDY1ODc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6ODEwNjUzNjM3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEZlYXNpYmlsaXR5IEFzc2Vzc21lbnQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgcGF0Y2ggYW5kIHNlZSBpZiBpdCdzIHdvcnRoIG91ciB0aW1lIHRvIGZ1enouIEZpcnN0LCB0aGUgdGFyZ2V0IGlzIGFtZDY0LCBzbyB0aGF0J3MgdGhlIGFyY2hpdGVjdHVyZSB3ZSdyZSBmb2N1c2VkIG9uLlxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gbG9vayBhdCB0aGUgY2hhbmdlZCBmaWxlcyBhbmQgZnVuY3Rpb25zLiBXZSd2ZSBnb3QgYGRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuY2Agd2hpY2ggbW9kaWZpZXMgZnVuY3Rpb25zIGxpa2UgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gVGhlbiwgd2UgaGF2ZSBgZHJpdmVycy9uZXQvd2FuL2hkbGMuY2AsIHNwZWNpZmljYWxseSwgdGhlIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBmdW5jdGlvbiwgd2hlcmUgYSBgZGV2X2Nsb3NlKGRldik7YCBjYWxsIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSBgZGV0YWNoX2hkbGNfcHJvdG9jb2woZGV2KTtgLlxuXG5Ob3csIEkgbmVlZCBhIGNsZWFyZXIgcGljdHVyZSBvZiB3aGF0IHRoZXNlIGZpbGVzIGFjdHVhbGx5ICpkbyouIGBmc2xfdWNjX2hkbGMuY2AgYXBwZWFycyB0byBiZSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUG93ZXJQQy9GcmVlc2NhbGUgU29DIHBsYXRmb3Jtcy4gYGhkbGMuY2Agc2VlbXMgdG8gYmUgdGhlIGdlbmVyaWMgSERMQyBsYXllciwgd2hpY2ggbWlnaHQgYmUgbW9yZSBpbnRlcmVzdGluZyB0byBmdXp6IGlmIGl0J3MgYnJvYWRseSB1c2VkLlxuXG5UaGUga2V5IHF1ZXN0aW9uIGlzOiBhcmUgZWl0aGVyIG9mIHRoZXNlIGRyaXZlcnMgcmVhY2hhYmxlIG9uIGFuIGFtZDY0IHN5c3RlbT8gSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgaW4gYGRyaXZlcnMvbmV0L3dhbi9gLCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBkcml2ZXJzIGFyZSBjb25maWd1cmVkIGFuZCBpZiB0aGVyZSdzIGFueSBjaGFuY2UgdGhleSdyZSBjb21waWxlZCBpbiBvciBtYWRlIGF2YWlsYWJsZSBvbiBhbWQ2NC4gSSdsbCBmaXJlIHVwIGBncmVwcGVyYCBvciBqdXN0IHJlYWQgdGhvc2UgS2NvbmZpZyBmaWxlcyB0byBmaWd1cmUgdGhpcyBvdXQuIElmIHRoZXkncmUgbm90LCB0aGVuIHdlIGNhbiBzYXZlIGEgbG90IG9mIHRpbWUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNzIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyODQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo0My41MTM2MDQwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAyMDQxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnLipIRExDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3dhblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93YW4vS2NvbmZpZz0yND1pZiBXQU5cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTI2LSMgR2VuZXJpYyBIRExDXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6Mjc6Y29uZmlnIEhETENcXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy0yOC1cXHR0cmlzdGF0ZSBcXFwiR2VuZXJpYyBIRExDIGxheWVyXFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDMtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NDQ6Y29uZmlnIEhETENfUkFXXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy01MS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzo1Mjpjb25maWcgSERMQ19SQVdfRVRIXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIEV0aGVybmV0IGRldmljZSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNjItXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NjM6Y29uZmlnIEhETENfQ0lTQ09cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiQ2lzY28gSERMQyBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctNzAtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6NzE6Y29uZmlnIEhETENfRlJcXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZy03Mi1cXHR0cmlzdGF0ZSBcXFwiRnJhbWUgUmVsYXkgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTc4LVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjc5OmNvbmZpZyBIRExDX1BQUFxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTgwLVxcdHRyaXN0YXRlIFxcXCJTeW5jaHJvbm91cyBQb2ludC10by1Qb2ludCBQcm90b2NvbCAoUFBQKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctODYtXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWc6ODc6Y29uZmlnIEhETENfWDI1XFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctODgtXFx0dHJpc3RhdGUgXFxcIlguMjUgcHJvdG9jb2wgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnPTE4MT1jb25maWcgRkFSU1lOQ1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctMTk5LVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnOjIwMDpjb25maWcgRlNMX1FNQ19IRExDXFxuZHJpdmVycy9uZXQvd2FuL0tjb25maWctMjAxLVxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMS1cXG5kcml2ZXJzL25ldC93YW4vS2NvbmZpZzoyMTI6Y29uZmlnIEZTTF9VQ0NfSERMQ1xcbmRyaXZlcnMvbmV0L3dhbi9LY29uZmlnLTIxMy1cXHR0cmlzdGF0ZSBcXFwiRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjQzLjU2MzgxMTg5OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI4NTA0MDY0NjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgc3BlY2lmaWMgYXJlYSBvZiB0aGUga2VybmVsOlxuXG4qKkRlbHZpbmcgaW50byBIRExDIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gaG93IEhETEMgc3VwcG9ydCBpcyBjb25maWd1cmVkIGluIHRoZSBrZXJuZWwsIHBhcnRpY3VsYXJseSBhcyBpdCByZWxhdGVzIHRvIEZyZWVzY2FsZSdzIFVDQyBoYXJkd2FyZS4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgZmlsZSwgc28gSSdtIGhlYWRpbmcgc3RyYWlnaHQgZm9yIGBkcml2ZXJzL25ldC93YW4vS2NvbmZpZ2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciB3aWRlLWFyZWEgbmV0d29yayBkcml2ZXJzLCBpbmNsdWRpbmcgSERMQywgc2hvdWxkIHJlc2lkZS4gSSdsbCBuZWVkIHRvIGZvY3VzIG9uIHRoZSBzZWN0aW9ucyBkZWFsaW5nIHdpdGggYEhETENgIGluIGdlbmVyYWwgYW5kIHRoZW4gem9vbSBpbiBvbiBhbnkgb3B0aW9ucyBzcGVjaWZpYyB0byBgRlNMX1VDQ19IRExDYC4gVGhlIGBGU0xfVUNDYCBpcywgb2YgY291cnNlLCB0aGUgRnJlZXNjYWxlIFVuaXZlcnNhbCBDb21tdW5pY2F0aW9ucyBDb250cm9sbGVyLCBhIHBpZWNlIG9mIGhhcmR3YXJlIEkndmUgd29ya2VkIHdpdGggZXh0ZW5zaXZlbHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBjb25kaXRpb25hbCBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCBleHBsYWluaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgZW5hYmxpbmcgdGhlc2UgZmVhdHVyZXMsIGFuZCBsaWtlbHkgc29tZSBkZWZhdWx0IHNldHRpbmdzLiBJJ20gYWxzbyBhbnRpY2lwYXRpbmcgdGhhdCB0aGUgYEtjb25maWdgIGZpbGUgd2lsbCByZWZlcmVuY2Ugb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLCBwZXJoYXBzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBhbmQgSSdsbCBuZWVkIHRvIHF1aWNrbHkgdW5kZXJzdGFuZCB0aG9zZSByZWxhdGlvbnNoaXBzIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgb2YgdGhlIGJ1aWxkIHByb2Nlc3MuIEVzc2VudGlhbGx5LCBJJ20gdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYWxsIHRoZSBjb25kaXRpb25zIHRoYXQgbXVzdCBiZSBtZXQgaW4gb3JkZXIgdG8gZW5hYmxlIEZyZWVzY2FsZSBIRExDIHN1cHBvcnQgYW5kIHdoYXQgaW1wYWN0IHRob3NlIGNob2ljZXMgd2lsbCBoYXZlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MzM2LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NDYuNDE0MjIwNDY2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzYyNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogOTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdCNcXG4gICAzOlxcdCMgd2FuIGRldmljZXMgY29uZmlndXJhdGlvblxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRtZW51Y29uZmlnIFdBTlxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiV2FuIGludGVyZmFjZXMgc3VwcG9ydFxcXCJcXG4gICA4OlxcdFxcdGhlbHBcXG4gICA5OlxcdFxcdCAgV2lkZSBBcmVhIE5ldHdvcmtzIChXQU5zKSwgc3VjaCBhcyBYLjI1LCBGcmFtZSBSZWxheSBhbmQgbGVhc2VkXFxuICAxMDpcXHRcXHQgIGxpbmVzLCBhcmUgdXNlZCB0byBpbnRlcmNvbm5lY3QgTG9jYWwgQXJlYSBOZXR3b3JrcyAoTEFOcykgb3ZlciB2YXN0XFxuICAxMTpcXHRcXHQgIGRpc3RhbmNlcyB3aXRoIGRhdGEgdHJhbnNmZXIgcmF0ZXMgc2lnbmlmaWNhbnRseSBoaWdoZXIgdGhhbiB0aG9zZVxcbiAgMTI6XFx0XFx0ICBhY2hpZXZhYmxlIHdpdGggY29tbW9ubHkgdXNlZCBhc3luY2hyb25vdXMgbW9kZW0gY29ubmVjdGlvbnMuXFxuICAxMzpcXHRcXG4gIDE0OlxcdFxcdCAgVXN1YWxseSwgYSBxdWl0ZSBleHBlbnNpdmUgZXh0ZXJuYWwgZGV2aWNlIGNhbGxlZCBhIGBXQU4gcm91dGVyJyBpc1xcbiAgMTU6XFx0XFx0ICBuZWVkZWQgdG8gY29ubmVjdCB0byBhIFdBTi4gQXMgYW4gYWx0ZXJuYXRpdmUsIGEgcmVsYXRpdmVseVxcbiAgMTY6XFx0XFx0ICBpbmV4cGVuc2l2ZSBXQU4gaW50ZXJmYWNlIGNhcmQgY2FuIGFsbG93IHlvdXIgTGludXggYm94IHRvIGRpcmVjdGx5XFxuICAxNzpcXHRcXHQgIGNvbm5lY3QgdG8gYSBXQU4uXFxuICAxODpcXHRcXG4gIDE5OlxcdFxcdCAgSWYgeW91IGhhdmUgb25lIG9mIHRob3NlIGNhcmRzIGFuZCB3aXNoIHRvIHVzZSBpdCB1bmRlciBMaW51eCxcXG4gIDIwOlxcdFxcdCAgc2F5IFkgaGVyZSBhbmQgYWxzbyB0byB0aGUgV0FOIGRyaXZlciBmb3IgeW91ciBjYXJkLlxcbiAgMjE6XFx0XFxuICAyMjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAyMzpcXHRcXG4gIDI0OlxcdGlmIFdBTlxcbiAgMjU6XFx0XFxuICAyNjpcXHQjIEdlbmVyaWMgSERMQ1xcbiAgMjc6XFx0Y29uZmlnIEhETENcXG4gIDI4OlxcdFxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIEhETEMgbGF5ZXJcXFwiXFxuICAyOTpcXHRcXHRoZWxwXFxuICAzMDpcXHRcXHQgIFNheSBZIHRvIHRoaXMgb3B0aW9uIGlmIHlvdXIgTGludXggYm94IGNvbnRhaW5zIGEgV0FOIChXaWRlIEFyZWFcXG4gIDMxOlxcdFxcdCAgTmV0d29yaykgY2FyZCBzdXBwb3J0ZWQgYnkgdGhpcyBkcml2ZXIgYW5kIHlvdSBhcmUgcGxhbm5pbmcgdG9cXG4gIDMyOlxcdFxcdCAgY29ubmVjdCB0aGUgYm94IHRvIGEgV0FOLlxcbiAgMzM6XFx0XFxuICAzNDpcXHRcXHQgIFlvdSB3aWxsIG5lZWQgc3VwcG9ydGluZyBzb2Z0d2FyZSBmcm9tXFxuICAzNTpcXHRcXHQgIFxcdTAwM2NodHRwOi8vd3d3Lmtlcm5lbC5vcmcvcHViL2xpbnV4L3V0aWxzL25ldC9oZGxjL1xcdTAwM2UuXFxuICAzNjpcXHRcXHQgIEdlbmVyaWMgSERMQyBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIHJhdyBIRExDLCBDaXNjbyBIRExDLCBGcmFtZVxcbiAgMzc6XFx0XFx0ICBSZWxheSwgc3luY2hyb25vdXMgUG9pbnQtdG8tUG9pbnQgUHJvdG9jb2wgKFBQUCkgYW5kIFguMjUuXFxuICAzODpcXHRcXG4gIDM5OlxcdFxcdCAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlXFxuICA0MDpcXHRcXHQgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZGxjLlxcbiAgNDE6XFx0XFxuICA0MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA0MzpcXHRcXG4gIDQ0OlxcdGNvbmZpZyBIRExDX1JBV1xcbiAgNDU6XFx0XFx0dHJpc3RhdGUgXFxcIlJhdyBIRExDIHN1cHBvcnRcXFwiXFxuICA0NjpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDQ3OlxcdFxcdGhlbHBcXG4gIDQ4OlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIHJhdyBIRExDIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA1MTpcXHRcXG4gIDUyOlxcdGNvbmZpZyBIRExDX1JBV19FVEhcXG4gIDUzOlxcdFxcdHRyaXN0YXRlIFxcXCJSYXcgSERMQyBFdGhlcm5ldCBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4gIDU0OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAgNTU6XFx0XFx0aGVscFxcbiAgNTY6XFx0XFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgcmF3IEhETEMgRXRoZXJuZXQgZGV2aWNlIGVtdWxhdGlvblxcbiAgNTc6XFx0XFx0ICBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDU4OlxcdFxcbiAgNTk6XFx0XFx0ICBZb3Ugd2lsbCBuZWVkIGl0IGZvciBFdGhlcm5ldCBvdmVyIEhETEMgYnJpZGdlcy5cXG4gIDYwOlxcdFxcbiAgNjE6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRjb25maWcgSERMQ19DSVNDT1xcbiAgNjQ6XFx0XFx0dHJpc3RhdGUgXFxcIkNpc2NvIEhETEMgc3VwcG9ydFxcXCJcXG4gIDY1OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAgNjY6XFx0XFx0aGVscFxcbiAgNjc6XFx0XFx0ICBHZW5lcmljIEhETEMgZHJpdmVyIHN1cHBvcnRpbmcgQ2lzY28gSERMQyBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNzA6XFx0XFxuICA3MTpcXHRjb25maWcgSERMQ19GUlxcbiAgNzI6XFx0XFx0dHJpc3RhdGUgXFxcIkZyYW1lIFJlbGF5IHN1cHBvcnRcXFwiXFxuICA3MzpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDc0OlxcdFxcdGhlbHBcXG4gIDc1OlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIEZyYW1lIFJlbGF5IG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxcbiAgNzY6XFx0XFxuICA3NzpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICA3ODpcXHRcXG4gIDc5OlxcdGNvbmZpZyBIRExDX1BQUFxcbiAgODA6XFx0XFx0dHJpc3RhdGUgXFxcIlN5bmNocm9ub3VzIFBvaW50LXRvLVBvaW50IFByb3RvY29sIChQUFApIHN1cHBvcnRcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEhETENcXG4gIDgyOlxcdFxcdGhlbHBcXG4gIDgzOlxcdFxcdCAgR2VuZXJpYyBIRExDIGRyaXZlciBzdXBwb3J0aW5nIFBQUCBvdmVyIFdBTiBjb25uZWN0aW9ucy5cXG4gIDg0OlxcdFxcbiAgODU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgODY6XFx0XFxuICA4NzpcXHRjb25maWcgSERMQ19YMjVcXG4gIDg4OlxcdFxcdHRyaXN0YXRlIFxcXCJYLjI1IHByb3RvY29sIHN1cHBvcnRcXFwiXFxuICA4OTpcXHRcXHRkZXBlbmRzIG9uIEhETEMgXFx1MDAyNlxcdTAwMjYgKExBUEI9bSBcXHUwMDI2XFx1MDAyNiBIRExDPW0gfHwgTEFQQj15KVxcbiAgOTA6XFx0XFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo0Ni40MTQyOTg5MjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzUzODg0NzI0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGEgUG90ZW50aWFsIE92ZXJzaWdodCoqXG5cbkhtbSwgSSdtIGp1c3QgcXVpY2tseSBjcm9zcy1jaGVja2luZyBzb21ldGhpbmcgaGVyZS4gSSB3YXMgdGhpbmtpbmcgYWJvdXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQsIHdoaWxlIEkgd2FzIGF0IGl0LCBpdCBvY2N1cnJlZCB0byBtZSB0aGF0IHdlIHNob3VsZCBkb3VibGUtY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gc2V0dGluZyBgRlNMX1VDQ19IRExDYCB3aXRoaW4gdGhlIGBkcml2ZXJzL25ldC93YW4vS2NvbmZpZ2AgZmlsZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB3ZSBoYXZlbid0IG1pc3NlZCBhIHBvdGVudGlhbCBkZXBlbmRlbmN5IG9yIGludGVyYWN0aW9uIHRoZXJlLCBnaXZlbiB0aGUgY29udGV4dCB3ZSBhcmUgZXhhbWluaW5nLiBObyBwb2ludCBpbiBtYWtpbmcgYXNzdW1wdGlvbnMsIGJldHRlciB0byBiZSB0aG9yb3VnaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjgxNiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NDguMTY4MTg2MTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDQ0NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMjAwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjAwOlxcdGNvbmZpZyBGU0xfUU1DX0hETENcXG4gMjAxOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUU1DIEhETEMgc3VwcG9ydFxcXCJcXG4gMjAyOlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAyMDM6XFx0XFx0ZGVwZW5kcyBvbiBDUE1fUU1DXFxuIDIwNDpcXHRcXHRoZWxwXFxuIDIwNTpcXHRcXHQgIEhETEMgc3VwcG9ydCB1c2luZyB0aGUgRnJlZXNjYWxlIFFVSUNDIE11bHRpY2hhbm5lbCBDb250cm9sbGVyIChRTUMpLlxcbiAyMDY6XFx0XFxuIDIwNzpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMDg6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnNsX3FtY19oZGxjLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuIDIxMTpcXHRcXG4gMjEyOlxcdGNvbmZpZyBGU0xfVUNDX0hETENcXG4gMjEzOlxcdFxcdHRyaXN0YXRlIFxcXCJGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgc3VwcG9ydFxcXCJcXG4gMjE0OlxcdFxcdGRlcGVuZHMgb24gSERMQ1xcbiAyMTU6XFx0XFx0ZGVwZW5kcyBvbiBRVUlDQ19FTkdJTkVcXG4gMjE2OlxcdFxcdGhlbHBcXG4gMjE3OlxcdFxcdCAgRHJpdmVyIGZvciBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgY29udHJvbGxlci4gVGhlIGRyaXZlclxcbiAyMTg6XFx0XFx0ICBzdXBwb3J0cyBIRExDIGluIE5NU0kgYW5kIFRETSBtb2RlLlxcbiAyMTk6XFx0XFxuIDIyMDpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMjE6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZnNsX3VjY19oZGxjLlxcbiAyMjI6XFx0XFxuIDIyMzpcXHRjb25maWcgU0xJQ19EUzI2NTIyXFxuIDIyNDpcXHRcXHR0cmlzdGF0ZSBcXFwiU2xpYyBNYXhpbSBkczI2NTIyIGNhcmQgc3VwcG9ydFxcXCJcXG4gMjI1OlxcdFxcdGRlcGVuZHMgb24gU1BJXFxuIDIyNjpcXHRcXHRkZXBlbmRzIG9uIEZTTF9TT0MgfHwgQVJDSF9NWEMgfHwgQVJDSF9MQVlFUlNDQVBFIHx8IENPTVBJTEVfVEVTVFxcbiAyMjc6XFx0XFx0c2VsZWN0IEJJVFJFVkVSU0VcXG4gMjI4OlxcdFxcdGhlbHBcXG4gMjI5OlxcdFxcdCAgVGhpcyBtb2R1bGUgaW5pdGlhbGl6ZXMgYW5kIGNvbmZpZ3VyZXMgdGhlIHNsaWMgbWF4aW0gY2FyZFxcbiAyMzA6XFx0XFx0ICBpbiBUMSBvciBFMSBtb2RlLlxcbiAyMzE6XFx0XFxuIDIzMjpcXHRcXHQgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZVxcbiAyMzM6XFx0XFx0ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2xpY19kczI2NTIyLlxcbiAyMzQ6XFx0XFxuIDIzNTpcXHRjb25maWcgSVhQNFhYX0hTU1xcbiAyMzY6XFx0XFx0dHJpc3RhdGUgXFxcIkludGVsIElYUDR4eCBIU1MgKHN5bmNocm9ub3VzIHNlcmlhbCBwb3J0KSBzdXBwb3J0XFxcIlxcbiAyMzc6XFx0XFx0ZGVwZW5kcyBvbiBIRExDIFxcdTAwMjZcXHUwMDI2IElYUDRYWF9OUEUgXFx1MDAyNlxcdTAwMjYgSVhQNFhYX1FNR1JcXG4gMjM4OlxcdFxcdGRlcGVuZHMgb24gQVJDSF9JWFA0WFggXFx1MDAyNlxcdTAwMjYgT0ZcXG4gMjM5OlxcdFxcdHNlbGVjdCBNRkRfU1lTQ09OXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjQ4LjE2ODI5MjI4WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAzNDQxNzgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkRlY2lwaGVyaW5nIHRoZSBEZXBlbmRlbmNpZXMgb2YgUVVJQ0NfRU5HSU5FKipcblxuQWxyaWdodCwgc28gSSdtIHRyeWluZyB0byB1bmRlcnN0YW5kIHRoZSB1bmRlcmx5aW5nIHJlcXVpcmVtZW50cyBmb3IgYFFVSUNDX0VOR0lORWAuIFRoZSBjcnVjaWFsIHF1ZXN0aW9uIHJpZ2h0IG5vdyBpcyB3aGV0aGVyIGl0IGhpbmdlcyBvbiBhIFBvd2VyUEMgKG9yIHNpbWlsYXIgYXJjaGl0ZWN0dXJlKSBlbnZpcm9ubWVudCwgb3IgaWYgaXQncyB0aWVkIHRvIGEgYENPTVBJTEVfVEVTVGAgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBrZXksIGFzIGRlcGVuZGVuY2llcyBsaWtlIHRoZXNlIGZ1bmRhbWVudGFsbHkgYWx0ZXIgaG93IEkgYXBwcm9hY2ggZGVwbG95bWVudCBhbmQgdGVzdGluZy4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBleGFjdCBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciBpbmNsdXNpb24gc3RyYXRlZ3kgYmVpbmcgdXNlZCBoZXJlLiBUaGUgbmV4dCBsb2dpY2FsIHN0ZXAsIHRoZXJlZm9yZSwgaXMgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGBRVUlDQ19FTkdJTkVgLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBpdHNlbGYgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY0MiwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NTAuMjAyNzEyMDUxWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzE3MDA4NTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBRVUlDQ19FTkdJTkVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWctNS1cXG5kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZzo2OmNvbmZpZyBRVUlDQ19FTkdJTkVcXG5kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZy03LVxcdGJvb2wgXFxcIlFVSUNDIEVuZ2luZSAoUUUpIGZyYW1ld29yayBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMjo1MS45MTk3MzA1MTRaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjI4MTU3Mzg4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQW5hbHl6aW5nIHRoZSBLY29uZmlnIGZvciB0aGUgRnJlZXNjYWxlIFFFIERyaXZlcioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBkaWcgaW50byB0aGlzIEZyZWVzY2FsZSBRRSBkcml2ZXIgY29uZmlndXJhdGlvbi4gTXkgZmlyc3Qgc3RlcCBpcyB0byBnZXQgbXkgYmVhcmluZ3MgYW5kIHVuZGVyc3RhbmQgaG93IGl0J3Mgc2V0IHVwLiBMZXQncyBzZWUgd2hhdCdzIGluIGBkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb25kaXRpb25hbCBsb2dpYywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBkZXBlbmRlbmNpZXMgdGhhdCBjb250cm9sIHdoZXRoZXIgdGhpcyBkcml2ZXIgZ2V0cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgZmVhdHVyZXMgYXJlIGVuYWJsZWQgYnkgZGVmYXVsdCwgd2hhdCBvcHRpb25zIGFyZSBhdmFpbGFibGUsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aGF0IGV4dGVybmFsIGRlcGVuZGVuY2llcyBvciByZXF1aXJlbWVudHMgdGhpcyBkcml2ZXIgaGFzLiBUaGlzIEtjb25maWcgZmlsZSB3aWxsIGVzc2VudGlhbGx5IGJlIG15IHJvYWRtYXAgZm9yIHVuZGVyc3RhbmRpbmcgYW5kIHBvdGVudGlhbGx5IHR3ZWFraW5nIHRoZSBRRSBkcml2ZXIncyBjb25maWd1cmF0aW9uLiBJJ20gbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgaG93IGl0IGludGVncmF0ZXMgaW50byB0aGUgYnJvYWRlciBzeXN0ZW0tb24tYS1jaGlwIChTb0MpIGFyY2hpdGVjdHVyZSwgdGhlIHNwZWNpZmljIGhhcmR3YXJlIGl0IHN1cHBvcnRzLCBhbmQgd2hhdCBvdGhlciBjb21wb25lbnRzIGl0IHJlbGllcyBvbi4gVGltZSB0byBnZXQgc3RhcnRlZCFcblxuXG4iLCJJbnB1dFRva2VucyI6NzkxMSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjU0LjIwMTMwNzExM1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NTYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbiAgIDI6XFx0I1xcbiAgIDM6XFx0IyBRRSBDb21tdW5pY2F0aW9uIG9wdGlvbnNcXG4gICA0OlxcdCNcXG4gICA1OlxcdFxcbiAgIDY6XFx0Y29uZmlnIFFVSUNDX0VOR0lORVxcbiAgIDc6XFx0XFx0Ym9vbCBcXFwiUVVJQ0MgRW5naW5lIChRRSkgZnJhbWV3b3JrIHN1cHBvcnRcXFwiXFxuICAgODpcXHRcXHRkZXBlbmRzIG9uIE9GIFxcdTAwMjZcXHUwMDI2IEhBU19JT01FTVxcbiAgIDk6XFx0XFx0ZGVwZW5kcyBvbiBQUEMgfHwgQVJNIHx8IEFSTTY0IHx8IENPTVBJTEVfVEVTVFxcbiAgMTA6XFx0XFx0c2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SXFxuICAxMTpcXHRcXHRzZWxlY3QgQ1JDMzJcXG4gIDEyOlxcdFxcdGhlbHBcXG4gIDEzOlxcdFxcdCAgVGhlIFFVSUNDIEVuZ2luZSAoUUUpIGlzIGEgbmV3IGdlbmVyYXRpb24gb2YgY29tbXVuaWNhdGlvbnNcXG4gIDE0OlxcdFxcdCAgY29wcm9jZXNzb3JzIG9uIEZyZWVzY2FsZSBlbWJlZGRlZCBDUFVzIChha2luIHRvIENQTSBpbiBvbGRlciBjaGlwcykuXFxuICAxNTpcXHRcXHQgIFNlbGVjdGluZyB0aGlzIG9wdGlvbiBtZWFucyB0aGF0IHlvdSB3aXNoIHRvIGJ1aWxkIGEga2VybmVsXFxuICAxNjpcXHRcXHQgIGZvciBhIG1hY2hpbmUgd2l0aCBhIFFFIGNvcHJvY2Vzc29yLlxcbiAgMTc6XFx0XFxuICAxODpcXHRjb25maWcgVUNDX1NMT1dcXG4gIDE5OlxcdFxcdGJvb2xcXG4gIDIwOlxcdFxcdGRlZmF1bHQgeSBpZiBTRVJJQUxfUUUgfHwgKENQTV9RTUMgXFx1MDAyNlxcdTAwMjYgUVVJQ0NfRU5HSU5FKVxcbiAgMjE6XFx0XFx0aGVscFxcbiAgMjI6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0Mgc2xvd1xcbiAgMjM6XFx0XFx0ICBwcm90b2NvbHM6IFVBUlQsIEJJU1lOQywgUU1DXFxuICAyNDpcXHRcXG4gIDI1OlxcdGNvbmZpZyBVQ0NfRkFTVFxcbiAgMjY6XFx0XFx0Ym9vbFxcbiAgMjc6XFx0XFx0ZGVmYXVsdCB5IGlmIFVDQ19HRVRIIHx8IFFFX1RETVxcbiAgMjg6XFx0XFx0aGVscFxcbiAgMjk6XFx0XFx0ICBUaGlzIG9wdGlvbiBwcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0byBVQ0MgZmFzdFxcbiAgMzA6XFx0XFx0ICBwcm90b2NvbHM6IEhETEMsIEV0aGVybmV0LCBBVE0sIHRyYW5zcGFyZW50XFxuICAzMTpcXHRcXG4gIDMyOlxcdGNvbmZpZyBVQ0NcXG4gIDMzOlxcdFxcdGJvb2xcXG4gIDM0OlxcdFxcdGRlZmF1bHQgeSBpZiBVQ0NfRkFTVCB8fCBVQ0NfU0xPVyB8fCAoQ1BNX1RTQSBcXHUwMDI2XFx1MDAyNiBRVUlDQ19FTkdJTkUpXFxuICAzNTpcXHRcXG4gIDM2OlxcdGNvbmZpZyBDUE1fVFNBXFxuICAzNzpcXHRcXHR0cmlzdGF0ZSBcXFwiQ1BNL1FFIFRTQSBzdXBwb3J0XFxcIlxcbiAgMzg6XFx0XFx0ZGVwZW5kcyBvbiBPRiBcXHUwMDI2XFx1MDAyNiBIQVNfSU9NRU1cXG4gIDM5OlxcdFxcdGRlcGVuZHMgb24gQ1BNMSB8fCBRVUlDQ19FTkdJTkUgfHwgXFxcXFxcbiAgNDA6XFx0XFx0XFx0ICAgKChDUE0gfHwgUVVJQ0NfRU5HSU5FKSBcXHUwMDI2XFx1MDAyNiBDT01QSUxFX1RFU1QpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEyOjU0LjIwMTM3NDQwM1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMzAxNTM0NDMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgSERMQyBEcml2ZXIqKlxuXG5Pa2F5LCBzbyBgZnNsX3VjY19oZGxjYCBpcyB0aGUgZHJpdmVyIGZvciB0aGUgSERMQyBjb250cm9sbGVyIG9uIEZyZWVzY2FsZSdzIFFVSUNDIEVuZ2luZS4gVGhhdCBtYWtlcyBzZW5zZSwgUVVJQ0MgRW5naW5lcyBhcmUgZW1iZWRkZWQgU29Dcy4gQnV0IGhvbGQgb24sIEkgbmVlZCB0byBiZSB0aG9yb3VnaC4gSSB3b25kZXIuLi4gd2hhdCdzIGdvaW5nIG9uIHdpdGggYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgPyBUaGF0IHNlZW1zIGxpa2UgaXQgY291bGQgYmUgYSBjcnVjaWFsIHBpZWNlIG9mIHRoZSBwdXp6bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZ2VuZXJhbCBIRExDIGZyYW1ld29yayBpbnRlcmFjdHMgd2l0aCB0aGlzIHNwZWNpZmljIFFVSUNDIEVuZ2luZSBkcml2ZXIuXG5cbkxldCdzIGRpdmUgaW50byBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgd2l0aGluIGBoZGxjLmNgLiBUaGF0IGZ1bmN0aW9uIGlzIGtleSBmb3IgY2xlYW5pbmcgdXAgcmVzb3VyY2VzLCBzbyBJIHNob3VsZCBzZWUgaG93IG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlICp1c2luZyogaXQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbHMsIGRldGVybWluZSBob3cgSERMQyBkZXZpY2VzIGFyZSBiZWluZyBtYW5hZ2VkLlxuXG5UaGUgcmVhbCBxdWVzdGlvbiwgdGhvdWdoLCBpcyB3aGV0aGVyIEkgY2FuIGV2ZW4gKmNyZWF0ZSogdGhlc2UgSERMQyBkZXZpY2VzIHdpdGhpbiBhIHN0YW5kYXJkIFFFTVUgZW52aXJvbm1lbnQgb24gYW4gYW1kNjQgbWFjaGluZS4gSSBuZWVkIHRvIGRldGVybWluZSBpZiB0aGlzIGlzIHNvbWV0aGluZyB0aGF0IEkgY2FuIHRlc3QsIG9yIGlmIGl0IHJlcXVpcmVzIHNwZWNpZmljIGhhcmR3YXJlLlxuXG5SaWdodCwgc28gdG8gZ2V0IGEgZ29vZCBoYW5kbGUgb24gdGhpcywgSSdsbCBuZWVkIHRvIHNlYXJjaCB0aGUgY29kZSBiYXNlIGZvciBjYWxsZXJzIG9mIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCwgYnV0IGFsc28gYGFsbG9jX2hkbGNkZXZgIGFuZCBgcmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgZGV2aWNlIGxpZmVjeWNsZSBhbmQgaG93IHRoaXMgUVVJQ0MgRW5naW5lIGRyaXZlciBpbnRlZ3JhdGVzLCBpZiBhdCBhbGwsIHdpdGggYW55IGdlbmVyYWwgSERMQyBmcmFtZXdvcmsuIEdvdHRhIHB1bGwgdXAgbXkgdG9vbHMgYW5kIHNlYXJjaCBmb3IgYWxsIHJlZmVyZW5jZXMgdG8gdGhvc2UgZnVuY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4Njk1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTI6NTcuNTAyOTExMDg1WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDUxMzg2NDQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIih1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlfHJlZ2lzdGVyX2hkbGNfZGV2aWNlfGFsbG9jX2hkbGNkZXYpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dhbi9jMTAxLmM9Mjk5PXN0YXRpYyBpbnQgX19pbml0IGMxMDFfcnVuKHVuc2lnbmVkIGxvbmcgaXJxLCB1bnNpZ25lZCBsb25nIHdpbmJhc2UpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTMxOS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjMyMDpcXHRjYXJkLVxcdTAwM2VkZXYgPSBhbGxvY19oZGxjZGV2KGNhcmQpO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzIxLVxcdGlmICghY2FyZC1cXHUwMDNlZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTM3MC1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jOjM3MTpcXHRyZXN1bHQgPSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtMzcyLVxcdGlmIChyZXN1bHQpIHtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmM9NDIwPXN0YXRpYyB2b2lkIF9fZXhpdCBjMTAxX2NsZWFudXAodm9pZClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmMtNDI3LVxcdFxcdGNhcmQgPSBjYXJkLVxcdTAwM2VuZXh0X2NhcmQ7XFxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYzo0Mjg6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShwb3J0X3RvX2RldihwdHIpKTtcXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTQyOS1cXHRcXHRjMTAxX2Rlc3Ryb3lfY2FyZChwdHIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMjg2PWZzdF9pbml0X2NhcmQoc3RydWN0IGZzdF9jYXJkX2luZm8gKmNhcmQpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIyOTUtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0czsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMjk2OlxcdFxcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGNhcmQtXFx1MDAzZXBvcnRzW2ldLmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMjk3LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDAtXFx0XFx0XFx0d2hpbGUgKGktLSlcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjIzMDE6XFx0XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjMwMi1cXHRcXHRcXHRyZXR1cm4gZXJyO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYz0yMzI2PWZzdF9hZGRfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yNDE0LVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjYXJkLVxcdTAwM2VucG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM6MjQxNTpcXHRcXHRzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbaV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjQxNi1cXHRcXHRoZGxjX2RldmljZSAqaGRsYztcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwNi1cXHRmb3IgKGkgPSAwIDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0cyA7IGkrKylcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwOC1pbml0X2NhcmRfZmFpbDpcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0MC1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTcwNj1zdGF0aWMgaW50IHFtY19oZGxjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzUxLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYzo3NTI6XFx0cW1jX2hkbGMtXFx1MDAzZW5ldGRldiA9IGFsbG9jX2hkbGNkZXYocW1jX2hkbGMpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03NTMtXFx0aWYgKCFxbWNfaGRsYy1cXHUwMDNlbmV0ZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmMtNzYzLVxcdHFtY19oZGxjLVxcdTAwM2VuZXRkZXYtXFx1MDAzZW5ldGRldl9vcHMgPSBcXHUwMDI2cW1jX2hkbGNfbmV0ZGV2X29wcztcXG5kcml2ZXJzL25ldC93YW4vZnNsX3FtY19oZGxjLmM6NzY0OlxcdHJldCA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03NjUtXFx0aWYgKHJldCkge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTc4MD1zdGF0aWMgdm9pZCBxbWNfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc4NDpcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODUtXFx0ZnJlZV9uZXRkZXYocW1jX2hkbGMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTEwNz1zdGF0aWMgaW50IHVjY19oZGxjX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIxNC1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM6MTIxNTpcXHRkZXYgPSBhbGxvY19oZGxjZGV2KHVoZGxjX3ByaXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjE2LVxcdGlmICghZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMtMTIyOS1cXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHQoZGV2LCBcXHUwMDI2dWhkbGNfcHJpdi1cXHUwMDNlbmFwaSwgdWNjX2hkbGNfcG9sbCwgMzIpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjMwOlxcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyMzEtXFx0XFx0cmV0ID0gLUVOT0JVRlM7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTI1ND1zdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjU4OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTktXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTI0MT1zdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTI1MC1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI1MTpzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjUyLXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI2MTpFWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI3MTpFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xMzg3PXN0YXRpYyBpbnQgaXhwNHh4X2hzc19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYy0xNDg4LVxcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmM6MTQ4OTpcXHRuZGV2ID0gYWxsb2NfaGRsY2Rldihwb3J0KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE0OTAtXFx0aWYgKCFuZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MDgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTA5OlxcdGVyciA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKG5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9peHA0eHhfaHNzLmMtMTUxMC1cXHRpZiAoZXJyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xNTI1PXN0YXRpYyB2b2lkIGl4cDR4eF9oc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTI5OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MzAtXFx0ZnJlZV9uZXRkZXYocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTI4NT1zdGF0aWMgdm9pZCBuMl9kZXN0cm95X2NhcmQoY2FyZF90ICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjI5MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTMyMT1zdGF0aWMgaW50IF9faW5pdCBuMl9ydW4odW5zaWduZWQgbG9uZyBpbywgdW5zaWduZWQgbG9uZyBpcnEsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vbjIuYy0zNDYtXFxuZHJpdmVycy9uZXQvd2FuL24yLmM6MzQ3OlxcdGNhcmQtXFx1MDAzZXBvcnRzWzBdLmRldiA9IGFsbG9jX2hkbGNkZXYoXFx1MDAyNmNhcmQtXFx1MDAzZXBvcnRzWzBdKTtcXG5kcml2ZXJzL25ldC93YW4vbjIuYzozNDg6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMV0uZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9uMi5jLTM0OS1cXHRpZiAoIWNhcmQtXFx1MDAzZXBvcnRzWzBdLmRldiB8fCAhY2FyZC1cXHUwMDNlcG9ydHNbMV0uZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vbjIuYy00NTgtXFxuZHJpdmVycy9uZXQvd2FuL24yLmM6NDU5OlxcdFxcdGlmIChyZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpKSB7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtNDYwLVxcdFxcdFxcdHByX3dhcm4oXFxcInVuYWJsZSB0byByZWdpc3RlciBoZGxjIGRldmljZVxcXFxuXFxcIik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yNDY9c3RhdGljIHZvaWQgcGMzMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0yNTItXFx0XFx0aWYgKGNhcmQtXFx1MDAzZXBvcnRzW2ldLmNhcmQpXFxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmM6MjUzOlxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0yNTQtXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYz0yODI9c3RhdGljIGludCBwYzMwMF9wY2lfaW5pdF9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy0zNTMtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5fcG9ydHM7IGkrKykge1xcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jOjM1NDpcXHRcXHRjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYgPSBhbGxvY19oZGxjZGV2KFxcdTAwMjZjYXJkLVxcdTAwM2Vwb3J0c1tpXSk7XFxuZHJpdmVycy9uZXQvd2FuL3BjMzAwdG9vLmMtMzU1LVxcdFxcdGlmICghY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KSB7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTAtXFx0XFx0c2NhX2luaXRfcG9ydChwb3J0KTtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzo0NTE6XFx0XFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYy00NTItXFx0XFx0XFx0cHJfZXJyKFxcXCJ1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jPTIyNz1zdGF0aWMgdm9pZCBwY2kyMDBfcGNpX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjMzLVxcdFxcdGlmIChjYXJkLVxcdTAwM2Vwb3J0c1tpXS5jYXJkKVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyMzQ6XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yMzUtXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM9MjYzPXN0YXRpYyBpbnQgcGNpMjAwX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTAtXFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGNhcmQpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyOTE6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMF0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMF0pO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzoyOTI6XFx0Y2FyZC1cXHUwMDNlcG9ydHNbMV0ubmV0ZGV2ID0gYWxsb2NfaGRsY2RldihcXHUwMDI2Y2FyZC1cXHUwMDNlcG9ydHNbMV0pO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYy0yOTMtXFx0aWYgKCFjYXJkLVxcdTAwM2Vwb3J0c1swXS5uZXRkZXYgfHwgIWNhcmQtXFx1MDAzZXBvcnRzWzFdLm5ldGRldikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTM4NC1cXHRcXHRzY2FfaW5pdF9wb3J0KHBvcnQpO1xcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYzozODU6XFx0XFx0aWYgKHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldikpIHtcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMzg2LVxcdFxcdFxcdHByX2VycihcXFwidW5hYmxlIHRvIHJlZ2lzdGVyIGhkbGMgZGV2aWNlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTQ4Nj1zdGF0aWMgdm9pZCB3YW54bF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgY2FyZC1cXHUwMDNlbl9wb3J0czsgaSsrKSB7XFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM6NDkyOlxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYy00OTMtXFx0XFx0ZnJlZV9uZXRkZXYoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jPTUzMz1zdGF0aWMgaW50IHdhbnhsX3BjaV9pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldixcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTc1MC1cXHRcXHRzdHJ1Y3QgcG9ydCAqcG9ydCA9IFxcdTAwMjZjYXJkLVxcdTAwM2Vwb3J0c1tpXTtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYzo3NTE6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IGFsbG9jX2hkbGNkZXYocG9ydCk7XFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzUyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNzY5LVxcdFxcdGdldF9zdGF0dXMocG9ydCktXFx1MDAzZWNsb2NraW5nID0gQ0xPQ0tfRVhUO1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jOjc3MDpcXHRcXHRpZiAocmVnaXN0ZXJfaGRsY19kZXZpY2UoZGV2KSkge1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTc3MS1cXHRcXHRcXHRwcl9lcnIoXFxcIiVzOiB1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaD01Nz1pbnQgaGRsY19pb2N0bChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaWZfc2V0dGluZ3MgKmlmcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC01OS0vKiBNdXN0IGJlIHVzZWQgYnkgaGFyZHdhcmUgZHJpdmVyIG9uIG1vZHVsZSBzdGFydHVwL2V4aXQgKi9cXG5pbmNsdWRlL2xpbnV4L2hkbGMuaDo2MDojZGVmaW5lIHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldilcXHRyZWdpc3Rlcl9uZXRkZXYoZGV2KVxcbmluY2x1ZGUvbGludXgvaGRsYy5oOjYxOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG5pbmNsdWRlL2xpbnV4L2hkbGMuaC02Mi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaGRsYy5oPTY1PXZvaWQgdW5yZWdpc3Rlcl9oZGxjX3Byb3RvY29sKHN0cnVjdCBoZGxjX3Byb3RvICpwcm90byk7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjYtXFxuaW5jbHVkZS9saW51eC9oZGxjLmg6Njc6c3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2hkbGNkZXYodm9pZCAqcHJpdik7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjAwLjU1NDMwMjQ2OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MDAyNTUxMTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkhETEMgRHJpdmVyIEludmVzdGlnYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbGFuZHNjYXBlIG9mIEhETEMgZHJpdmVycyB3aXRoaW4gdGhpcyBzeXN0ZW0uIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGFyZSB3ZSBkZWFsaW5nIGV4Y2x1c2l2ZWx5IHdpdGggcGh5c2ljYWwgV0FOIGNhcmRzIGhlcmUsIG9yIGFyZSB0aGVyZSBhbnkgdmlydHVhbCBpbXBsZW1lbnRhdGlvbnMgZmxvYXRpbmcgYXJvdW5kPyBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZS5cblxuTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBhbGwgdGhlIGZpbGVzLiBTcGVjaWZpY2FsbHksIEkgc2hvdWxkIGJlIGxvb2tpbmcgYXQgdGhlIGBkcml2ZXJzL25ldC93YW4vYCBkaXJlY3RvcnksIG5hdHVyYWxseS4gQnV0LCBJIGRvbid0IHdhbnQgdG8gbWlzcyBhbnl0aGluZywgc28gSSBzaG91bGQgZXhwYW5kIG15IHNlYXJjaCBtb3JlIGJyb2FkbHkuIEknbGwgbmVlZCB0byBjaGVjayBhbnl3aGVyZSBlbHNlIHRoYXQgbWlnaHQgdG91Y2ggSERMQyBkaXJlY3RseS4gTXkgc2VhcmNoIHRlcm1zIHdpbGwgYmUgYEhETENgIGl0c2VsZiwgcGx1cyBhbnkgaW5zdGFuY2VzIG9mIGBhbGxvY19oZGxjZGV2YCBvciBgcmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaG9zZSBmdW5jdGlvbiBjYWxscyBzaG91bGQgYmUga2V5IGluZGljYXRvcnMuXG5cbkFjdHVhbGx5LCBiZWZvcmUgSSBnZXQgbG9zdCBpbiB0aGUgd2VlZHMsIGxldCdzIHN0YXJ0IHdpdGggYSBzaW1wbGUgaW52ZW50b3J5LiBGaXJzdCwgSSB3aWxsIGxpc3QgYWxsIHRoZSBmaWxlcyByZXNpZGluZyB3aXRoaW4gYGRyaXZlcnMvbmV0L3dhbi9gLiBUaGVuLCBiYXNlZCBvbiB0aGlzIGludmVudG9yeSwgSSB3aWxsIHJlZmluZSBteSBzZWFyY2ggYXMgbmVlZGVkLiBUaGlzIGFwcHJvYWNoIHNob3VsZCBoZWxwIGtlZXAgdGhpbmdzIG9yZ2FuaXplZCBhbmQgcHJldmVudCBtZSBmcm9tIG1pc3NpbmcgYW55dGhpbmcgaW1wb3J0YW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM1NSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjA2LjU1Njg1NTgzNFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvd2FuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIkZpbGVzXCI6IFtcbiAgICBcImMxMDEuY1wiLFxuICAgIFwiZmFyc3luYy5jXCIsXG4gICAgXCJmYXJzeW5jLmhcIixcbiAgICBcImZzbF9xbWNfaGRsYy5jXCIsXG4gICAgXCJmc2xfdWNjX2hkbGMuY1wiLFxuICAgIFwiZnNsX3VjY19oZGxjLmhcIixcbiAgICBcImhkNjQ1NzAuY1wiLFxuICAgIFwiaGQ2NDU3MC5oXCIsXG4gICAgXCJoZDY0NTcyLmNcIixcbiAgICBcImhkNjQ1NzIuaFwiLFxuICAgIFwiaGRsYy5jXCIsXG4gICAgXCJoZGxjX2Npc2NvLmNcIixcbiAgICBcImhkbGNfZnIuY1wiLFxuICAgIFwiaGRsY19wcHAuY1wiLFxuICAgIFwiaGRsY19yYXcuY1wiLFxuICAgIFwiaGRsY19yYXdfZXRoLmNcIixcbiAgICBcImhkbGNfeDI1LmNcIixcbiAgICBcIml4cDR4eF9oc3MuY1wiLFxuICAgIFwibGFwYmV0aGVyLmNcIixcbiAgICBcIm4yLmNcIixcbiAgICBcInBjMzAwdG9vLmNcIixcbiAgICBcInBjaTIwMHN5bi5jXCIsXG4gICAgXCJzbGljX2RzMjY1MjIuY1wiLFxuICAgIFwic2xpY19kczI2NTIyLmhcIixcbiAgICBcIndhbnhsLmNcIixcbiAgICBcIndhbnhsLmhcIixcbiAgICBcIndhbnhsZncuU1wiXG4gIF0sXG4gIFwiU3ViZGlyc1wiOiBbXG4gICAgXCJmcmFtZXJcIlxuICBdXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzowNi41NTY5MzI0OTRaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzY5ODkxNzg1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBIRExDIERldmljZSBJbnZlc3RpZ2F0aW9uKipcblxuT2theSwgdGltZSB0byBtZXRob2RpY2FsbHkgZ28gdGhyb3VnaCB0aGUgZHJpdmVyIGxhbmRzY2FwZSBhbmQgc2VlIHdoYXQncyBvdXQgdGhlcmUgdXNpbmcgYGFsbG9jX2hkbGNkZXZgLiAgSSBuZWVkIHRvIGdldCBhIGZpcm0gZ3Jhc3Agb24gYWxsIHRoZSBIRExDIGRldmljZXMgd2UncmUgZGVhbGluZyB3aXRoLiBMZXQncyBzdGFydCB3aXRoIGEgc3lzdGVtYXRpYyBzd2VlcC4gSSdsbCBuZWVkIHRvIGxvb2sgYXQ6XG5cbiogICBgYzEwMS5jYCDigJMgdGhhdCdzIHRoZSBNb3hhIEMxMDEgSVNBIGNhcmQsIGdvb2QgdG8ga25vdy5cbiogICBgZmFyc3luYy5jYCDigJMgY292ZXJpbmcgRmFyU3luYyBQQ0kvUENJZSBzeW5jIGNhcmRzLiBHb3QgaXQuXG4qICAgYGZzbF9xbWNfaGRsYy5jYCDigJMgRnJlZXNjYWxlIFFNQyBwbGF0Zm9ybSBkZXZpY2VzLiBDaGVja2luZy5cbiogICBgZnNsX3VjY19oZGxjLmNgIOKAkyBhbmQgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgcGxhdGZvcm0gZGV2aWNlcy5cbiogICBgaXhwNHh4X2hzcy5jYCDigJMgdGhlIEludGVsIElYUDR4eCBTb0Mgc3luY2hyb25vdXMgc2VyaWFsIHBvcnQuXG4qICAgYG4yLmNgIOKAkyBoYW5kbGluZyB0aGUgU0RMIFJJU0NvbS9OMiBJU0EgY2FyZC5cbiogICBgcGMzMDB0b28uY2Ag4oCTIEN5Y2xhZGVzLVBDMzAwIFBDSSBjYXJkLlxuKiAgIGBwY2kyMDBzeW4uY2Ag4oCTIHRoZSBHb3JhbW8gUENJMjAwU3luIFBDSSBjYXJkLlxuKiAgIGB3YW54bC5jYCDigJMgU0JFIEluYy4gd2FuWEwgUENJIGNhcmQuXG5cbkhvbGQgb24gYSBzZWNvbmQuLi4gYmVmb3JlIEkgZ2V0IHRvbyBkZWVwIGludG8gdGhpcyBsaXN0LCBJIG5lZWQgdG8gYmUgKnRob3JvdWdoKi4gSSBzaG91bGQgd2lkZW4gdGhlIG5ldCBhIGJpdC4gSXMgYW55dGhpbmcgZWxzZSBjcmVhdGluZyBhbiBIRExDIGRldmljZSB1c2luZyBhIGRpZmZlcmVudCBhbGxvY2F0aW9uIG1ldGhvZCwgb3IgcGVyaGFwcyBsZXZlcmFnaW5nIGBoZGxjLmNgIGRpcmVjdGx5PyBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy5cblxuT2theSwgbGV0J3Mgc3RhcnQgd2l0aCBgbGFwYmV0aGVyLmNgIHRvIHNlZSBpZiB0aGVyZSBpcyBzb21ldGhpbmcgZWxzZSBnb2luZyBvbi4gSSdsbCBuZWVkIHRvIGludmVzdGlnYXRlIGl0IHRvIHVuZGVyc3RhbmQgd2hhdCBleGFjdGx5IGl0IGlzIGRvaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDAwNywiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0MCwiVG9vbENhbGxzIjpbImNvZGVzZWFyY2gtZGlyLWluZGV4Il19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTAuMjU1ODUyMjY4WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDI3MzM2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyZWdpc3Rlcl9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz0zMDE9c3RhdGljIGludCBsYXBiZXRoX3NldF9tYWNfYWRkcmVzcyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMwOC1cXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6MzA5OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbGFwYl9yZWdpc3Rlcl9zdHJ1Y3QgbGFwYmV0aF9jYWxsYmFja3MgPSB7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTMxMC1cXHQuY29ubmVjdF9jb25maXJtYXRpb24gICAgPSBsYXBiZXRoX2Nvbm5lY3RlZCxcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz0zODE9c3RhdGljIGludCBsYXBiZXRoX25ld19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy00MTktXFx0cmMgPSAtRUlPO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo0MjA6XFx0aWYgKHJlZ2lzdGVyX25ldGRldmljZShuZGV2KSlcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDIxLVxcdFxcdGdvdG8gZmFpbDtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00MzU9c3RhdGljIHZvaWQgbGFwYmV0aF9mcmVlX2RldmljZShzdHJ1Y3QgbGFwYmV0aGRldiAqbGFwYmV0aClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy00MzgtXFx0bGlzdF9kZWxfcmN1KFxcdTAwMjZsYXBiZXRoLVxcdTAwM2Vub2RlKTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NDM5OlxcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlKGxhcGJldGgtXFx1MDAzZWF4ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNDQwLX1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYz00OTg9c3RhdGljIGludCBfX2luaXQgbGFwYmV0aF9pbml0X2RyaXZlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUwMy1cXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmM6NTA0OlxcdGVyciA9IHJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2bGFwYmV0aF9kZXZfbm90aWZpZXIpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYy01MDUtXFx0aWYgKGVycikge1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jPTUxNj1zdGF0aWMgdm9pZCBfX2V4aXQgbGFwYmV0aF9jbGVhbnVwX2RyaXZlcih2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyMS1cXHRkZXZfcmVtb3ZlX3BhY2soXFx1MDAyNmxhcGJldGhfcGFja2V0X3R5cGUpO1xcbmRyaXZlcnMvbmV0L3dhbi9sYXBiZXRoZXIuYzo1MjI6XFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXFx1MDAyNmxhcGJldGhfZGV2X25vdGlmaWVyKTtcXG5kcml2ZXJzL25ldC93YW4vbGFwYmV0aGVyLmMtNTIzLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUyOC1cXHRcXHRkZXZfcHV0KGxhcGJldGgtXFx1MDAzZWV0aGRldik7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jOjUyOTpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZShsYXBiZXRoLVxcdTAwM2VheGRldik7XFxuZHJpdmVycy9uZXQvd2FuL2xhcGJldGhlci5jLTUzMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjEwLjMxMDEzMzc4OFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjc5ODA4MzAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBEZWVwIGludG8gdGhlIEhETEMgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIHJlYWxseSBnZXQgaW50byB0aGUgbml0dHktZ3JpdHR5IG9mIHRoaXMgSERMQyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGdlbmVyaWMgSERMQyBpcyBoYW5kbGVkIGhlcmUuIEknbSBnb2luZyB0byBtZXRpY3Vsb3VzbHkgZXhhbWluZSBgaGRsYy5jYCBmcm9tIHRvcCB0byBib3R0b20uIEkgd2FudCB0byBzZWUgaG93IHRoZSBjb3JlIGxvZ2ljIGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gZGF0YSBmcmFtaW5nLCBlcnJvciBkZXRlY3Rpb24sIGZsYWcgaGFuZGxpbmcsIGFuZCB0aGUgb3ZlcmFsbCBzdGF0ZSBtYWNoaW5lLiBJJ20gbG9va2luZyBmb3IgdGhlIGVzc2VudGlhbCBidWlsZGluZyBibG9ja3MsIHRoZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgbnVhbmNlcyBvZiB0aGUgZGVzaWduIHRoYXQgbWFrZSB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIHRpY2suIFVuZGVyc3RhbmRpbmcgdGhlIGdlbmVyaWMgSERMQyBhc3BlY3RzIGlzIGNydWNpYWwgYmVmb3JlIEkgZ2V0IGFueSBmdXJ0aGVyLCBhcyBpdCBsaWtlbHkgZm9ybXMgdGhlIGJhc2lzIGZvciBhbnkgcHJvdG9jb2wgZXh0ZW5zaW9ucyBvciBjdXN0b21pemF0aW9ucyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MzM2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTIuNTg5OTQzOTkxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNDI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC93YW4vaGRsYy5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBHZW5lcmljIEhETEMgc3VwcG9ydCByb3V0aW5lcyBmb3IgTGludXhcXG4gICA0OlxcdCAqXFxuICAgNTpcXHQgKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA4IEtyenlzenRvZiBIYWxhc2EgXFx1MDAzY2toY0BwbS53YXcucGxcXHUwMDNlXFxuICAgNjpcXHQgKlxcbiAgIDc6XFx0ICogQ3VycmVudGx5IHN1cHBvcnRlZDpcXG4gICA4OlxcdCAqXFx0KiByYXcgSVAtaW4tSERMQ1xcbiAgIDk6XFx0ICpcXHQqIENpc2NvIEhETENcXG4gIDEwOlxcdCAqXFx0KiBGcmFtZSBSZWxheSB3aXRoIEFOU0kgb3IgQ0NJVFQgTE1JIChib3RoIHVzZXIgYW5kIG5ldHdvcmsgc2lkZSlcXG4gIDExOlxcdCAqXFx0KiBQUFBcXG4gIDEyOlxcdCAqXFx0KiBYLjI1XFxuICAxMzpcXHQgKlxcbiAgMTQ6XFx0ICogVXNlIHNldGhkbGMgdXRpbGl0eSB0byBzZXQgbGluZSBwYXJhbWV0ZXJzLCBwcm90b2NvbCBhbmQgUFZDc1xcbiAgMTU6XFx0ICpcXG4gIDE2OlxcdCAqIEhvdyBkb2VzIGl0IHdvcms6XFxuICAxNzpcXHQgKiAtIHByb3RvLVxcdTAwM2VvcGVuKCksIGNsb3NlKCksIHN0YXJ0KCksIHN0b3AoKSBjYWxscyBhcmUgc2VyaWFsaXplZC5cXG4gIDE4OlxcdCAqICAgVGhlIG9yZGVyIGlzOiBvcGVuLCBbIHN0YXJ0LCBzdG9wIC4uLiBdIGNsb3NlIC4uLlxcbiAgMTk6XFx0ICogLSBwcm90by1cXHUwMDNlc3RhcnQoKSBhbmQgc3RvcCgpIGFyZSBjYWxsZWQgd2l0aCBzcGluX2xvY2tfaXJxIGhlbGQuXFxuICAyMDpcXHQgKi9cXG4gIDIxOlxcdFxcbiAgMjI6XFx0I2RlZmluZSBwcl9mbXQoZm10KSBLQlVJTERfTU9ETkFNRSBcXFwiOiBcXFwiIGZtdFxcbiAgMjM6XFx0XFxuICAyNDpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvZXJybm8uaFxcdTAwM2VcXG4gIDI1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9oZGxjLmhcXHUwMDNlXFxuICAyNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYXJwLmhcXHUwMDNlXFxuICAyNzpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvaW5ldGRldmljZS5oXFx1MDAzZVxcbiAgMjg6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L2luaXQuaFxcdTAwM2VcXG4gIDI5OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9rZXJuZWwuaFxcdTAwM2VcXG4gIDMwOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tb2R1bGUuaFxcdTAwM2VcXG4gIDMxOlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ub3RpZmllci5oXFx1MDAzZVxcbiAgMzI6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BrdF9zY2hlZC5oXFx1MDAzZVxcbiAgMzM6XFx0I2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BvbGwuaFxcdTAwM2VcXG4gIDM0OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4gIDM1OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9za2J1ZmYuaFxcdTAwM2VcXG4gIDM2OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuICAzNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L25ldF9uYW1lc3BhY2UuaFxcdTAwM2VcXG4gIDM4OlxcdFxcbiAgMzk6XFx0c3RhdGljIGNvbnN0IGNoYXIgKnZlcnNpb24gPSBcXFwiSERMQyBzdXBwb3J0IG1vZHVsZSByZXZpc2lvbiAxLjIyXFxcIjtcXG4gIDQwOlxcdFxcbiAgNDE6XFx0I3VuZGVmIERFQlVHX0xJTktcXG4gIDQyOlxcdFxcbiAgNDM6XFx0c3RhdGljIHN0cnVjdCBoZGxjX3Byb3RvICpmaXJzdF9wcm90bztcXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGludCBoZGxjX3JjdihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAgNDY6XFx0XFx0XFx0ICAgIHN0cnVjdCBwYWNrZXRfdHlwZSAqcCwgc3RydWN0IG5ldF9kZXZpY2UgKm9yaWdfZGV2KVxcbiAgNDc6XFx0e1xcbiAgNDg6XFx0XFx0c3RydWN0IGhkbGNfZGV2aWNlICpoZGxjO1xcbiAgNDk6XFx0XFxuICA1MDpcXHRcXHQvKiBGaXJzdCBtYWtlIHN1cmUgXFxcImRldlxcXCIgaXMgYW4gSERMQyBkZXZpY2UgKi9cXG4gIDUxOlxcdFxcdGlmICghKGRldi1cXHUwMDNlcHJpdl9mbGFncyBcXHUwMDI2IElGRl9XQU5fSERMQykpIHtcXG4gIDUyOlxcdFxcdFxcdGtmcmVlX3NrYihza2IpO1xcbiAgNTM6XFx0XFx0XFx0cmV0dXJuIE5FVF9SWF9TVUNDRVNTO1xcbiAgNTQ6XFx0XFx0fVxcbiAgNTU6XFx0XFxuICA1NjpcXHRcXHRoZGxjID0gZGV2X3RvX2hkbGMoZGV2KTtcXG4gIDU3OlxcdFxcbiAgNTg6XFx0XFx0aWYgKCFuZXRfZXEoZGV2X25ldChkZXYpLCBcXHUwMDI2aW5pdF9uZXQpKSB7XFxuICA1OTpcXHRcXHRcXHRrZnJlZV9za2Ioc2tiKTtcXG4gIDYwOlxcdFxcdFxcdHJldHVybiAwO1xcbiAgNjE6XFx0XFx0fVxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHRCVUdfT04oIWhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VuZXRpZl9yeCk7XFxuICA2NDpcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZW5ldGlmX3J4KHNrYik7XFxuICA2NTpcXHR9XFxuICA2NjpcXHRcXG4gIDY3OlxcdG5ldGRldl90eF90IGhkbGNfc3RhcnRfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgNjg6XFx0e1xcbiAgNjk6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAgNzA6XFx0XFxuICA3MTpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXhtaXQpXFxuICA3MjpcXHRcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXhtaXQoc2tiLCBkZXYpO1xcbiAgNzM6XFx0XFxuICA3NDpcXHRcXHRyZXR1cm4gaGRsYy1cXHUwMDNleG1pdChza2IsIGRldik7IC8qIGNhbGwgaGFyZHdhcmUgZHJpdmVyIGRpcmVjdGx5ICovXFxuICA3NTpcXHR9XFxuICA3NjpcXHRFWFBPUlRfU1lNQk9MKGhkbGNfc3RhcnRfeG1pdCk7XFxuICA3NzpcXHRcXG4gIDc4OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBoZGxjX3Byb3RvX3N0YXJ0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICA3OTpcXHR7XFxuICA4MDpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuICA4MTpcXHRcXG4gIDgyOlxcdFxcdGlmIChoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RhcnQpXFxuICA4MzpcXHRcXHRcXHRoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RhcnQoZGV2KTtcXG4gIDg0OlxcdH1cXG4gIDg1OlxcdFxcbiAgODY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhkbGNfcHJvdG9fc3RvcChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAgODc6XFx0e1xcbiAgODg6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAgODk6XFx0XFxuICA5MDpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZXN0b3ApXFxuICA5MTpcXHRcXHRcXHRoZGxjLVxcdTAwM2Vwcm90by1cXHUwMDNlc3RvcChkZXYpO1xcbiAgOTI6XFx0fVxcbiAgOTM6XFx0XFxuICA5NDpcXHRzdGF0aWMgaW50IGhkbGNfZGV2aWNlX2V2ZW50KHN0cnVjdCBub3RpZmllcl9ibG9jayAqdGhpcywgdW5zaWduZWQgbG9uZyBldmVudCxcXG4gIDk1OlxcdFxcdFxcdFxcdCAgICAgdm9pZCAqcHRyKVxcbiAgOTY6XFx0e1xcbiAgOTc6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IG5ldGRldl9ub3RpZmllcl9pbmZvX3RvX2RldihwdHIpO1xcbiAgOTg6XFx0XFx0aGRsY19kZXZpY2UgKmhkbGM7XFxuICA5OTpcXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiAxMDA6XFx0XFx0aW50IG9uO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoxMi41OTAwNTk4MjJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwOTEzMTUzOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSB3ZSBnby4uLlxuXG4qKkRpdmluZyBpbnRvIGBkcml2ZXJzL25ldC93YW4vaGRsYy5jYCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGludG8gdGhlIG5pdHR5LWdyaXR0eS4gTGV0J3Mgc2VlIHdoYXQgdGhpcyBgaGRsYy5jYCBmaWxlIGhhcyB0byBvZmZlciBpbiB0aGUgYHdhbmAgbmV0d29yayBkcml2ZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IEhpZ2gtTGV2ZWwgRGF0YSBMaW5rIENvbnRyb2wgKEhETEMpIGlzIGltcGxlbWVudGVkIHdpdGhpbiB0aGlzIGtlcm5lbCBzcGFjZS4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHRoZSB0eXBpY2FsIEhETEMgZnJhbWluZyBtZWNoYW5pc21zLCBlcnJvciBkZXRlY3Rpb24sIGFuZCBwb3RlbnRpYWxseSBzb21lIGhhcmR3YXJlLXNwZWNpZmljIGludGVyYWN0aW9uIGlmIGl0J3Mgbm90IGEgcHVyZWx5IHNvZnR3YXJlLWJhc2VkIGltcGxlbWVudGF0aW9uLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIHRoaW5ncyBsaWtlIGZsYWcgc2VxdWVuY2UgaGFuZGxpbmcsIGFkZHJlc3MgYW5kIGNvbnRyb2wgZmllbGQgcHJvY2Vzc2luZywgQ1JDIGNhbGN1bGF0aW9ucywgYW5kIG9mIGNvdXJzZSwgdGhlIGFjdHVhbCBkYXRhIHRyYW5zZmVyIG1lY2hhbmlzbXMuIEkgd2FudCB0byBwYXkgYXR0ZW50aW9uIHRvIGFueSBwb3RlbnRpYWwgb3B0aW1pemF0aW9ucyB0aGV5J3ZlIGltcGxlbWVudGVkLCBlc3BlY2lhbGx5IGFyb3VuZCBpbnRlcnJ1cHQgaGFuZGxpbmcgb3IgRE1BIHVzYWdlIGlmIGl0J3MgdGhlcmUsIHRvIHNlZSBob3cgdGhleSdyZSBtYXhpbWl6aW5nIHRocm91Z2hwdXQgZm9yIFdBTiBjb25uZWN0aW9ucyB1c2luZyB0aGlzIHByb3RvY29sLiBUaGUgY29kZSBzaG91bGQgcmV2ZWFsIGhvdyB0aGV5J3JlIGhhbmRsaW5nIGRpZmZlcmVudCBIRExDIHZhcmlhbnRzIGFzIHdlbGwsIGxpa2UgQ2lzY28gSERMQyBvciBGcmFtZSBSZWxheSwgaWYgc3VwcG9ydGVkLiBMZXQncyBzdGFydCBkaXNzZWN0aW5nIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzAwOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MTUuMjk5MTkzNjQ5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkxMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3dhbi9oZGxjLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEwMTpcXHRcXG4gMTAyOlxcdFxcdGlmICghbmV0X2VxKGRldl9uZXQoZGV2KSwgXFx1MDAyNmluaXRfbmV0KSlcXG4gMTAzOlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMTA0OlxcdFxcbiAxMDU6XFx0XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSlcXG4gMTA2OlxcdFxcdFxcdHJldHVybiBOT1RJRllfRE9ORTsgLyogbm90IGFuIEhETEMgZGV2aWNlICovXFxuIDEwNzpcXHRcXG4gMTA4OlxcdFxcdGlmIChldmVudCAhPSBORVRERVZfQ0hBTkdFKVxcbiAxMDk6XFx0XFx0XFx0cmV0dXJuIE5PVElGWV9ET05FOyAvKiBPbmx5IGludGVyZXN0ZWQgaW4gY2FycmllciBjaGFuZ2VzICovXFxuIDExMDpcXHRcXG4gMTExOlxcdFxcdG9uID0gbmV0aWZfY2Fycmllcl9vayhkZXYpO1xcbiAxMTI6XFx0XFxuIDExMzpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxMTQ6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX2RldmljZV9ldmVudCBORVRERVZfQ0hBTkdFLCBjYXJyaWVyICVpXFxcXG5cXFwiLFxcbiAxMTU6XFx0XFx0ICAgICAgIGRldi1cXHUwMDNlbmFtZSwgb24pO1xcbiAxMTY6XFx0I2VuZGlmXFxuIDExNzpcXHRcXG4gMTE4OlxcdFxcdGhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAxMTk6XFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gMTIwOlxcdFxcbiAxMjE6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZWNhcnJpZXIgPT0gb24pXFxuIDEyMjpcXHRcXHRcXHRnb3RvIGNhcnJpZXJfZXhpdDsgLyogbm8gY2hhbmdlIGluIERDRCBsaW5lIGxldmVsICovXFxuIDEyMzpcXHRcXG4gMTI0OlxcdFxcdGhkbGMtXFx1MDAzZWNhcnJpZXIgPSBvbjtcXG4gMTI1OlxcdFxcbiAxMjY6XFx0XFx0aWYgKCFoZGxjLVxcdTAwM2VvcGVuKVxcbiAxMjc6XFx0XFx0XFx0Z290byBjYXJyaWVyX2V4aXQ7XFxuIDEyODpcXHRcXG4gMTI5OlxcdFxcdGlmIChoZGxjLVxcdTAwM2VjYXJyaWVyKSB7XFxuIDEzMDpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJDYXJyaWVyIGRldGVjdGVkXFxcXG5cXFwiKTtcXG4gMTMxOlxcdFxcdFxcdGhkbGNfcHJvdG9fc3RhcnQoZGV2KTtcXG4gMTMyOlxcdFxcdH0gZWxzZSB7XFxuIDEzMzpcXHRcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJDYXJyaWVyIGxvc3RcXFxcblxcXCIpO1xcbiAxMzQ6XFx0XFx0XFx0aGRsY19wcm90b19zdG9wKGRldik7XFxuIDEzNTpcXHRcXHR9XFxuIDEzNjpcXHRcXG4gMTM3OlxcdGNhcnJpZXJfZXhpdDpcXG4gMTM4OlxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2ssIGZsYWdzKTtcXG4gMTM5OlxcdFxcdHJldHVybiBOT1RJRllfRE9ORTtcXG4gMTQwOlxcdH1cXG4gMTQxOlxcdFxcbiAxNDI6XFx0LyogTXVzdCBiZSBjYWxsZWQgYnkgaGFyZHdhcmUgZHJpdmVyIHdoZW4gSERMQyBkZXZpY2UgaXMgYmVpbmcgb3BlbmVkICovXFxuIDE0MzpcXHRpbnQgaGRsY19vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDE0NDpcXHR7XFxuIDE0NTpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDE0NjpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxNDc6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX29wZW4oKSBjYXJyaWVyICVpIG9wZW4gJWlcXFxcblxcXCIsIGRldi1cXHUwMDNlbmFtZSxcXG4gMTQ4OlxcdFxcdCAgICAgICBoZGxjLVxcdTAwM2VjYXJyaWVyLCBoZGxjLVxcdTAwM2VvcGVuKTtcXG4gMTQ5OlxcdCNlbmRpZlxcbiAxNTA6XFx0XFxuIDE1MTpcXHRcXHRpZiAoIWhkbGMtXFx1MDAzZXByb3RvKVxcbiAxNTI6XFx0XFx0XFx0cmV0dXJuIC1FTk9TWVM7XFx0Lyogbm8gcHJvdG9jb2wgYXR0YWNoZWQgKi9cXG4gMTUzOlxcdFxcbiAxNTQ6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VvcGVuKSB7XFxuIDE1NTpcXHRcXHRcXHRpbnQgcmVzdWx0ID0gaGRsYy1cXHUwMDNlcHJvdG8tXFx1MDAzZW9wZW4oZGV2KTtcXG4gMTU2OlxcdFxcbiAxNTc6XFx0XFx0XFx0aWYgKHJlc3VsdClcXG4gMTU4OlxcdFxcdFxcdFxcdHJldHVybiByZXN1bHQ7XFxuIDE1OTpcXHRcXHR9XFxuIDE2MDpcXHRcXG4gMTYxOlxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAxNjI6XFx0XFxuIDE2MzpcXHRcXHRpZiAoaGRsYy1cXHUwMDNlY2Fycmllcikge1xcbiAxNjQ6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiQ2FycmllciBkZXRlY3RlZFxcXFxuXFxcIik7XFxuIDE2NTpcXHRcXHRcXHRoZGxjX3Byb3RvX3N0YXJ0KGRldik7XFxuIDE2NjpcXHRcXHR9IGVsc2Uge1xcbiAxNjc6XFx0XFx0XFx0bmV0ZGV2X2luZm8oZGV2LCBcXFwiTm8gY2FycmllclxcXFxuXFxcIik7XFxuIDE2ODpcXHRcXHR9XFxuIDE2OTpcXHRcXG4gMTcwOlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAxO1xcbiAxNzE6XFx0XFxuIDE3MjpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAxNzM6XFx0XFx0cmV0dXJuIDA7XFxuIDE3NDpcXHR9XFxuIDE3NTpcXHRFWFBPUlRfU1lNQk9MKGhkbGNfb3Blbik7XFxuIDE3NjpcXHRcXG4gMTc3OlxcdC8qIE11c3QgYmUgY2FsbGVkIGJ5IGhhcmR3YXJlIGRyaXZlciB3aGVuIEhETEMgZGV2aWNlIGlzIGJlaW5nIGNsb3NlZCAqL1xcbiAxNzg6XFx0dm9pZCBoZGxjX2Nsb3NlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDE3OTpcXHR7XFxuIDE4MDpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDE4MTpcXHQjaWZkZWYgREVCVUdfTElOS1xcbiAxODI6XFx0XFx0cHJpbnRrKEtFUk5fREVCVUcgXFxcIiVzOiBoZGxjX2Nsb3NlKCkgY2FycmllciAlaSBvcGVuICVpXFxcXG5cXFwiLCBkZXYtXFx1MDAzZW5hbWUsXFxuIDE4MzpcXHRcXHQgICAgICAgaGRsYy1cXHUwMDNlY2FycmllciwgaGRsYy1cXHUwMDNlb3Blbik7XFxuIDE4NDpcXHQjZW5kaWZcXG4gMTg1OlxcdFxcbiAxODY6XFx0XFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2aGRsYy1cXHUwMDNlc3RhdGVfbG9jayk7XFxuIDE4NzpcXHRcXG4gMTg4OlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAwO1xcbiAxODk6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZWNhcnJpZXIpXFxuIDE5MDpcXHRcXHRcXHRoZGxjX3Byb3RvX3N0b3AoZGV2KTtcXG4gMTkxOlxcdFxcbiAxOTI6XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZoZGxjLVxcdTAwM2VzdGF0ZV9sb2NrKTtcXG4gMTkzOlxcdFxcbiAxOTQ6XFx0XFx0aWYgKGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VjbG9zZSlcXG4gMTk1OlxcdFxcdFxcdGhkbGMtXFx1MDAzZXByb3RvLVxcdTAwM2VjbG9zZShkZXYpO1xcbiAxOTY6XFx0fVxcbiAxOTc6XFx0RVhQT1JUX1NZTUJPTChoZGxjX2Nsb3NlKTtcXG4gMTk4OlxcdFxcbiAxOTk6XFx0aW50IGhkbGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpXFxuIDIwMDpcXHR7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjE1LjI5OTI4NjQwOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjQ4NDA4NzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgcmVhZGluZyB0aGF0IGNvZGUsIGV4cHJlc3NlZCBhcyBpZiBpdCdzIG15IG93biB0aG91Z2h0IHByb2Nlc3M6XG5cbioqRGl2aW5nIGludG8gYGRyaXZlcnMvbmV0L3dhbi9oZGxjLmNgIC0gTGluZXMgMjAxIE9ud2FyZCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGRlZXBlciBpbnRvIHRoaXMgYGhkbGMuY2AgZHJpdmVyLiBJJ3ZlIGZpbmlzaGVkIHRoZSBpbml0aWFsIHNjYW4sIGFuZCBub3cgSSdtIHN0YXJ0aW5nIGZyb20gbGluZSAyMDEgdG8gdGhlIGVuZCBvZiB0aGUgZmlsZS4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB0aGlzIGRyaXZlciBpcyBkb2luZywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBpdCBoYW5kbGVzIHRoZSBsb3dlci1sZXZlbCBmcmFtaW5nIGFuZCBwZXJoYXBzIGRhdGEgdHJhbnNtaXNzaW9uIG92ZXIgV0FOIGNvbm5lY3Rpb25zLlxuXG5JJ20gZXhwZWN0aW5nIHRvIGZpbmQgY29yZSBIRExDIGZyYW1lIHByb2Nlc3Npbmc6IGRlZmluaXRlbHkgbG9va2luZyBmb3IgQ1JDIGNhbGN1bGF0aW9ucywgZmxhZyBieXRlIGhhbmRsaW5nLCBhbmQgZGUtc3R1ZmZpbmcvc3R1ZmZpbmcgbWVjaGFuaXNtcyBmb3IgdGhlIEhETEMgZnJhbWUncyBzdGFydCBhbmQgZW5kIGZsYWdzLCBlbnN1cmluZyBkYXRhIGludGVncml0eSBkdXJpbmcgdHJhbnNtaXNzaW9uLiBJIGFsc28gd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggdGhlIHVuZGVybHlpbmcgaGFyZHdhcmUsIGlmIHdlIGhhdmVu4oCZdCBhbHJlYWR5IGNvdmVyZWQgdGhhdC4gSXMgaXQgdXNpbmcgRE1BPyBBcmUgdGhlcmUgaW50ZXJydXB0IGhhbmRsZXJzIGZvciBmcmFtZSByZWNlcHRpb24gYW5kIHRyYW5zbWlzc2lvbj8gV2hhdCBzcGVjaWZpYyBoYXJkd2FyZSByZWdpc3RlcnMgYXJlIGJlaW5nIG1hbmlwdWxhdGVkPyBBbHNvLCBJIHdpbGwgYmUga2VlbiB0byBpZGVudGlmeSBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIG9uIHRoZSBXQU4gbGluaywgdGhpbmdzIGxpa2UgZnJhbWUgY2hlY2tzdW0gZmFpbHVyZXMsIGFuZCBkYXRhIGxvc3MuXG5cbkknbGwgYmUgc3BlY2lmaWNhbGx5IHdhdGNoaW5nIGZvciBob3cgdGhlIGRyaXZlciBoYW5kbGVzIHRoZSBuZXR3b3JrIGRldmljZSBzdHJ1Y3R1cmUsIGFuZCBob3cgaXQgaXMgaW50ZWdyYXRpbmcgd2l0aCB0aGUga2VybmVsJ3MgbmV0d29ya2luZyBzdGFjayDigJMgd2hhdCBuZXRfZGV2aWNlIGNhbGxzIGFyZSBiZWluZyB1c2VkLCBhbmQgaG93IGl0J3MgaW50ZXJmYWNpbmcgd2l0aCB1cHBlci1sYXllciBwcm90b2NvbHMuIFRoZSBnb2FsIGlzIHRvIGdldCBhIHZlcnkgZ29vZCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRyaXZlciBmaXRzIGludG8gdGhlIGxhcmdlciBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoxOC41NDc2OTgwNDlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODQ3NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2hkbGMuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyMDE6XFx0XFx0c3RydWN0IGhkbGNfcHJvdG8gKnByb3RvID0gZmlyc3RfcHJvdG87XFxuIDIwMjpcXHRcXHRpbnQgcmVzdWx0O1xcbiAyMDM6XFx0XFxuIDIwNDpcXHRcXHRpZiAoZGV2X3RvX2hkbGMoZGV2KS1cXHUwMDNlcHJvdG8pIHtcXG4gMjA1OlxcdFxcdFxcdHJlc3VsdCA9IGRldl90b19oZGxjKGRldiktXFx1MDAzZXByb3RvLVxcdTAwM2Vpb2N0bChkZXYsIGlmcyk7XFxuIDIwNjpcXHRcXHRcXHRpZiAocmVzdWx0ICE9IC1FSU5WQUwpXFxuIDIwNzpcXHRcXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiAyMDg6XFx0XFx0fVxcbiAyMDk6XFx0XFxuIDIxMDpcXHRcXHQvKiBOb3QgaGFuZGxlZCBieSBjdXJyZW50bHkgYXR0YWNoZWQgcHJvdG9jb2wgKGlmIGFueSkgKi9cXG4gMjExOlxcdFxcbiAyMTI6XFx0XFx0d2hpbGUgKHByb3RvKSB7XFxuIDIxMzpcXHRcXHRcXHRyZXN1bHQgPSBwcm90by1cXHUwMDNlaW9jdGwoZGV2LCBpZnMpO1xcbiAyMTQ6XFx0XFx0XFx0aWYgKHJlc3VsdCAhPSAtRUlOVkFMKVxcbiAyMTU6XFx0XFx0XFx0XFx0cmV0dXJuIHJlc3VsdDtcXG4gMjE2OlxcdFxcdFxcdHByb3RvID0gcHJvdG8tXFx1MDAzZW5leHQ7XFxuIDIxNzpcXHRcXHR9XFxuIDIxODpcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gMjE5OlxcdH1cXG4gMjIwOlxcdEVYUE9SVF9TWU1CT0woaGRsY19pb2N0bCk7XFxuIDIyMTpcXHRcXG4gMjIyOlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgaGVhZGVyX29wcyBoZGxjX251bGxfb3BzO1xcbiAyMjM6XFx0XFxuIDIyNDpcXHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyMjU6XFx0e1xcbiAyMjY6XFx0XFx0LyogUmUtaW5pdCBhbGwgdmFyaWFibGVzIGNoYW5nZWQgYnkgSERMQyBwcm90b2NvbCBkcml2ZXJzLFxcbiAyMjc6XFx0XFx0ICogaW5jbHVkaW5nIGV0aGVyX3NldHVwKCkgY2FsbGVkIGZyb20gaGRsY19yYXdfZXRoLmMuXFxuIDIyODpcXHRcXHQgKi9cXG4gMjI5OlxcdFxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuIDIzMDpcXHRcXHRkZXYtXFx1MDAzZXByaXZfZmxhZ3NcXHRcXHQgPSBJRkZfV0FOX0hETEM7XFxuIDIzMTpcXHRcXHRkZXYtXFx1MDAzZW10dVxcdFxcdCA9IEhETENfTUFYX01UVTtcXG4gMjMyOlxcdFxcdGRldi1cXHUwMDNlbWluX210dVxcdFxcdCA9IDY4O1xcbiAyMzM6XFx0XFx0ZGV2LVxcdTAwM2VtYXhfbXR1XFx0XFx0ID0gSERMQ19NQVhfTVRVO1xcbiAyMzQ6XFx0XFx0ZGV2LVxcdTAwM2V0eXBlXFx0XFx0ID0gQVJQSFJEX1JBV0hETEM7XFxuIDIzNTpcXHRcXHRkZXYtXFx1MDAzZWhhcmRfaGVhZGVyX2xlblxcdCA9IDA7XFxuIDIzNjpcXHRcXHRkZXYtXFx1MDAzZW5lZWRlZF9oZWFkcm9vbVxcdCA9IDA7XFxuIDIzNzpcXHRcXHRkZXYtXFx1MDAzZWFkZHJfbGVuXFx0XFx0ID0gMDtcXG4gMjM4OlxcdFxcdGRldi1cXHUwMDNlaGVhZGVyX29wc1xcdFxcdCA9IFxcdTAwMjZoZGxjX251bGxfb3BzO1xcbiAyMzk6XFx0fVxcbiAyNDA6XFx0XFxuIDI0MTpcXHRzdGF0aWMgdm9pZCBoZGxjX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIDI0MjpcXHR7XFxuIDI0MzpcXHRcXHRoZGxjX2RldmljZSAqaGRsYyA9IGRldl90b19oZGxjKGRldik7XFxuIDI0NDpcXHRcXG4gMjQ1OlxcdFxcdGhkbGNfc2V0dXBfZGV2KGRldik7XFxuIDI0NjpcXHRcXHRoZGxjLVxcdTAwM2VjYXJyaWVyID0gMTtcXG4gMjQ3OlxcdFxcdGhkbGMtXFx1MDAzZW9wZW4gPSAwO1xcbiAyNDg6XFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmhkbGMtXFx1MDAzZXN0YXRlX2xvY2spO1xcbiAyNDk6XFx0fVxcbiAyNTA6XFx0XFxuIDI1MTpcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYWxsb2NfaGRsY2Rldih2b2lkICpwcml2KVxcbiAyNTI6XFx0e1xcbiAyNTM6XFx0XFx0c3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gMjU0OlxcdFxcbiAyNTU6XFx0XFx0ZGV2ID0gYWxsb2NfbmV0ZGV2KHNpemVvZihzdHJ1Y3QgaGRsY19kZXZpY2UpLCBcXFwiaGRsYyVkXFxcIixcXG4gMjU2OlxcdFxcdFxcdFxcdCAgIE5FVF9OQU1FX1VOS05PV04sIGhkbGNfc2V0dXApO1xcbiAyNTc6XFx0XFx0aWYgKGRldilcXG4gMjU4OlxcdFxcdFxcdGRldl90b19oZGxjKGRldiktXFx1MDAzZXByaXYgPSBwcml2O1xcbiAyNTk6XFx0XFx0cmV0dXJuIGRldjtcXG4gMjYwOlxcdH1cXG4gMjYxOlxcdEVYUE9SVF9TWU1CT0woYWxsb2NfaGRsY2Rldik7XFxuIDI2MjpcXHRcXG4gMjYzOlxcdHZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiAyNjQ6XFx0e1xcbiAyNjU6XFx0XFx0cnRubF9sb2NrKCk7XFxuIDI2NjpcXHRcXHRkZXZfY2xvc2UoZGV2KTtcXG4gMjY3OlxcdFxcdGRldGFjaF9oZGxjX3Byb3RvY29sKGRldik7XFxuIDI2ODpcXHRcXHR1bnJlZ2lzdGVyX25ldGRldmljZShkZXYpO1xcbiAyNjk6XFx0XFx0cnRubF91bmxvY2soKTtcXG4gMjcwOlxcdH1cXG4gMjcxOlxcdEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9oZGxjX2RldmljZSk7XFxuIDI3MjpcXHRcXG4gMjczOlxcdGludCBhdHRhY2hfaGRsY19wcm90b2NvbChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgaGRsY19wcm90byAqcHJvdG8sXFxuIDI3NDpcXHRcXHRcXHRcXHQgc2l6ZV90IHNpemUpXFxuIDI3NTpcXHR7XFxuIDI3NjpcXHRcXHRpbnQgZXJyO1xcbiAyNzc6XFx0XFxuIDI3ODpcXHRcXHRlcnIgPSBkZXRhY2hfaGRsY19wcm90b2NvbChkZXYpO1xcbiAyNzk6XFx0XFx0aWYgKGVycilcXG4gMjgwOlxcdFxcdFxcdHJldHVybiBlcnI7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjE4LjU0Nzc4NDI4OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzE3Njg1NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkhETEMgRGV2aWNlIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBIRExDIGRldmljZSBzaXR1YXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgaGVyZSwgc28gSSdtIHRoaW5raW5nLCBcIkhvdyBhcmUgdGhlc2UgdGhpbmdzIGFjdHVhbGx5ICptYWRlKj8gQXJlIHdlIHRhbGtpbmcgYWJvdXQgZGVkaWNhdGVkIGhhcmR3YXJlLCBvciBpcyB0aGVyZSBzb21lIHNvZnR3YXJlIG1hZ2ljIGhhcHBlbmluZz8gQXJlIHRoZXJlIHZpcnR1YWwgZGV2aWNlcyB0aGF0IGVtdWxhdGUgSERMQywgY3JlYXRpbmcgYSBgbmV0X2RldmljZWAgaW4gdGhlIGtlcm5lbD8gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgY3JlYXRpb24gcHJvY2Vzcy5cblxuT2theSwgbXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJJ20gZ29pbmcgdG8gZXhoYXVzdGl2ZWx5IHNjYW4gdGhlIGtlcm5lbCBzb3VyY2UuIEknbGwgc2VhcmNoIGZvciBldmVyeSBpbnN0YW5jZSBvZiBgSUZGX1dBTl9IRExDYCwgYGFsbG9jX2hkbGNkZXZgLCBhbmQgYHJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIGdvb2Qgb3ZlcnZpZXcgb2YgYWxsIHRoZSBjb2RlIHBhdGhzIHRoYXQgZGVhbCB3aXRoIEhETEMgZGV2aWNlIGluc3RhbnRpYXRpb24gYW5kIG1hbmFnZW1lbnQuIEknbGwgc3RhcnQgd2l0aCBhIHN0cmFpZ2h0Zm9yd2FyZCBncmVwIGZvciBgSUZGX1dBTl9IRExDYCB0byBzZWUgd2hlcmUgdGhlIGludGVyZmFjZSBmbGFncyBhcmUgYmVpbmcgdXNlZC4gVGhhdCdzIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byBuYXJyb3cgdGhlIGZvY3VzLiBUaGlzIHdpbGwgZXhwb3NlIHRoZSBrZXkgYXJlYXMgdGhhdCBkZXRlcm1pbmUgdGhlIGNyZWF0aW9uIGFuZCByZWdpc3RyYXRpb24gb2YgdGhlc2UgZGV2aWNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjIxLjI2NTQ3MjA1NVoiLCJTZXEiOjI2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4MjYxMjE1NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRkZfV0FOX0hETENcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvd2FuL2hkbGMuYz00NT1zdGF0aWMgaW50IGhkbGNfcmN2KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTUwLVxcdC8qIEZpcnN0IG1ha2Ugc3VyZSBcXFwiZGV2XFxcIiBpcyBhbiBIRExDIGRldmljZSAqL1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6NTE6XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSkge1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtNTItXFx0XFx0a2ZyZWVfc2tiKHNrYik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTk0PXN0YXRpYyBpbnQgaGRsY19kZXZpY2VfZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLCB1bnNpZ25lZCBsb25nIGV2ZW50LFxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYy0xMDQtXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoxMDU6XFx0aWYgKCEoZGV2LVxcdTAwM2Vwcml2X2ZsYWdzIFxcdTAwMjYgSUZGX1dBTl9IRExDKSlcXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jLTEwNi1cXHRcXHRyZXR1cm4gTk9USUZZX0RPTkU7IC8qIG5vdCBhbiBIRExDIGRldmljZSAqL1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYz0yMjQ9c3RhdGljIHZvaWQgaGRsY19zZXR1cF9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjI5LVxcdGRldi1cXHUwMDNlZmxhZ3NcXHRcXHQgPSBJRkZfUE9JTlRPUE9JTlQgfCBJRkZfTk9BUlA7XFxuZHJpdmVycy9uZXQvd2FuL2hkbGMuYzoyMzA6XFx0ZGV2LVxcdTAwM2Vwcml2X2ZsYWdzXFx0XFx0ID0gSUZGX1dBTl9IRExDO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjMxLVxcdGRldi1cXHUwMDNlbXR1XFx0XFx0ID0gSERMQ19NQVhfTVRVO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0xNDU1PXN0cnVjdCBuZXRfZGV2aWNlX29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3MzEtICogQElGRl9JU0FUQVA6IElTQVRBUCBpbnRlcmZhY2UgKFJGQzQyMTQpXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDoxNzMyOiAqIEBJRkZfV0FOX0hETEM6IFdBTiBIRExDIGRldmljZVxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTczMy0gKiBASUZGX1hNSVRfRFNUX1JFTEVBU0U6IGRldl9oYXJkX3N0YXJ0X3htaXQoKSBpcyBhbGxvd2VkIHRvXFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTE3NjU9ZW51bSBuZXRkZXZfcHJpdl9mbGFncyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oLTE3NjktXFx0SUZGX0lTQVRBUFxcdFxcdFxcdD0gMVxcdTAwM2NcXHUwMDNjMyxcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjE3NzA6XFx0SUZGX1dBTl9IRExDXFx0XFx0XFx0PSAxXFx1MDAzY1xcdTAwM2M0LFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMTc3MS1cXHRJRkZfWE1JVF9EU1RfUkVMRUFTRVxcdFxcdD0gMVxcdTAwM2NcXHUwMDNjNSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MjIuOTQ4MDg5MDc5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQzMDI3MDAyMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBIRExDIERyaXZlciBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBgYWxsb2NfaGRsY2RldmAgaXMgdGhlIGNydWNpYWwgZnVuY3Rpb24sIGFuZCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgdXNhZ2UuIExvb2tpbmcgYXQgdGhlIGNhbGwgc2l0ZXMsIEkgc2VlIGEgbWl4IG9mIGRyaXZlcnM6IElTQSBjYXJkcyBsaWtlIGBjMTAxLmNgIGFuZCBgbjIuY2AsIHNldmVyYWwgUENJIGRyaXZlcnMgZm9yIEZhclN5bmMsIEN5Y2xhZGVzLCBHb3JhbW8sIGFuZCB3YW5YTCBjYXJkcywgYW5kIE9GL3BsYXRmb3JtIGRyaXZlcnMgZm9yIEZyZWVzY2FsZSBhbmQgSVhQNHh4IFNvQ3MuXG5cbk5vdywgYSBjcnVjaWFsIHF1ZXN0aW9uIGFyaXNlczogaG93IHByZXZhbGVudCBhcmUgdGhlc2UgZGV2aWNlIHR5cGVzIGluIG1vZGVybiB2aXJ0dWFsaXphdGlvbj8gTm9uZSBvZiB0aGVzZSBhcHBlYXIgdG8gYmUgZW11bGF0ZWQgaW4gUUVNVSBvciBzdGFuZGFyZCB2aXJ0dWFsaXplZCBzZXR1cHMuIFRoYXQncyBhIGtleSBvYnNlcnZhdGlvbi4gTGV0IG1lIHBhdXNlIGFuZCB0aGluay4uLiBhcmUgdGhlcmUgYW55IFVTQiBIRExDIGRyaXZlcnM/IE5vLiBXaGF0IGFib3V0IHZpcnR1YWwgbmV0d29yayBkZXZpY2VzIGxpa2UgdHVuL3RhcCBvciBydG5sIGxpbmtzPyBOb25lIGFyZSB1c2luZyBIRExDIG9yIGBhbGxvY19oZGxjZGV2YC5cblxuSSBuZWVkIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlLiBMZXQncyBkZWx2ZSBkZWVwZXIgaW50byBgZHJpdmVycy9uZXQvd2FuL2AgYW5kIGBoZGxjLmNgIHRvIHNlZSBpZiBJIG1pc3NlZCBhbnl0aGluZy5cblxuQSByZWxhdGVkIHRob3VnaHQsIGl0J3Mgd29ydGggcmUtZXhhbWluaW5nIGhvdyBgYzEwMS5jYCBvciBgbjIuY2AgYXJlIGluaXRpYWxpemVkLiBBcmUgdGhleSByZWx5aW5nIG9uIG1vZHVsZSBsb2FkIG9yIGBpbnNtb2RgIHBhcmFtZXRlcnMgdGhhdCBtYXkgYmUgcmVsZXZhbnQ/IElTQSBjYXJkcyBjYW4gYmUgYSBiaXQgdHJpY2t5LCByZWx5aW5nIG9uIHBoeXNpY2FsIGhhcmR3YXJlLCBvciBwcm9iZWQgdGhyb3VnaCBwYXJhbXMuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIHByb2JlIG1lY2hhbmlzbSBmb3IgYm90aCBgYzEwMS5jYCBhbmQgYG4yLmNgLiBJIHdpbGwgY2hlY2sgdGhvc2UgZmlsZXMgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTMxOSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzoyNy4yNTA3OTEyNTFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2MxMDEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyOTUsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyOTU6XFx0XFx0Lm5kb19zaW9jd2FuZGV2ID0gYzEwMV9pb2N0bCxcXG4gMjk2OlxcdFxcdC5uZG9fc2lvY2RldnByaXZhdGUgPSBjMTAxX3Npb2NkZXZwcml2YXRlLFxcbiAyOTc6XFx0fTtcXG4gMjk4OlxcdFxcbiAyOTk6XFx0c3RhdGljIGludCBfX2luaXQgYzEwMV9ydW4odW5zaWduZWQgbG9uZyBpcnEsIHVuc2lnbmVkIGxvbmcgd2luYmFzZSlcXG4gMzAwOlxcdHtcXG4gMzAxOlxcdFxcdHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XFxuIDMwMjpcXHRcXHRoZGxjX2RldmljZSAqaGRsYztcXG4gMzAzOlxcdFxcdGNhcmRfdCAqY2FyZDtcXG4gMzA0OlxcdFxcdGludCByZXN1bHQ7XFxuIDMwNTpcXHRcXG4gMzA2OlxcdFxcdGlmIChpcnEgXFx1MDAzYyAzIHx8IGlycSBcXHUwMDNlIDE1IHx8IGlycSA9PSA2KSAvKiBGSVhNRSAqLyB7XFxuIDMwNzpcXHRcXHRcXHRwcl9lcnIoXFxcImludmFsaWQgSVJRIHZhbHVlXFxcXG5cXFwiKTtcXG4gMzA4OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiAzMDk6XFx0XFx0fVxcbiAzMTA6XFx0XFxuIDMxMTpcXHRcXHRpZiAod2luYmFzZSBcXHUwMDNjIDB4QzAwMDAgfHwgd2luYmFzZSBcXHUwMDNlIDB4REZGRkYgfHwgKHdpbmJhc2UgXFx1MDAyNiAweDNGRkYpICE9IDApIHtcXG4gMzEyOlxcdFxcdFxcdHByX2VycihcXFwiaW52YWxpZCBSQU0gdmFsdWVcXFxcblxcXCIpO1xcbiAzMTM6XFx0XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDMxNDpcXHRcXHR9XFxuIDMxNTpcXHRcXG4gMzE2OlxcdFxcdGNhcmQgPSBremFsbG9jX29iaihjYXJkX3QpO1xcbiAzMTc6XFx0XFx0aWYgKCFjYXJkKVxcbiAzMTg6XFx0XFx0XFx0cmV0dXJuIC1FTk9CVUZTO1xcbiAzMTk6XFx0XFxuIDMyMDpcXHRcXHRjYXJkLVxcdTAwM2VkZXYgPSBhbGxvY19oZGxjZGV2KGNhcmQpO1xcbiAzMjE6XFx0XFx0aWYgKCFjYXJkLVxcdTAwM2VkZXYpIHtcXG4gMzIyOlxcdFxcdFxcdHByX2VycihcXFwidW5hYmxlIHRvIGFsbG9jYXRlIG1lbW9yeVxcXFxuXFxcIik7XFxuIDMyMzpcXHRcXHRcXHRrZnJlZShjYXJkKTtcXG4gMzI0OlxcdFxcdFxcdHJldHVybiAtRU5PQlVGUztcXG4gMzI1OlxcdFxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0XFx0aWYgKHJlcXVlc3RfaXJxKGlycSwgc2NhX2ludHIsIDAsIGRldm5hbWUsIGNhcmQpKSB7XFxuIDMyODpcXHRcXHRcXHRwcl9lcnIoXFxcImNvdWxkIG5vdCBhbGxvY2F0ZSBJUlFcXFxcblxcXCIpO1xcbiAzMjk6XFx0XFx0XFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XFxuIDMzMDpcXHRcXHRcXHRyZXR1cm4gLUVCVVNZO1xcbiAzMzE6XFx0XFx0fVxcbiAzMzI6XFx0XFx0Y2FyZC1cXHUwMDNlaXJxID0gaXJxO1xcbiAzMzM6XFx0XFxuIDMzNDpcXHRcXHRpZiAoIXJlcXVlc3RfbWVtX3JlZ2lvbih3aW5iYXNlLCBDMTAxX01BUFBFRF9SQU1fU0laRSwgZGV2bmFtZSkpIHtcXG4gMzM1OlxcdFxcdFxcdHByX2VycihcXFwiY291bGQgbm90IHJlcXVlc3QgUkFNIHdpbmRvd1xcXFxuXFxcIik7XFxuIDMzNjpcXHRcXHRcXHRjMTAxX2Rlc3Ryb3lfY2FyZChjYXJkKTtcXG4gMzM3OlxcdFxcdFxcdHJldHVybiAtRUJVU1k7XFxuIDMzODpcXHRcXHR9XFxuIDMzOTpcXHRcXHRjYXJkLVxcdTAwM2VwaHlfd2luYmFzZSA9IHdpbmJhc2U7XFxuIDM0MDpcXHRcXHRjYXJkLVxcdTAwM2V3aW4wYmFzZSA9IGlvcmVtYXAod2luYmFzZSwgQzEwMV9NQVBQRURfUkFNX1NJWkUpO1xcbiAzNDE6XFx0XFx0aWYgKCFjYXJkLVxcdTAwM2V3aW4wYmFzZSkge1xcbiAzNDI6XFx0XFx0XFx0cHJfZXJyKFxcXCJjb3VsZCBub3QgbWFwIEkvTyBhZGRyZXNzXFxcXG5cXFwiKTtcXG4gMzQzOlxcdFxcdFxcdGMxMDFfZGVzdHJveV9jYXJkKGNhcmQpO1xcbiAzNDQ6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjI3LjI1MDg3MDc5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyODAwODY3Nzg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2Ygd2hhdCdzIGdvaW5nIG9uOlxuXG4qKkRlY29uc3RydWN0aW5nIGBjMTAxX3J1bmAncyBJbml0aWFsaXphdGlvbioqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBgYzEwMS5jYCBmaWxlIGFuZCBzcGVjaWZpY2FsbHkgdGhlIGBjMTAxX3J1bmAgZnVuY3Rpb24uIE15IGluaXRpYWwgaHVuY2ggaXMgdGhhdCBpdCdzIGhhbmRsaW5nIHRoZSBjb3JlIGV4ZWN1dGlvbi4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hhdCdzIGdvaW5nIG9uIGhlcmUuIFRoZSBrZXkgYXBwZWFycyB0byBiZSB0aGUgYHNjYV9pbml0YCBjYWxsIHdpdGhpbiBgYzEwMV9ydW5gLiBJIHN1c3BlY3QgdGhpcyBpcyB3aGVyZSB0aGUgaGFyZHdhcmUgaW50ZXJhY3Rpb24gaGFwcGVucywgd3JpdGluZyB0byByZWdpc3RlcnMgYW5kIHZlcmlmeWluZyB0aGUgU0NBIGNoaXBzLiBOb3csIEkgbmVlZCB0byB6b29tIGluLiBCYXNlZCBvbiB0aGUgY29udGV4dCwgSSB0aGluayBsaW5lcyAzNDUtMzgwIG9mIGBjMTAxX3J1bmAgYXJlIHdoZXJlIHRoZSBhY3Rpb24gaGFwcGVucy4gTGV0IG1lIGdvIHRha2UgYSBsb29rIHRoZXJlLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODcxLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMVQwMDoxMzozMC4wNTE3NDA0OTdaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA3NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvd2FuL2MxMDEuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNDUsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNDU6XFx0XFx0fVxcbiAzNDY6XFx0XFxuIDM0NzpcXHRcXHRjYXJkLVxcdTAwM2V0eF9yaW5nX2J1ZmZlcnMgPSBUWF9SSU5HX0JVRkZFUlM7XFxuIDM0ODpcXHRcXHRjYXJkLVxcdTAwM2VyeF9yaW5nX2J1ZmZlcnMgPSBSWF9SSU5HX0JVRkZFUlM7XFxuIDM0OTpcXHRcXHRjYXJkLVxcdTAwM2VidWZmX29mZnNldCA9IEMxMDFfV0lORE9XX1NJWkU7IC8qIEJ5dGVzIDFEMDAtMUZGRiByZXNlcnZlZCAqL1xcbiAzNTA6XFx0XFxuIDM1MTpcXHRcXHRyZWFkYihjYXJkLVxcdTAwM2V3aW4wYmFzZSArIEMxMDFfUEFHRSk7IC8qIFJlc2V0cyBTQ0E/ICovXFxuIDM1MjpcXHRcXHR1ZGVsYXkoMTAwKTtcXG4gMzUzOlxcdFxcdHdyaXRlYigwLCBjYXJkLVxcdTAwM2V3aW4wYmFzZSArIEMxMDFfUEFHRSk7XFxuIDM1NDpcXHRcXHR3cml0ZWIoMCwgY2FyZC1cXHUwMDNld2luMGJhc2UgKyBDMTAxX0RUUik7IC8qIFBvd2VyLXVwIGZvciBSQU0/ICovXFxuIDM1NTpcXHRcXG4gMzU2OlxcdFxcdHNjYV9pbml0KGNhcmQsIDApO1xcbiAzNTc6XFx0XFxuIDM1ODpcXHRcXHRkZXYgPSBwb3J0X3RvX2RldihjYXJkKTtcXG4gMzU5OlxcdFxcdGhkbGMgPSBkZXZfdG9faGRsYyhkZXYpO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2Y2FyZC1cXHUwMDNlbG9jayk7XFxuIDM2MjpcXHRcXHRkZXYtXFx1MDAzZWlycSA9IGlycTtcXG4gMzYzOlxcdFxcdGRldi1cXHUwMDNlbWVtX3N0YXJ0ID0gd2luYmFzZTtcXG4gMzY0OlxcdFxcdGRldi1cXHUwMDNlbWVtX2VuZCA9IHdpbmJhc2UgKyBDMTAxX01BUFBFRF9SQU1fU0laRSAtIDE7XFxuIDM2NTpcXHRcXHRkZXYtXFx1MDAzZXR4X3F1ZXVlX2xlbiA9IDUwO1xcbiAzNjY6XFx0XFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmMxMDFfb3BzO1xcbiAzNjc6XFx0XFx0aGRsYy1cXHUwMDNlYXR0YWNoID0gc2NhX2F0dGFjaDtcXG4gMzY4OlxcdFxcdGhkbGMtXFx1MDAzZXhtaXQgPSBzY2FfeG1pdDtcXG4gMzY5OlxcdFxcdGNhcmQtXFx1MDAzZXNldHRpbmdzLmNsb2NrX3R5cGUgPSBDTE9DS19FWFQ7XFxuIDM3MDpcXHRcXG4gMzcxOlxcdFxcdHJlc3VsdCA9IHJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuIDM3MjpcXHRcXHRpZiAocmVzdWx0KSB7XFxuIDM3MzpcXHRcXHRcXHRwcl93YXJuKFxcXCJ1bmFibGUgdG8gcmVnaXN0ZXIgaGRsYyBkZXZpY2VcXFxcblxcXCIpO1xcbiAzNzQ6XFx0XFx0XFx0YzEwMV9kZXN0cm95X2NhcmQoY2FyZCk7XFxuIDM3NTpcXHRcXHRcXHRyZXR1cm4gcmVzdWx0O1xcbiAzNzY6XFx0XFx0fVxcbiAzNzc6XFx0XFxuIDM3ODpcXHRcXHRzY2FfaW5pdF9wb3J0KGNhcmQpOyAvKiBTZXQgdXAgQzEwMSBtZW1vcnkgKi9cXG4gMzc5OlxcdFxcdHNldF9jYXJyaWVyKGNhcmQpO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRuZXRkZXZfaW5mbyhkZXYsIFxcXCJNb3hhIEMxMDEgb24gSVJRJXUsIHVzaW5nICV1IFRYICsgJXUgUlggcGFja2V0cyByaW5nc1xcXFxuXFxcIixcXG4gMzgyOlxcdFxcdFxcdCAgICBjYXJkLVxcdTAwM2VpcnEsIGNhcmQtXFx1MDAzZXR4X3JpbmdfYnVmZmVycywgY2FyZC1cXHUwMDNlcnhfcmluZ19idWZmZXJzKTtcXG4gMzgzOlxcdFxcbiAzODQ6XFx0XFx0Km5ld19jYXJkID0gY2FyZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MzAuMDUxODIyNzE3WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc2MjE1MzExODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHlzaXMgb2YgSERMQyBEcml2ZXIgUGF0Y2ggZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBjb25jZXJuaW5nIGBmc2xfdWNjX2hkbGMuY2AuIEZpcnN0LCBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlcyBtYWRlLiBTbywgSSBzZWUgdGhhdCB0aGUgcGF0Y2ggbW9kaWZpZXMgYHVoZGxjX29wZW5gLCBgdWhkbGNfc3VzcGVuZGAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYC4gU3BlY2lmaWNhbGx5LCBpbiBgdWhkbGNfb3BlbmAsIGl0IG5vdyBjYWxscyBgaGRsY19vcGVuYCBlYXJsaWVyIGFuZCBoYW5kbGVzIHBvdGVudGlhbCBlcnJvcnMuIGB1aGRsY19zdXNwZW5kYCBoYXMgYSBtb3ZlIG9mIGBrbWFsbG9jX29iamAsIGFuZCBgdWNjX2hkbGNfcmVtb3ZlYCBub3cgaW5jbHVkZXMgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIGFuZCBgZnJlZV9uZXRkZXZgLlxuXG5Ob3csIGxvb2tpbmcgZGVlcGVyIGF0IHRoZSBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAgZnVuY3Rpb24sIGl0IGluY2x1ZGVzIGEgY2FsbCB0byBgZGV2X2Nsb3NlYCBiZWZvcmUgZGV0YWNoaW5nIHRoZSBIRExDIHByb3RvY29sIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBuZXQgZGV2aWNlLiBDcnVjaWFsbHksIEkgbmVlZCB0byBrbm93ICp3aGVyZSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQuIEl0IGxvb2tzIGxpa2UgaXQncyBjYWxsZWQgd2l0aGluIHRoZSByZW1vdmUgb3IgY2xlYW51cCBmdW5jdGlvbnMgb2YgKmV2ZXJ5KiBIRExDIGhhcmR3YXJlIGRyaXZlci4gVGhhdCdzIGEga2V5IG9ic2VydmF0aW9uLiBXZSBzZWUgaXQgaW4gYHVjY19oZGxjX3JlbW92ZWAsIGBmc3RfcmVtb3ZlX29uZWAsIGBxbWNfaGRsY19yZW1vdmVgLCBgd2FueGxfcGNpX3JlbW92ZV9vbmVgLCBhbmQgb3RoZXJzLCBhbGwgb2Ygd2hpY2ggc3VnZ2VzdHMgdGhleSBhcmUgYWxsIHJlbW92ZSBmdW5jdGlvbnMuXG5cblRoaXMgYnJpbmdzIG1lIHRvIHRoZSBuZWdhdGl2ZSBjcml0ZXJpYSBmb3IgZnV6emluZy4gV2UncmUgbG9va2luZyBmb3IgY29kZSB0aGF0J3MgXCJzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmVcIiBvciBcInVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoc1wiLiBUaGUgc2Vjb25kIHBvaW50IGlzIHRoYXQgdGhlIGNvZGUgaXMgdGVhcmRvd24vY2xlYW51cCBmdW5jdGlvbnMgb25seSBleGVjdXRlZCBkdXJpbmcgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcsIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuXG5MZXQncyBkaXNzZWN0IHRoZSByZWFjaGFiaWxpdHkgb2YgdGhpcyBzcGVjaWZpYyBjb2RlLiBgZnNsX3VjY19oZGxjLmNgIGlzIGEgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIGRyaXZlciwgYSBwbGF0Zm9ybSBkcml2ZXIgaW50ZW5kZWQgZm9yIE5YUC9GcmVlc2NhbGUgUG93ZXJQQy9BUk0gU29DcyB3aXRoIFFVSUNDIEVuZ2luZSBoYXJkd2FyZS4gQ3JpdGljYWxseSwgb24gYW4gYW1kNjQgc3lzdGVtLCB0aGUgUVVJQ0NfRU5HSU5FIGNvbmZpZ3VyYXRpb24gb25seSBidWlsZHMgd2l0aCBgQ09NUElMRV9URVNUYC4gRXZlbiB0aGVuLCBpdOKAmXMgYSBwbGF0Zm9ybSBkZXZpY2UsIGJvdW5kIHZpYSBPcGVuRmlybXdhcmUgb3IgRGV2aWNlVHJlZSwgYW5kIHJlcXVpcmVzIGFjdHVhbCBGcmVlc2NhbGUgU29DIGhhcmR3YXJlLiBJdCBjYW5ub3QgcHJvYmUgb3IgYmUgaW5pdGlhbGl6ZWQgd2l0aG91dCB0aGF0LiBUaGVyZWZvcmUsIGBmc2xfdWNjX2hkbGMuY2AgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG9uIGEgc3RhbmRhcmQgYW1kNjQgUUVNVSBlbnZpcm9ubWVudC5cblxuTm93LCBjb25zaWRlcmluZyBgdW5yZWdpc3Rlcl9oZGxjX2RldmljZWAsIGl0J3MgZXhjbHVzaXZlbHkgY2FsbGVkIGR1cmluZyBkZXZpY2UgdW5yZWdpc3RyYXRpb24sIGRyaXZlciB0ZWFyZG93biwgb3IgbW9kdWxlIHVubG9hZC4gVGhlIGNhbGxpbmcgZnVuY3Rpb25zIGFyZSBhbGwgYXNzb2NpYXRlZCB3aXRoIHRoZSByZW1vdmFsIG9mIHNwZWNpZmljIGhhcmR3YXJlIGNhcmRzLCBiZSB0aGV5IHBsYXRmb3JtIGRldmljZXMsIFBDSSwgb3IgSVNBIGNhcmRzLiBUaGVzZSBoYXJkd2FyZSBjb21wb25lbnRzIC0gdGhlIEZyZWVzY2FsZSBRRSBwbGF0Zm9ybSwgRmFyU3luYyBjYXJkcywgQ3ljbGFkZXMtUEMzMDAgUENJIGNhcmRzLCBHb3JhbW8gUENJMjAwU3luLCBvciB0aGUgTW94YSBDMTAxIElTQSBjYXJkLCBmb3IgZXhhbXBsZSAtIHNpbXBseSBkbyBub3QgZXhpc3Qgb3IgYXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VIGVudmlyb25tZW50cy4gVGhpcywgdGhlcmVmb3JlLCBwdXRzIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYCBzcXVhcmVseSB3aXRoaW4gdGhlIGNhdGVnb3J5IG9mIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBjb2RlLiBUaGUgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGR1cmluZyB0ZWFyZG93biwgd2hpY2ggd2UgYXJlIG5vdCBhYmxlIHRvIHRyaWdnZXIuXG5cblRvIGVuc3VyZSB0aGVyZSdzIG5vIHN1YnRsZSBpbnRlcmFjdGlvbiB3aXRoIHJlYWNoYWJsZSBjb2RlLCBJIHNob3VsZCBzY2FuIHRoZSByZXN0IG9mIHRoZSBrZXJuZWwsIHNwZWNpZmljYWxseSBhbGwgYGRyaXZlcnMvbmV0L3dhbi9gIGFuZCBiZXlvbmQsIGZvciBhbnkgb3RoZXIgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLCBgdWhkbGNfb3BlbmAgb3IgYHVoZGxjX3N1c3BlbmRgLiBJIHdpbGwgcGVyZm9ybSBvbmUgbGFzdCBjaGVjayBvZiB0aGUgYWxsIHRoZSBjYWxsZXJzIHRvIGB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlYC4gVGhlIGN1cnJlbnQgYXNzZXNzbWVudCwgaG93ZXZlciwgaXMgdGhhdCB0aGlzIHBhdGNoIG1vZGlmaWVzIGNvZGUgdGhhdCBpcyBpbmhlcmVudGx5IHVucmVhY2hhYmxlIGluIGEgc3RhbmRhcmQgZnV6emluZyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM4NTQsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6MzcuNjczMzU2NjhaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODY2MzI4MjgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5yZWdpc3Rlcl9oZGxjX2RldmljZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC93YW4vYzEwMS5jPTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQgYzEwMV9jbGVhbnVwKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vYzEwMS5jLTQyNy1cXHRcXHRjYXJkID0gY2FyZC1cXHUwMDNlbmV4dF9jYXJkO1xcbmRyaXZlcnMvbmV0L3dhbi9jMTAxLmM6NDI4OlxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydF90b19kZXYocHRyKSk7XFxuZHJpdmVycy9uZXQvd2FuL2MxMDEuYy00MjktXFx0XFx0YzEwMV9kZXN0cm95X2NhcmQocHRyKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjI4Nj1mc3RfaW5pdF9jYXJkKHN0cnVjdCBmc3RfY2FyZF9pbmZvICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYy0yMzAwLVxcdFxcdFxcdHdoaWxlIChpLS0pXFxuZHJpdmVycy9uZXQvd2FuL2ZhcnN5bmMuYzoyMzAxOlxcdFxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0uZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jLTIzMDItXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjMyNj1mc3RfYWRkX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwNi1cXHRmb3IgKGkgPSAwIDsgaSBcXHUwMDNjIGNhcmQtXFx1MDAzZW5wb3J0cyA7IGkrKylcXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1MDc6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjUwOC1pbml0X2NhcmRfZmFpbDpcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmM9MjUzMT1mc3RfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0MC1cXG5kcml2ZXJzL25ldC93YW4vZmFyc3luYy5jOjI1NDE6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mYXJzeW5jLmMtMjU0Mi1cXHRcXHRmcmVlX25ldGRldihkZXYpO1xcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jPTc4MD1zdGF0aWMgdm9pZCBxbWNfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODMtXFxuZHJpdmVycy9uZXQvd2FuL2ZzbF9xbWNfaGRsYy5jOjc4NDpcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKHFtY19oZGxjLVxcdTAwM2VuZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9mc2xfcW1jX2hkbGMuYy03ODUtXFx0ZnJlZV9uZXRkZXYocW1jX2hkbGMtXFx1MDAzZW5ldGRldik7XFxuLS1cXG5kcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmM9MTI1ND1zdGF0aWMgdm9pZCB1Y2NfaGRsY19yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYy0xMjU3LVxcbmRyaXZlcnMvbmV0L3dhbi9mc2xfdWNjX2hkbGMuYzoxMjU4OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocHJpdi1cXHUwMDNlbmRldik7XFxuZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jLTEyNTktXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jPTI2MT1FWFBPUlRfU1lNQk9MKGFsbG9jX2hkbGNkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjYyLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmM6MjYzOnZvaWQgdW5yZWdpc3Rlcl9oZGxjX2RldmljZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjY0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcwLX1cXG5kcml2ZXJzL25ldC93YW4vaGRsYy5jOjI3MTpFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfaGRsY19kZXZpY2UpO1xcbmRyaXZlcnMvbmV0L3dhbi9oZGxjLmMtMjcyLVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYz0xNTI1PXN0YXRpYyB2b2lkIGl4cDR4eF9oc3NfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MjgtXFxuZHJpdmVycy9uZXQvd2FuL2l4cDR4eF9oc3MuYzoxNTI5OlxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vaXhwNHh4X2hzcy5jLTE1MzAtXFx0ZnJlZV9uZXRkZXYocG9ydC1cXHUwMDNlbmV0ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jPTI4NT1zdGF0aWMgdm9pZCBuMl9kZXN0cm95X2NhcmQoY2FyZF90ICpjYXJkKVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjkyLVxcbmRyaXZlcnMvbmV0L3dhbi9uMi5jOjI5MzpcXHRcXHRcXHR1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlKGRldik7XFxuZHJpdmVycy9uZXQvd2FuL24yLmMtMjk0LVxcdFxcdH1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jPTI0Nj1zdGF0aWMgdm9pZCBwYzMwMF9wY2lfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1Mi1cXHRcXHRpZiAoY2FyZC1cXHUwMDNlcG9ydHNbaV0uY2FyZClcXG5kcml2ZXJzL25ldC93YW4vcGMzMDB0b28uYzoyNTM6XFx0XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5uZXRkZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi9wYzMwMHRvby5jLTI1NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3dhbi9wY2kyMDBzeW4uYz0yMjc9c3RhdGljIHZvaWQgcGNpMjAwX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3BjaTIwMHN5bi5jLTIzMy1cXHRcXHRpZiAoY2FyZC1cXHUwMDNlcG9ydHNbaV0uY2FyZClcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmM6MjM0OlxcdFxcdFxcdHVucmVnaXN0ZXJfaGRsY19kZXZpY2UoY2FyZC1cXHUwMDNlcG9ydHNbaV0ubmV0ZGV2KTtcXG5kcml2ZXJzL25ldC93YW4vcGNpMjAwc3luLmMtMjM1LVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmM9NDg2PXN0YXRpYyB2b2lkIHdhbnhsX3BjaV9yZW1vdmVfb25lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvd2FuL3dhbnhsLmMtNDkxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBjYXJkLVxcdTAwM2VuX3BvcnRzOyBpKyspIHtcXG5kcml2ZXJzL25ldC93YW4vd2FueGwuYzo0OTI6XFx0XFx0dW5yZWdpc3Rlcl9oZGxjX2RldmljZShjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbmRyaXZlcnMvbmV0L3dhbi93YW54bC5jLTQ5My1cXHRcXHRmcmVlX25ldGRldihjYXJkLVxcdTAwM2Vwb3J0c1tpXS5kZXYpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oZGxjLmg9NTc9aW50IGhkbGNfaW9jdGwoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlmX3NldHRpbmdzICppZnMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjAtI2RlZmluZSByZWdpc3Rlcl9oZGxjX2RldmljZShkZXYpXFx0cmVnaXN0ZXJfbmV0ZGV2KGRldilcXG5pbmNsdWRlL2xpbnV4L2hkbGMuaDo2MTp2b2lkIHVucmVnaXN0ZXJfaGRsY19kZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuaW5jbHVkZS9saW51eC9oZGxjLmgtNjItXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjM5LjE1OTk5MzU1OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MDY3MjQxMTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhpcyBQYXRjaCoqXG5cbk9rYXksIHNvIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCwgbXkgaW5pdGlhbCB0aG91Z2h0cyBhcmUgdGhhdCBhbGwgY2FsbHMgdG8gYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgIGFyZSBkZWZpbml0ZWx5IHJlbGF0ZWQgdG8gcGxhdGZvcm0tc3BlY2lmaWMgaGFyZHdhcmUgcmVtb3ZhbCBhbmQgY2xlYW51cCBwcm9jZWR1cmVzLCB0YXJnZXRpbmcgcGh5c2ljYWwgaGFyZHdhcmUgdGhhdCBpc24ndCBlbXVsYXRlZCBpbiB0eXBpY2FsIFFFTVUgc2V0dXBzLiBUaGVuIHRoZXJlJ3MgdGhlIGBmc2xfdWNjX2hkbGMuY2AgZmlsZTsgaXQncyBleGNsdXNpdmVseSBmb3IgdGhlIEZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgaGFyZHdhcmUsIHdoaWNoIGlzIGEgUG93ZXJQQy9lbWJlZGRlZCBTb0Mgc3BlY2lmaWMgZGV2aWNlLiBTaW5jZSB0aGUgc3lzdGVtIEknbSB3b3JraW5nIHdpdGggaXMgYW1kNjQtYmFzZWQgYW5kIHVzZXMgc3RhbmRhcmQgdmlydHVhbGl6YXRpb24sIHRoYXQgaGFyZHdhcmUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIG15IHRlc3RpbmcgZW52aXJvbm1lbnQuXG5cbkxldCdzIGRvIGEgcXVpY2sgZG91YmxlLWNoZWNrIHRvIGNvbmZpcm06XG5cbiogICBgV29ydGhGdXp6aW5nYDogRmFsc2UuIE1ha2VzIHNlbnNlOyB0aGlzIGNvZGUgaXNuJ3QgcmVsZXZhbnQgdG8gbXkgc2V0dXAuXG4qICAgYFJlYXNvbmluZ2A6IFRoZSBjaGFuZ2VzIGFyZSBmb2N1c2VkIG9uIHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgZHJpdmVyIChgZnNsX3VjY19oZGxjLmNgKSBhbmQgdGhlIGRldmljZSB1bnJlZ2lzdHJhdGlvbiBoZWxwZXIgYHVucmVnaXN0ZXJfaGRsY19kZXZpY2VgLiBUaGUgUVVJQ0MgRW5naW5lIGlzIHBsYXRmb3JtLXNwZWNpZmljIGFuZCBub3QgZm91bmQgaW4gbXkgeDg2L1FFTVUgZW52aXJvbm1lbnQuIFRoZSB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiBpcyBvbmx5IHVzZWQgd2hlbiByZW1vdmluZyBvciBjbGVhbmluZyB1cCBub24tZW11bGF0ZWQgcGh5c2ljYWwgV0FOL0hETEMgUENJL0lTQS9wbGF0Zm9ybSBkcml2ZXJzLiBTbywgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIG1ha2VzIHNlbnNlLlxuKiAgIGBFbmFibGVDb25maWdzYDogRW1wdHkuIE5vIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgbmVlZGVkIGhlcmUuXG4qICAgYEZvY3VzU3ltYm9sc2A6IEVtcHR5LiBObyBzcGVjaWZpYyBzeW1ib2xzIHRvIHRyYWNrLlxuXG5SaWdodCwgYWxsIGNsZWFyLiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYCBhbmQgbW92ZSBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc2OTEsIk91dHB1dFRva2VucyI6MTg2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjkyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTExVDAwOjEzOjQzLjIyNzIzNzIzNVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIGNoYW5nZXMgbW9kaWZ5IHRoZSBGcmVlc2NhbGUgUVVJQ0MgRW5naW5lIEhETEMgcGxhdGZvcm0gZHJpdmVyIChkcml2ZXJzL25ldC93YW4vZnNsX3VjY19oZGxjLmMpIGFuZCB0aGUgZ2VuZXJpYyBIRExDIHVucmVnaXN0cmF0aW9uIGZ1bmN0aW9uIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgKGRyaXZlcnMvbmV0L3dhbi9oZGxjLmMpLiBUaGUgZnNsX3VjY19oZGxjIGRyaXZlciBpcyBzcGVjaWZpYyB0byBGcmVlc2NhbGUvTlhQIFNvQyBjb3Byb2Nlc3NvciBoYXJkd2FyZSBhbmQgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBvbiBhbWQ2NC4gVGhlIHVucmVnaXN0ZXJfaGRsY19kZXZpY2UgaGVscGVyIGlzIGV4Y2x1c2l2ZWx5IGNhbGxlZCBkdXJpbmcgZHJpdmVyIHJlbW92ZSBhbmQgbW9kdWxlIGV4aXQgcm91dGluZXMgZm9yIHBoeXNpY2FsIFdBTiBoYXJkd2FyZSBjb250cm9sbGVycyAoRmFyc3luYywgd2FuWEwsIFBDMzAwLCBldGMuKSB0aGF0IGFyZSBub3QgZW11bGF0ZWQgaW4gUUVNVS4gQ29uc2VxdWVudGx5LCB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBjaGFuZ2VzIG1vZGlmeSB0aGUgRnJlZXNjYWxlIFFVSUNDIEVuZ2luZSBIRExDIHBsYXRmb3JtIGRyaXZlciAoZHJpdmVycy9uZXQvd2FuL2ZzbF91Y2NfaGRsYy5jKSBhbmQgdGhlIGdlbmVyaWMgSERMQyB1bnJlZ2lzdHJhdGlvbiBmdW5jdGlvbiB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIChkcml2ZXJzL25ldC93YW4vaGRsYy5jKS4gVGhlIGZzbF91Y2NfaGRsYyBkcml2ZXIgaXMgc3BlY2lmaWMgdG8gRnJlZXNjYWxlL05YUCBTb0MgY29wcm9jZXNzb3IgaGFyZHdhcmUgYW5kIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgb24gYW1kNjQuIFRoZSB1bnJlZ2lzdGVyX2hkbGNfZGV2aWNlIGhlbHBlciBpcyBleGNsdXNpdmVseSBjYWxsZWQgZHVyaW5nIGRyaXZlciByZW1vdmUgYW5kIG1vZHVsZSBleGl0IHJvdXRpbmVzIGZvciBwaHlzaWNhbCBXQU4gaGFyZHdhcmUgY29udHJvbGxlcnMgKEZhcnN5bmMsIHdhblhMLCBQQzMwMCwgZXRjLikgdGhhdCBhcmUgbm90IGVtdWxhdGVkIGluIFFFTVUuIENvbnNlcXVlbnRseSwgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTFUMDA6MTM6NDMuMjI3MjYzMTM1WiIsIlNlcSI6MzUsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowplwzd[1] Phase: Running StartedAt: 2026-09-11 00:13:54 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowplwzd[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-09-11 00:13:54 +0000 UTC FinishedAt: 2026-09-11 00:13: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,}