Name: series-workflowkfx65 Phase: Succeeded StartedAt: 2026-07-27 19:29:14 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[0] Phase: Succeeded StartedAt: 2026-07-27 19:29:14 +0000 UTC FinishedAt: 2026-07-27 19:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[0].run-triage Phase: Succeeded StartedAt: 2026-07-27 19:29:14 +0000 UTC FinishedAt: 2026-07-27 19:52:40 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "40f780a3-575e-4062-91a3-3f9724d548e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dibs_lo_unregister_dmb", "dibs_lo_attach_dmb", "dibs_lo_detach_dmb", "smc_ism_unregister_dmb", "smc_ism_attach_dmb", "smc_ism_detach_dmb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWImIzM0OywKICAgICYjMzQ7ZGlic19sb19hdHRhY2hfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fZGV0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O3NtY19pc21fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBESUJTIGxvb3BiYWNrIGRyaXZlciAoZGlic19sb29wYmFjay5jKS4gVGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSB1c2VkIGJ5IHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGZvciBpbnRyYS1PUyBjb21tdW5pY2F0aW9uLiBTaW5jZSBpdCBpcyBzb2Z0d2FyZS1lbXVsYXRlZCwgaXQgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoL2RldGFjaC91bnJlZ2lzdGVyIERNQiBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmI1NWE5MGIwY2M5N2JkNmE0ZmUyMjAwNzZmY2RmMDEyNGY1Nzc4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjQ5OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5pbmRleCAwZjJlMDkzMTExNTI2Yi4uZmQ1Y2FmMWUxOWE4ZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5AQCAtMTE4LDE0ICYjNDM7MTE4LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXG4mIzQzO3N0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbiB7XG4tXHQvKiByZW1vdmUgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbi1cdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuLVxuIFx0Y2xlYXJfYml0KGRtYl9ub2RlLVx1MDAzZXNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKTtcbiBcdGZvbGlvX3B1dCh2aXJ0X3RvX2ZvbGlvKGRtYl9ub2RlLVx1MDAzZWNwdV9hZGRyKSk7XG4gXHRrZnJlZShkbWJfbm9kZSk7XG5AQCAtMTM5LDI3ICYjNDM7MTM0LDMzIEBAIHN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuIFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xuIFx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRib29sIGxhc3Q7XG4gXG4gXHRsZGV2ID0gZGlicy1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdC8qIGZpbmQgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLVx1MDAzZWRtYl90b2spIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IGRtYi1cdTAwM2VkbWJfdG9rKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4tXHRpZiAoIWRtYl9ub2RlKVxuJiM0MztcdGlmICghZG1iX25vZGUpIHtcbiYjNDM7XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbiYjNDM7XHRpZiAobGFzdClcbiYjNDM7XHRcdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcbi1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdGlmIChsYXN0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXHUwMDNlc2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiYjNDM7XHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCwxNCAmIzQzOzE4OSw5IEBAIHN0YXRpYyBpbnQgZGlic19sb19hdHRhY2hfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjNDM7XHRyZWZjb3VudF9pbmMoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbiBcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFxuLVx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSlcbi1cdFx0LyogdGhlIGRtYiBpcyBiZWluZyB1bnJlZ2lzdGVyZWQsIGJ1dCBoYXNcbi1cdFx0ICogbm90IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIHRhYmxlLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKiBwcm92aWRlIGRtYiBpbmZvcm1hdGlvbiAqL1xuIFx0ZG1iLVx1MDAzZWlkeCA9IGRtYl9ub2RlLVx1MDAzZXNiYV9pZHg7XG4gXHRkbWItXHUwMDNlZG1iX3RvayA9IGRtYl9ub2RlLVx1MDAzZXRva2VuO1xuQEAgLTIwOSwxMSAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcbiB7XG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4mIzQzO1x0Ym9vbCBsYXN0O1xuIFxuIFx0bGRldiA9IGRpYnMtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHQvKiBmaW5kIGRtYl9ub2RlIGFjY29yZGluZyB0byBkbWItXHUwMDNlZG1iX3RvayAqL1xuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgdG9rZW4pIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IHRva2VuKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbkBAIC0yMjEsMTMgJiM0MzsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG4gXHRcdH1cbiBcdH1cbiBcdGlmICghZG1iX25vZGUpIHtcbi1cdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4mIzQzO1x0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4mIzQzO1x0bGFzdCA9IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpO1xuJiM0MztcdGlmIChsYXN0KVxuJiM0MztcdFx0aGFzaF9kZWwoXHUwMDI2ZG1iX25vZGUtXHUwMDNlbGlzdCk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAobGFzdClcbiYjNDM7XHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFxuLVx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpKVxuLVx0XHRfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2xvX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtkaWJzX2xvX2RldGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV9kZXRhY2hfZG1iJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiNTVhOTBiMGNjOTdiZDZhNGZlMjIwMDc2ZmNkZjAxMjRmNTc3OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxOTo0OToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jCmluZGV4IDBmMmUwOTMxMTE1MjZiLi5mZDVjYWYxZTE5YThmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jCkBAIC0xMTgsMTQgJiM0MzsxMTgsOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LAotCQkJCSAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKQomIzQzO3N0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKQogewotCS8qIHJlbW92ZSBkbWIgZnJvbSBoYXNoIHRhYmxlICovCi0Jd3JpdGVfbG9ja19iaCgmYW1wO2xkZXYtJmd0O2RtYl9odF9sb2NrKTsKLQloYXNoX2RlbCgmYW1wO2RtYl9ub2RlLSZndDtsaXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7Ci0KIAljbGVhcl9iaXQoZG1iX25vZGUtJmd0O3NiYV9pZHgsIGxkZXYtJmd0O3NiYV9pZHhfbWFzayk7CiAJZm9saW9fcHV0KHZpcnRfdG9fZm9saW8oZG1iX25vZGUtJmd0O2NwdV9hZGRyKSk7CiAJa2ZyZWUoZG1iX25vZGUpOwpAQCAtMTM5LDI3ICYjNDM7MTM0LDMzIEBAIHN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKQogCXN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTsKIAlzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCBsYXN0OwogCiAJbGRldiA9IGRpYnMtJmd0O2Rydl9wcml2OwogCiAJLyogZmluZCBkbWIgZnJvbSBoYXNoIHRhYmxlICovCi0JcmVhZF9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwl3cml0ZV9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUobGRldi0mZ3Q7ZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLSZndDtkbWJfdG9rKSB7CiAJCWlmICh0bXBfbm9kZS0mZ3Q7dG9rZW4gPT0gZG1iLSZndDtkbWJfdG9rKSB7CiAJCQlkbWJfbm9kZSA9IHRtcF9ub2RlOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7Ci0JaWYgKCFkbWJfbm9kZSkKJiM0MzsJaWYgKCFkbWJfbm9kZSkgewomIzQzOwkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7ZG1iX25vZGUtJmd0O3JlZmNudCk7CiYjNDM7CWlmIChsYXN0KQomIzQzOwkJaGFzaF9kZWwoJmFtcDtkbWJfbm9kZS0mZ3Q7bGlzdCk7CiYjNDM7CXdyaXRlX3VubG9ja19iaCgmYW1wO2xkZXYtJmd0O2RtYl9odF9sb2NrKTsKIAotCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtkbWJfbm9kZS0mZ3Q7cmVmY250KSkgewomIzQzOwlpZiAobGFzdCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2RpYnMtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGlicy0mZ3Q7ZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS0mZ3Q7c2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2RpYnMtJmd0O2xvY2ssIGZsYWdzKTsKIAotCQlfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpOwomIzQzOwkJZGlic19sb19mcmVlX2RtYihsZGV2LCBkbWJfbm9kZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4LDE0ICYjNDM7MTg5LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX2F0dGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYikKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7ZG1iX25vZGUtJmd0O3JlZmNudCk7CiAJcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiAKLQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2RtYl9ub2RlLSZndDtyZWZjbnQpKQotCQkvKiB0aGUgZG1iIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCwgYnV0IGhhcwotCQkgKiBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUuCi0JCSAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIHByb3ZpZGUgZG1iIGluZm9ybWF0aW9uICovCiAJZG1iLSZndDtpZHggPSBkbWJfbm9kZS0mZ3Q7c2JhX2lkeDsKIAlkbWItJmd0O2RtYl90b2sgPSBkbWJfbm9kZS0mZ3Q7dG9rZW47CkBAIC0yMDksMTEgJiM0MzsyMDUsMTIgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pCiB7CiAJc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlOwogCXN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjsKJiM0MzsJYm9vbCBsYXN0OwogCiAJbGRldiA9IGRpYnMtJmd0O2Rydl9wcml2OwogCiAJLyogZmluZCBkbWJfbm9kZSBhY2NvcmRpbmcgdG8gZG1iLSZndDtkbWJfdG9rICovCi0JcmVhZF9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwl3cml0ZV9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUobGRldi0mZ3Q7ZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgdG9rZW4pIHsKIAkJaWYgKHRtcF9ub2RlLSZndDt0b2tlbiA9PSB0b2tlbikgewogCQkJZG1iX25vZGUgPSB0bXBfbm9kZTsKQEAgLTIyMSwxMyAmIzQzOzIxOCwxNyBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbikKIAkJfQogCX0KIAlpZiAoIWRtYl9ub2RlKSB7Ci0JCXJlYWRfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiYjNDM7CWxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtkbWJfbm9kZS0mZ3Q7cmVmY250KTsKJiM0MzsJaWYgKGxhc3QpCiYjNDM7CQloYXNoX2RlbCgmYW1wO2RtYl9ub2RlLSZndDtsaXN0KTsKJiM0MzsJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwomIzQzOwlpZiAobGFzdCkKJiM0MzsJCWRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpOwogCi0JaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2RtYl9ub2RlLSZndDtyZWZjbnQpKQotCQlfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWJzIExvb3BiYWNrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGl0cyBEaWJzIE1lc3NhZ2UgQmxvY2sgKERNQikgbm9kZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhvc2Ugbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGhhc2ggdGFibGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgZml4LgoKVGhlIGtleSBjaGFuZ2UgSSBzZWUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGByZWFkX2xvY2tfYmhgIHdpdGggYHdyaXRlX2xvY2tfYmhgIGluIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAgd2hlbiBsb2NhdGluZyB0aGUgRE1CIG5vZGUuIFRoZSBoYXNoIHRhYmxlIGRlbGV0aW9uIGFsc28gbm93IG9jY3VycyB3aXRoaW4gdGhlIHdyaXRlIGxvY2sgb25seSBpZiBgcmVmY291bnRfZGVjX2FuZF90ZXN0YCB5aWVsZHMgYSBgdHJ1ZWAgdmFsdWUuIFRoaXMgaXMgYSB2ZXJ5IHNpZ25pZmljYW50IGNoYW5nZTsgaXQgc2hvd3MgdGhlIGludGVudCB0byBtYWtlIHRoZXNlIG9wZXJhdGlvbnMgdGhyZWFkLXNhZmUgaW4gYSBtb3JlIHJvYnVzdCB3YXkgYnkgdGFraW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgdW5yZWdpc3RyYXRpb24gYW5kIGRldGFjaGluZy4gQWxzbywgdGhlIHJlbW92YWwgb2YgYF9fZGlic19sb191bnJlZ2lzdGVyX2RtYmAgYW5kIGl0cyByZXBsYWNlbWVudCB3aXRoIGBkaWJzX2xvX2ZyZWVfZG1iYCBpbmRpY2F0ZXMgcG90ZW50aWFsIHNpbXBsaWZpY2F0aW9uIG9yIHBlcmhhcHMgYSBzaGlmdCBpbiByZXNwb25zaWJpbGl0eSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4KCkluIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCB0aGUgY2hhbmdlIGZyb20gYHJlZmNvdW50X2luY19ub3RfemVyb2AgdG8gYHJlZmNvdW50X2luY2Agd2l0aGluIHRoZSByZWFkIGxvY2sgYWxzbyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGNvdWxkIGJlIG9wdGltaXphdGlvbiBhcyBgcmVmY291bnRfaW5jYCBpcyBzaW1wbGVyIG9yIGlzIHVzZWQgdG8gZ3VhcmFudGVlIGFuIGluY3JlbWVudCBldmVuIGlmIHRoZSBjb3VudCBpcyB6ZXJvLCBwZXJoYXBzIGJlY2F1c2UgdGhlIGNvZGUgZXhwZWN0cyB0aGUgY291bnQgdG8gYmUgemVybyBpbiB0aGlzIHNwZWNpZmljIHBvaW50LgoKQmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIERpYnMgc3Vic3lzdGVtIGFjdHVhbGx5IGRvZXMsIHdoYXQgaXRzIHB1cnBvc2UgaXMsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdldHRpbmcgYSBoYW5kbGUgb24gaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhlIGRlZmluaXRpb24gb2YgdGhlIGBkaWJzYCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGRpYnMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIHRoaXMgYGRpYnNgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBvcGVuIHVwIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9ucy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcywgcGxhdGZvcm0gc3BlY2lmaWNzLCBhbmQgYW55IG90aGVyIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBkcml2ZXIuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgbWFnaWMgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgRElCU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgblxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuICAgNzpcdFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xuICAgODpcdFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cbiAgMTE6XHRcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxuICAxMjpcdFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgRElCU19MT1xuICAxNTpcdFx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gRElCU1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbiAgMjA6XHRcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxuICAyMTpcdFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxuICAyMjpcdFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXG4gIDIzOlx0XHQgIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRElCUyBMb29wYmFjayoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHR3byBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZTogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBgRElCU19MT2AgLSB0aGF0JiMzOTtzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBESUJTIGRldmljZS4gSXQgbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGF0YSB0cmFuc2ZlcnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGxvb3BiYWNrIGZlYXR1cmUgaXMgYnJpbGxpYW50IGZvciBjb252ZW5pZW50IHRlc3Rpbmcgb2YgRElCUyBjbGllbnRzLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luIGZvciBwb3J0YWJpbGl0eSBpbiBvdXIgdGVzdGluZy4KClRoaXMgYERJQlNfTE9gIGlzICpwcmVjaXNlbHkqIHRoZSBraW5kIG9mIHRhcmdldCB3ZSB3YW50IHRvIGhpdCB3aXRoIGZ1enppbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTG93LWhhbmdpbmcgZnJ1aXQsIG1pbmltYWwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHRvIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGJ5IHRoaXMgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBwb2tlIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfbG9fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNTpzdGF0aWMgY29uc3QgY2hhciBkaWJzX2xvX2Rldl9uYW1lW10gPSBcJiMzNDtsb1wmIzM0OztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjYtLyogZ2xvYmFsIGxvb3BiYWNrIGRldmljZSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzpzdGF0aWMgc3RydWN0IGRpYnNfbG9fZGV2ICpsb19kZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyOTpzdGF0aWMgdTE2IGRpYnNfbG9fZ2V0X2ZhYnJpY19pZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDpzdGF0aWMgaW50IGRpYnNfbG9fcXVlcnlfcmdpZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIGNvbnN0IHV1aWRfdCAqcmdpZCxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUtXHRcdFx0ICAgICAgdTMyIHZpZF92YWxpZCwgdTMyIHZpZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQyLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo0MzpzdGF0aWMgaW50IGRpYnNfbG9fbWF4X2RtYnModm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDQte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDctXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQ4OnN0YXRpYyBpbnQgZGlic19sb19yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDktXHRcdFx0XHRzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTAte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MTpcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSwgKnRtcF9ub2RlO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MjpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTMtXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTIwLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjE6c3RhdGljIHZvaWQgZGlic19sb19mcmVlX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEyMjpcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTIzLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEzMS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTMyOnN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzQ6XHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEzNTpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTM2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2Mi1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYzOlx0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY0LVx0fVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjg6c3RhdGljIGludCBkaWJzX2xvX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2OS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzItXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3MzpzdGF0aWMgaW50IGRpYnNfbG9fYXR0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzQte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNzU6XHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3NjpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTc3LVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjAzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMDQ6c3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwNS17XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIwNjpcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjA3Olx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMDgtXHRib29sIGxhc3Q7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMjktXHRpZiAobGFzdClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjMwOlx0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjMxLVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM0LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzU6c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMzYtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LCBib29sIHNmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM4LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjM5Olx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKnJtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNDA6XHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0MS1cdHUxNiBzX21hc2s7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzktXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4MDpzdGF0aWMgY29uc3Qgc3RydWN0IGRpYnNfZGV2X29wcyBkaWJzX2xvX29wcyA9IHtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjgxOlx0LmdldF9mYWJyaWNfaWQgPSBkaWJzX2xvX2dldF9mYWJyaWNfaWQsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4MjpcdC5xdWVyeV9yZW1vdGVfZ2lkID0gZGlic19sb19xdWVyeV9yZ2lkLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODM6XHQubWF4X2RtYnMgPSBkaWJzX2xvX21heF9kbWJzLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODQ6XHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NTpcdC51bnJlZ2lzdGVyX2RtYiA9IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NjpcdC5tb3ZlX2RhdGEgPSBkaWJzX2xvX21vdmVfZGF0YSxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6Mjg3Olx0LnN1cHBvcnRfbW1hcHBlZF9yZG1iID0gZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHksXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4ODpcdC5hdHRhY2hfZG1iID0gZGlic19sb19hdHRhY2hfZG1iLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODk6XHQuZGV0YWNoX2RtYiA9IGRpYnNfbG9fZGV0YWNoX2RtYixcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjkwLX07XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5MS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjkyOnN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X2luaXQoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2KVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yOTMte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjk5LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMDA6c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwMS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMDUtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwNjpzdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwNy17XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwODpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzA5LVx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzIzLVx0ZGlicy1cdTAwM2VkcnZfcHJpdiA9IGxkZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMyNDpcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyNS1cdHV1aWRfZ2VuKFx1MDAyNmRpYnMtXHUwMDNlZ2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzI2Olx0ZGlicy1cdTAwM2VvcHMgPSBcdTAwMjZkaWJzX2xvX29wcztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzI3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjgtXHRkaWJzLVx1MDAzZWRldi5wYXJlbnQgPSBOVUxMO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjk6XHRkZXZfc2V0X25hbWUoXHUwMDI2ZGlicy1cdTAwM2VkZXYsIFwmIzM0OyVzXCYjMzQ7LCBkaWJzX2xvX2Rldl9uYW1lKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMwLVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQ1LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDY6c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0Ny17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTEtXHRkaWJzX2Rldl9kZWwobG9fZGV2LVx1MDAzZWRpYnMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTI6XHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1My1cdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzU5PWludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzYxOlx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Mi19XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNjQ9dm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzY1LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzY2Olx0ZGlic19sb19kZXZfcmVtb3ZlKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgZGlicyBGcmFtZXdvcmsgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGRpYnNgIGZyYW1ld29yayB3b3Jrcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBEeW5hbWljIE1lbW9yeSBCdWZmZXJzIChETUJzKSBhcmUgbWFuYWdlZC4gSXQgbG9va3MgbGlrZSBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUsIGFuZCB0aGV5JiMzOTtyZSBhbGwgYnVuZGxlZCB0b2dldGhlciB3aXRoaW4gYGRpYnNfbG9fb3BzYC4gVGhhdCBgZGlic19sb19vcHNgIHN0cnVjdHVyZSBpcyB0aGVuIGFzc2lnbmVkIHRvIGBkaWJzLSZndDtvcHNgLiBTbywgdGhlIGBkaWJzYCBmcmFtZXdvcmsgZXNzZW50aWFsbHkgdXNlcyB0aGlzIHNldCBvZiBvcGVyYXRpb25zLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUsIGdpdmVuIGl0cyBkZXNpZ24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGEgd2VsbC1zdHJ1Y3R1cmVkIGRyaXZlciBvciBmcmFtZXdvcmsuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgRE1CcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgY29yZSBgZGlic2AgY29kZS4gVGhlcmVmb3JlLCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzLiBXaGVyZSBpcyBgZGlicy0mZ3Q7b3BzLSZndDt1bnJlZ2lzdGVyX2RtYmAgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFRoYXTigJlzIHdoZXJlIEkmIzM5O2xsIGdldCB0byBzZWUgdGhlIGFjdHVhbCBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgdGhlIERNQiB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIGFzIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBtb3N0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V1bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBvdGVudGlhbCBEZS1SZWdpc3RyYXRpb24gRnVuY3Rpb24qKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkZS1yZWdpc3RyYXRpb24sIHNvIGEgY2FuZGlkYXRlIGZ1bmN0aW9uIGp1bXBzIHRvIG1pbmQ6IGBvcHMtJmd0O3VucmVnaXN0ZXJfZG1iYC4gSXQmIzM5O3MgYSBwbGF1c2libGUgY29udGVuZGVyLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIGNvbnRleHQsIHRob3VnaCwgYmVmb3JlIEkgY29tbWl0IHRvIGl0IGJlaW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nLCBhbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRldGFpbHMgb2YgdGhhdCBzdWJzeXN0ZW0uLi4gaXMgdGhpcyBhYm91dCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50PyBJZiBzbywgdGhpcyBmdW5jdGlvbiBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4uIEFsc28gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBvdGhlciBkbWIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBkaWJzIERyaXZlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHVucmVnaXN0ZXJfZG1iYC4gR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIGRldmljZSBkcml2ZXJzLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBjaGVjayBpcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSB0ZXJtIGBkbWJgIChEZXZpY2UgTWVtb3J5IEJhcnJpZXIpIGFuZCBkcml2ZXJzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5yZWdpc3Rlcl9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTIxPXN0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTMxLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEzMy17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yODA9c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yODQtXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NTpcdC51bnJlZ2lzdGVyX2RtYiA9IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4Ni1cdC5tb3ZlX2RhdGEgPSBkaWJzX2xvX21vdmVfZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGB1bnJlZ2lzdGVyX2RtYmAgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHVucmVnaXN0ZXJfZG1iYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGV4cGxpY2l0bHkgY2FsbGVkIGFueXdoZXJlIHdpdGhpbiBpdC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IHVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYSBmdW5jdGlvbiBsaWtlIHRoYXQgdG8gYmUgcGFpcmVkIHdpdGggaXRzIGNvdW50ZXJwYXJ0LCBsaWtlIGEgcmVnaXN0ZXIvdW5yZWdpc3RlciBwYWlyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gc2VlICp3aGVyZSogaXQgaXMgYmVpbmcgY2FsbGVkLCBhcyBpZiBpdCBpc24mIzM5O3Qgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGl0IG11c3QgZXhpc3QgYXMgYSBwdWJsaWMgbWV0aG9kLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXM6IGBpbmNsdWRlL2xpbnV4L2RpYnMuaGAgYW5kIGBpbmNsdWRlL25ldC9kaWJzLmhgLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBhbnl0aGluZyBzaW1pbGFyIHRoYXQgbWlnaHQgY29udGFpbiB0aGUgcHJvdG90eXBlLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRldmljZSBtYW5hZ2VtZW50IGJsb2NrIGlzIGJlaW5nIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGVzZSBoZWFkZXJzIHJldmVhbC4gSSBiZXQgaXQgaXMgbG9jYXRlZCB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5yZWdpc3Rlcl9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc0LVx0LyoqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyNzU6XHQgKiB1bnJlZ2lzdGVyX2RtYigpIC0gdW5yZWdpc3RlciBhbmQgZnJlZSBhIGRtYlxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc2LVx0ICogQGRldjogZGlicyBkZXZpY2Vcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yODUtXHQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjI4NjpcdGludCAoKnVucmVnaXN0ZXJfZG1iKShzdHJ1Y3QgZGlic19kZXYgKmRldiwgc3RydWN0IGRpYnNfZG1iICpkbWIpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMjg3LVx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIGRpYnNfZGV2X29wcyBzdHJ1Y3R1cmUgYW5kIHVucmVnaXN0ZXJfZG1iIGNhbGwqKgoKT2theSwgc28gYGRpYnNfZGV2X29wc2AgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9kaWJzLmhgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBwdXR0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIGEgaGVhZGVyIGZpbGUgZm9yIG90aGVyIG1vZHVsZXMgdG8gdXNlLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgd2hvIGNhbGxzIGB1bnJlZ2lzdGVyX2RtYmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyB0aGluZy4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGlzIGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgdXNlIGlzIG1vcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNhbGwgcGFydCBvZiB0aGUgbW9kdWxlIHRlYXJkb3duPyBJcyBpdCBjYWxsZWQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkPyBPciBpcyBpdCBtb3JlIGR5bmFtaWMgdGhhbiB0aGF0PyBUaGUgZmFjdCB0aGF0IEkgZG9uJiMzOTt0IGluc3RhbnRseSBrbm93IHdoZXJlIHRvIGxvb2sgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc28gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyB0byB0cmFjZSBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC4gVGhhdCBgdW5yZWdpc3Rlcl9kbWJgIGNhbGwgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGlic19kZXZfb3BzYCBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGxhcmdlciBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V1bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yMTU9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqc21jZCxcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yMjktXG5uZXQvc21jL3NtY19pc20uYzoyMzA6XHRzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iKHNtY2QtXHUwMDNlZGlicywgXHUwMDI2ZG1iKTtcbm5ldC9zbWMvc21jX2lzbS5jLTIzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gdGhlIFNNQyBEZXRhY2htZW50IExvZ2ljKioKClJpZ2h0LCBzbyBJIHNlZSBgbmV0L3NtYy9zbWNfaXNtLmNgIGlzIGNhbGxpbmcgYHNtY2QtJmd0O2RpYnMtJmd0O29wcy0mZ3Q7dW5yZWdpc3Rlcl9kbWJgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXTigJlzIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgZGVkaWNhdGVkIG1lbW9yeSBidWZmZXIgKERNQikgdGhhdCYjMzk7cyBrZXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBob3cgdGhlIERNQiBpcyAqYXR0YWNoZWQqIGFuZCAqZGV0YWNoZWQqLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIg4oCTIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXR0YWNoX2RtYmAgYW5kIGBkZXRhY2hfZG1iYCBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYHVucmVnaXN0ZXJfZG1iYCBhbmQgdWx0aW1hdGVseSB3aGF0IHRoaXMgdGVsbHMgbWUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VhdHRhY2hfZG1iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2lzbS5jPTI3MD1pbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjc1LVxubmV0L3NtYy9zbWNfaXNtLmM6Mjc2Olx0aWYgKCFkZXYtXHUwMDNlZGlicy1cdTAwM2VvcHMtXHUwMDNlYXR0YWNoX2RtYilcbm5ldC9zbWMvc21jX2lzbS5jLTI3Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjgwLVx0ZG1iLmRtYl90b2sgPSB0b2tlbjtcbm5ldC9zbWMvc21jX2lzbS5jOjI4MTpcdHJjID0gZGV2LVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZWF0dGFjaF9kbWIoZGV2LVx1MDAzZWRpYnMsIFx1MDAyNmRtYik7XG5uZXQvc21jL3NtY19pc20uYy0yODItXHRpZiAoIXJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTMyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlLCBhbmQgc3RhcnRpbmcgd2l0aCBhIGJvbGRlZCBoZWFkZXI6CgoqKkFuYWx5emluZyBgZGV0YWNoX2RtYmAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXRhY2hfZG1iYCBjYWxsLi4uIGltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGxpa2VseSBpbXBhY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBHaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgRGlnaXRhbCBNZWRpYSBCdWZmZXIgKERNQiksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICp3aGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI/KiBJcyBpdCBpbiB1c2U/IElzIHRoZXJlIGEgcGVuZGluZyBvcGVyYXRpb24/IEFyZSBhbnkgY2xpZW50cyBjdXJyZW50bHkgcmVmZXJlbmNpbmcgaXQ/CgpJ4oCZbSBhbHJlYWR5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGxlYWtzIGlmIHRoaXMgYGRldGFjaGAgb3BlcmF0aW9uIGlzbiYjMzk7dCBoYW5kbGVkIGNhcmVmdWxseSwgb3IgcmFjZSBjb25kaXRpb25zIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgY29uY3VycmVudGx5LiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgYnVmZmVy4oCZcyBvd25lcnNoaXAgbW9kZWwg4oCTIElzIGl0IHJlZmVyZW5jZS1jb3VudGVkPyBEb2VzIGl0IGhhdmUgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgYnVmZmVycz8gSG93IGlzIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkPyBEb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIGFueSBtZXRhZGF0YSwgZmxhZ3MsIG9yIGhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXI/CgpUaGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdOKAmXMgc2V2ZXJpbmcgYSBsaW5rLCBicmVha2luZyBhbiBhc3NvY2lhdGlvbi4gQnV0ICp3aGljaCogbGluaz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lIGZvciB0aGF0IGxpbmtlZCBhc3NvY2lhdGlvbj8gVGhlIGNvbnRleHQgb2YgdGhlIGNhbGwgaXMgY3JpdGljYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgaGFuZGxlIHJlbGVhc2UsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wYWN0IHRvIGFzc29jaWF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcGVyaGFwcyB0aHJlYWQgc3luY2hyb25pemF0aW9uIHRoYXQgbWF5IGJlIGFmZmVjdGVkLgoKTXkgdGhvdWdodCBwcm9jZXNzIHF1aWNrbHkgc2hpZnRzIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoaXMgYGRldGFjaGAgZmFpbHM/IEFyZSBleGNlcHRpb25zIHRocm93biwgcmV0dXJuIGNvZGVzIHByb3ZpZGVkLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbSB1c2VkIHRvIHNpZ25hbCB0aGUgcHJvYmxlbT8gQW5kIGhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBhcHBsaWNhdGlvbj8gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciB1bmRlZmluZWQgYmVoYXZpb3I/CgpJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgcG9zc2libGUgY2FsbCBwYXRocyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLCB0cnlpbmcgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBgZGV0YWNoX2RtYmAgY2FsbCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciwgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgaG9wZWZ1bGx5IGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNlZGV0YWNoX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yOTM9aW50IHNtY19pc21fZGV0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuKVxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcbm5ldC9zbWMvc21jX2lzbS5jOjI5NTpcdGlmICghZGV2LVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZWRldGFjaF9kbWIpXG5uZXQvc21jL3NtY19pc20uYy0yOTYtXHRcdHJldHVybiAtRUlOVkFMO1xubmV0L3NtYy9zbWNfaXNtLmMtMjk3LVxubmV0L3NtYy9zbWNfaXNtLmM6Mjk4Olx0cmV0dXJuIGRldi1cdTAwM2VkaWJzLVx1MDAzZW9wcy1cdTAwM2VkZXRhY2hfZG1iKGRldi1cdTAwM2VkaWJzLCB0b2tlbik7XG5uZXQvc21jL3NtY19pc20uYy0yOTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIG5ldHdvcmtpbmcgYW5kIFNNQzoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBTTUMgb24gRElCUyoqCgpSaWdodCwgc28gYGRpYnNgIGlzIGEga2V5IGNvbmNlcHQgd2l0aGluIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIG9yIGBTTUNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0byBjaGVjayBgbmV0L3NtYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBTTUMgZmVhdHVyZXMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSYjMzk7bGwgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBpZiBgU01DYCBhY3R1YWxseSBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgRElCU2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlNNQyYjMzk7cyBEZXBlbmRlbmNpZXM6IFRpbWUgdG8gRGlnIEluKioKCk9rYXksIHNvIGBTTUNgIHJlbGllcyBvbiBgRElCU2A/IFRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYmV0dGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGlzIHRoZSBrZXksIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlOiBgbmV0L3NtYy9LY29uZmlnYC4gVGhpcyBmaWxlIGxpa2VseSBzcGVsbHMgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBvcHRpb25zLCBhbmQgaG93IHRoZXNlIHR3byBjb21wb25lbnRzLCBgU01DYCBhbmQgYERJQlNgLCBpbnRlcmFjdC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGluIGBLY29uZmlnYCB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZGVwZW5kZW5jeSBhbmQgd2hhdCBpdCBpbXBsaWVzIGFib3V0IHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGhvbGRzISBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgY2xhcmlmeSB0aGUgd2hvbGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IERJQlMgTG9vcGJhY2sgZm9yIFNNQyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGl0IG1vZGlmaWVzIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gVGhhdCYjMzk7cyBhIHNvZnR3YXJlIGxvb3BiYWNrIGRldmljZSBmb3IgYERJQlNgLCB3aGljaCwgbmF0dXJhbGx5LCBgU01DYCBkZXBlbmRzIG9uLiBUaGUgbG9vcGJhY2sgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19ESUJTX0xPYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50cy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBmaXhpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAuICBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGBTTUNgIHNvY2tldHMsIHRoaXMgcGF0Y2ggc2NyZWFtcyAmIzM0O2Z1enogbWUmIzM0OyEKCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IG91ciB0YXJnZXQgc3ltYm9scyBmb3IgZnV6emluZy4gV2UmIzM5O3ZlIGdvdDoKCiogICBgZGlic19sb19mcmVlX2RtYmAgKHN0YXRpYykKKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYWthIG9wcykKKiAgIGBkaWJzX2xvX2F0dGFjaF9kbWJgIChzdGF0aWMsIGJ1dCBjYWxsZWQgdmlhIG9wcykKKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgIChzdGF0aWMsIGJ1dCBjYWxsZWQgdmlhIG9wcykKCkkgd2FzIGluaXRpYWxseSBhIGJpdCBjb25jZXJuZWQgYWJvdXQgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBpbmxpbmVkIGFuZCB0aHVzIHVucmVhY2hhYmxlIGJ5IHN5emthbGxlci4gSG93ZXZlciwgc2luY2UgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgdG8gYGRpYnNfbG9fb3BzYCwgSSBjYW4gY29uY2x1ZGUgdGhhdCB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gYWRkaXRpb24sIEkgd2lsbCB2ZXJpZnkgdGhhdCBgc3l6a2FsbGVyYCBjYW4gdGFyZ2V0IHN1Y2ggZnVuY3Rpb25zLiBCdXQgcmVnYXJkbGVzcywgc2luY2UgdGhleSBhcmUgY2FsbGVkIHZpYSBvcHMsIHRhcmdldGluZyB0aGVzZSBmdW5jdGlvbnMgaXMgbGVzcyBpZGVhbCB0aGFuIHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLgoKU28sIHNpbmNlIHRoZXNlIGBkaWJzX2xvX2AgZnVuY3Rpb25zIGFyZSB1c2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgIGxvb2sgbGlrZSBzb2xpZCB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZmluZCB0aGUgYFNNQ2AgY291bnRlcnBhcnRzLiBBZnRlciBhIHF1aWNrIHNjYW4sIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgCiogICBgc21jX2lzbV9hdHRhY2hfZG1iYAoqICAgYHNtY19pc21fZGV0YWNoX2RtYmAKClRpbWUgdG8gY2hlY2sgaWYgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYz0xNDA5PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2ZyZWUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgaXNfZG1iLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNDE0LVx0XHRidWZfZGVzYy1cdTAwM2VsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNDE1Olx0XHRzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKGxnci1cdTAwM2VzbWNkLCBidWZfZGVzYyk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTQxNi1cdH0gZWxzZSB7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MTc5PWludCBzbWNfaXNtX3B1dF92bGFuKHN0cnVjdCBzbWNkX2RldiAqc21jZCwgdW5zaWduZWQgc2hvcnQgdmxhbmlkKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTIxNC1cbm5ldC9zbWMvc21jX2lzbS5jOjIxNTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxubmV0L3NtYy9zbWNfaXNtLmMtMjE2LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcbi0tXG5uZXQvc21jL3NtY19pc20uaD00OT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBidWZfc2l6ZSxcbm5ldC9zbWMvc21jX2lzbS5oLTUwLVx0XHRcdCBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XG5uZXQvc21jL3NtY19pc20uaDo1MTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIER5bmFtaWMgTWVtb3J5IEJhcnJpZXIgKERNQikgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzICpub3QqIGEgc3RhdGljIGVudGl0eS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE5vdywgd2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbj8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KClRoYXQgdGhlbiBicmluZ3MgdXAgcXVlc3Rpb25zIGFib3V0IGl0cyBjb3VudGVycGFydHMuIFdoYXQgYWJvdXQgYHNtY19pc21fYXR0YWNoX2RtYmAgYW5kIGBzbWNfaXNtX2RldGFjaF9kbWJgPyBBcmUgdGhleSBzaW1pbGFybHkgZHluYW1pYz8gQXJlIHRoZXkgYWxzbyBzdWJqZWN0IHRvIHRoZSBzYW1lIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBiYXNlZCBvbiB0aGVpciBsYWNrIG9mIHN0YXRpYyBzdGF0dXM/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGFuZCB1c2FnZSBwYXR0ZXJucz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBvZiBtZW1vcnkgYmFycmllcnMgaGVyZT8gSWYgc28sIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEkgbmVlZCB0byBleGFtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhyZWUgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBmdW5jdGlvbiBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBhbmFseXplIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MjU3Nz1pbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTkzLVx0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU5NDpcdHJjID0gc21jX2lzbV9hdHRhY2hfZG1iKHNtY2QsIHBlZXJfdG9rZW4sIGJ1Zl9kZXNjKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTk1LVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTI2MD1ib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yNjktXG5uZXQvc21jL3NtY19pc20uYzoyNzA6aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxubmV0L3NtYy9zbWNfaXNtLmMtMjcxLVx0XHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9NTM9Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTQ6aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxubmV0L3NtYy9zbWNfaXNtLmgtNTUtXHRcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgc21jX2lzbV9kZXRhY2hfZG1iYCoqCgpSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBpZGVhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHNtY19pc21fZGV0YWNoX2RtYmAgbGlrZWx5IGluZGljYXRlcyBhIHNwZWNpZmljIHN5c3RlbSBtYW5hZ2VtZW50IGNvbnRyb2xsZXIgKFNNQykgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZGV0YWNoaW5nIG9yIGRpc2Nvbm5lY3RpbmcgYSBkZXZpY2UsIHdpdGggbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGluZGljYXRlZCBieSBgZG1iYC4gVGhlIHVzZSBvZiBgaXNtYCBsaWtlbHkgaW1wbGllcyBhIG1lbW9yeSBpc29sYXRpb24gc3RyYXRlZ3kgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZWR1cmUuIFRoZSAmIzM0O2RldGFjaCYjMzQ7IHBhcnQgc3VnZ2VzdHMgc29tZXRoaW5nIGlzIGJlaW5nIHJlbW92ZWQsIHBlcmhhcHMgYSBwZXJpcGhlcmFsLCBvciBzb21lIHNlY3VyZSBjb250ZXh0IGlzIGJlaW5nIGRlYWN0aXZhdGVkLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBTTUMgaW50ZXJhY3Rpb25zLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGhhcmR3YXJlIG1hbnVhbHMsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBTTUMgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIE15IG1haW4gY29uY2VybiBpcyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIGluY29uc2lzdGVudCBtZW1vcnkgdmlld3MgZHVyaW5nIHRoZSBkZXRhY2ggcHJvY2Vzcy4gVGhlIGBkbWJgIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIGhlcmU7IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGJhcnJpZXIg4oCTIGlzIGl0IGEgZnVsbCBzeXN0ZW0gYmFycmllciwgb3IgYSBtb3JlIHNjb3BlZCBvbmU/IFVuZGVyc3RhbmRpbmcgdGhlIGJhcnJpZXImIzM5O3MgdHlwZSB3aWxsIGluZm9ybSBteSBhbmFseXNpcyBvZiBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyB2YXJpb3VzIHByb2Nlc3NvcnMsIG9yIHdpdGhpbiBhIHNwZWNpZmljIHNlY3VyaXR5IGNvbnRleHQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBtZW1vcnkgcmVnaW9ucyBpbnZvbHZlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZWQgZGF0YSwgRE1BIHRyYW5zZmVycywgb3Igc2hhcmVkIG1lbW9yeT8gVGhlc2UgZmFjdG9ycyB3aWxsIGRyaXZlIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZG1iYCBhZmZlY3RzIHN5bmNocm9uaXphdGlvbi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBXaGF0IGlmIHRoZSBkZXRhY2ggZmFpbHM/IERvZXMgdGhlIHN5c3RlbSBncmFjZWZ1bGx5IHJlY292ZXIsIG9yIGRvIHdlIHJpc2sgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gZW5zdXJlIHRoZSAmIzM0O2RldGFjaCYjMzQ7IG9wZXJhdGlvbiBjb21wbGV0ZXMgc2FmZWx5LCBwb3RlbnRpYWxseSB1c2luZyBzZW1hcGhvcmVzLCBtdXRleGVzIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVjaGFuaXNtcy4KCkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGluc3RydWN0aW9uIGlzIHRyaWdnZXJlZC4gSXMgaXQgc29mdHdhcmUtaW5pdGlhdGVkLCBvciBkb2VzIGl0IG9jY3VyIGluIHJlc3BvbnNlIHRvIHNvbWUgaGFyZHdhcmUgZXZlbnQ/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRyaWdnZXJzIHRoZSBjb21tYW5kIGFuZCB3aGF0IGFyZSB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wZXJhdGlvbiwgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBhIHNlY3VyZSBlbmNsYXZlIChpZiBwcmVzZW50KSwgYW5kIHdoYXQgYXJlIHRoZSBhc3NvY2lhdGVkIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSBkZXRhY2hlZCBkZXZpY2UsIGFuZCB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBkZXZpY2UgZHJpdmVycyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gQW55IHJlbGF0ZWQgY29kZSBpcyBjcml0aWNhbC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHRpZ2h0bHkgY29udHJvbGxlZCBzZXF1ZW5jZSB0byBtYWludGFpbiBzeXN0ZW0gaW50ZWdyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MTIwOD1zdGF0aWMgdm9pZCBzbWNkX2J1Zl9kZXRhY2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjE1LVxubmV0L3NtYy9zbWNfY29yZS5jOjEyMTY6XHRzbWNfaXNtX2RldGFjaF9kbWIoc21jZCwgcGVlcl90b2tlbik7XG5uZXQvc21jL3NtY19jb3JlLmMtMTIxNy1cbi0tXG5uZXQvc21jL3NtY19pc20uYz0yNzA9aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTI5Mi1cbm5ldC9zbWMvc21jX2lzbS5jOjI5MzppbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXG5uZXQvc21jL3NtY19pc20uYy0yOTQte1xuLS1cbm5ldC9zbWMvc21jX2lzbS5oPTU0PWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcbm5ldC9zbWMvc21jX2lzbS5oLTU1LVx0XHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTY6aW50IHNtY19pc21fZGV0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuKTtcbm5ldC9zbWMvc21jX2lzbS5oLTU3LWludCBzbWNfaXNtX3NpZ25hbF9zaHV0ZG93bihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDYxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRhcmdldGluZyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAKKiAgIGBkaWJzX2xvX2F0dGFjaF9kbWJgCiogICBgZGlic19sb19kZXRhY2hfZG1iYAoqICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgCiogICBgc21jX2lzbV9hdHRhY2hfZG1iYAoqICAgYHNtY19pc21fZGV0YWNoX2RtYmAKCk5vdywgdGhlIGNvbmZpZyBjaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIExldCYjMzk7cyBzZWUuLi4gYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYCBhcmUgdGhlIGtleSBvbmVzIGhlcmUuIFdhaXQgYSBtaW51dGUsIGBESUJTX0xPYCBpcyB0aGUgb25lIHRoYXQgcmVhbGx5IGFjdGl2YXRlcyBgZGlic19sb29wYmFjay5jYCwgcmlnaHQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBgRElCU19MT2AgaXMgc3VmZmljaWVudC4gT2theSwgSSBzZWUgYERJQlNfTE9gIGRlcGVuZHMgb24gYERJQlNgLCBzbyBib3RoIG5lZWQgdG8gYmUgZW5hYmxlZC4gSSBrbm93IGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgc28gSSBuZWVkIGBTTUNgIGVuYWJsZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIGBTTUNgIGRlcGVuZHMgb24gYERJQlNgLiBZZXMsIEkgc2VlIHRoYXQuIEl0IGRlcGVuZHMgb24gYElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gIGFyZSB0aGUgcmVxdWlyZWQgY29uZmlncy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBESUJTX0xPYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIGZvciBgZGlic19sb29wYmFjay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFjay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfRElCUykgJiM0Mzs9IGRpYnMub1xuZHJpdmVycy9kaWJzL01ha2VmaWxlOjg6ZGlicy0kKENPTkZJR19ESUJTX0xPKSAmIzQzOz0gZGlic19sb29wYmFjay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODAyCgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgYGRpYnMtJChDT05GSUdfRElCU19MTykgJiM0Mzs9IGRpYnNfbG9vcGJhY2sub2AuIFRoYXQgdGVsbHMgbWUgYGRpYnNfbG9vcGJhY2sub2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBgZGlic2AgbW9kdWxlIG9ubHkgaWYgYENPTkZJR19ESUJTX0xPYCBpcyBlbmFibGVkLiBTbywgYERJQlNgIGFuZCBgRElCU19MT2AgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcmVsZXZhbnQgY29uZmlncy4gIGBTTUNgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgSU5GSU5JQkFORGAuIFNvLCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuIEhvd2V2ZXIsIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIG9ubHkgbGlzdCB0aGUgZGlyZWN0IGNvbmZpZ3MgYW5kIGFueSAmIzM0O25vbi1zdGFuZGFyZCYjMzQ7IHBhcmVudHMuIGBJTkVUYCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBzdGFuZGFyZCwgYnV0IGBJTkZJTklCQU5EYCBpcyBhIG1vcmUgc3BlY2lhbGl6ZWQgb3B0aW9uLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuCgpOZXh0LCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2guIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNoYW5nZSBpbiBsb2NraW5nLCBzaGlmdGluZyBmcm9tIGByZWFkX2xvY2tfYmhgIHRvIGB3cml0ZV9sb2NrX2JoYC4gIEZ1cnRoZXJtb3JlLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIGJ1ZyBmaXggcmVsYXRlZCB0byBub2RlIHJlbW92YWwgZnJvbSBhIGhhc2ggdGFibGUsIHBvdGVudGlhbGx5IGEgcmFjZSBjb25kaXRpb24gd2l0aCByZWZjb3VudGluZy4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSDigJMgYGRpYnNfbG9gIOKAkyBhbmQgdGhhdCBlbXVsYXRlZCBkZXZpY2UgaXMgKnJlYWNoYWJsZSogYnkgYFNNQ2Agc29ja2V0cy4gIFRoaXMgbWVhbnMgaXQmIzM5O3MgZnVsbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGFibGUuIEFic29sdXRlbHkgd29ydGggZnV6emluZy4KClRvIHN1bW1hcml6ZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byB0YXJnZXQgYXJlOgoKKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYAoqICAgYGRpYnNfbG9fYXR0YWNoX2RtYmAKKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgCiogICBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAKKiAgIGBzbWNfaXNtX2F0dGFjaF9kbWJgCiogICBgc21jX2lzbV9kZXRhY2hfZG1iYAoKQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOgoKKiAgIGBESUJTYAoqICAgYERJQlNfTE9gCiogICBgU01DYAoqICAgYElORklOSUJBTkRgCgpUaGUgcmF0aW9uYWxlIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGludm9sdmVzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVyIChgZGlic19sb29wYmFjay5jYCkgdXRpbGl6ZWQgYnkgdGhlIGBTTUNgIHByb3RvY29sLiBUaGlzIG1ha2VzIGl0IGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCYjMzk7cyBlYXNpbHkgdGVzdGFibGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4KCk9uZSBmaW5hbCBjaGVjazogTGV0IG1lIGNvbmZpcm0gdGhhdCBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAgaXMgc3RhdGljLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgU3l6a2FsbGVyIGNhbiBzdGlsbCB0YXJnZXQgaXQsIGVzcGVjaWFsbHkgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkaWJzX2xvX29wc2AuIEFsc28sIGluY2x1ZGluZyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgYW5kIHRoZSBvdGhlciBTTUMgcmVsYXRlZCBmdW5jdGlvbnMgaXMgc21hcnQgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3QgY2FsbGVycyBvZiB0aGUgbW9kaWZpZWQgRElCUyBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWImIzM0OywKICAgICYjMzQ7ZGlic19sb19hdHRhY2hfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fZGV0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O3NtY19pc21fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBESUJTIGxvb3BiYWNrIGRyaXZlciAoZGlic19sb29wYmFjay5jKS4gVGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSB1c2VkIGJ5IHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGZvciBpbnRyYS1PUyBjb21tdW5pY2F0aW9uLiBTaW5jZSBpdCBpcyBzb2Z0d2FyZS1lbXVsYXRlZCwgaXQgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoL2RldGFjaC91bnJlZ2lzdGVyIERNQiBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2xvX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtkaWJzX2xvX2RldGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV9kZXRhY2hfZG1iJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjE1LjYxNDc2NzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTcxNTU5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJcIixcbiAgICBcImRpYnNfbG9fYXR0YWNoX2RtYlwiLFxuICAgIFwiZGlic19sb19kZXRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2F0dGFjaF9kbWJcIixcbiAgICBcInNtY19pc21fZGV0YWNoX2RtYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MTUuNjE0Nzc5Mjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2Mjk3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYjU1YTkwYjBjYzk3YmQ2YTRmZTIyMDA3NmZjZGYwMTI0ZjU3NzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjQ5OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXFxuaW5kZXggMGYyZTA5MzExMTUyNmIuLmZkNWNhZjFlMTlhOGY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXFxuQEAgLTExOCwxNCArMTE4LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKVxcbitzdGF0aWMgdm9pZCBkaWJzX2xvX2ZyZWVfZG1iKHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXFxuIHtcXG4tXFx0LyogcmVtb3ZlIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cXG4tXFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbi1cXHRoYXNoX2RlbChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZWxpc3QpO1xcbi1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4tXFxuIFxcdGNsZWFyX2JpdChkbWJfbm9kZS1cXHUwMDNlc2JhX2lkeCwgbGRldi1cXHUwMDNlc2JhX2lkeF9tYXNrKTtcXG4gXFx0Zm9saW9fcHV0KHZpcnRfdG9fZm9saW8oZG1iX25vZGUtXFx1MDAzZWNwdV9hZGRyKSk7XFxuIFxcdGtmcmVlKGRtYl9ub2RlKTtcXG5AQCAtMTM5LDI3ICsxMzQsMzMgQEAgc3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuIFxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG4gXFx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIGxhc3Q7XFxuIFxcbiBcXHRsZGV2ID0gZGlicy1cXHUwMDNlZHJ2X3ByaXY7XFxuIFxcbiBcXHQvKiBmaW5kIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cXG4tXFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfaHRfbG9jayk7XFxuK1xcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4gXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShsZGV2LVxcdTAwM2VkbWJfaHQsIHRtcF9ub2RlLCBsaXN0LCBkbWItXFx1MDAzZWRtYl90b2spIHtcXG4gXFx0XFx0aWYgKHRtcF9ub2RlLVxcdTAwM2V0b2tlbiA9PSBkbWItXFx1MDAzZWRtYl90b2spIHtcXG4gXFx0XFx0XFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbi1cXHRpZiAoIWRtYl9ub2RlKVxcbitcXHRpZiAoIWRtYl9ub2RlKSB7XFxuK1xcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGhhc2hfZGVsKFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXG4tXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZXJlZmNudCkpIHtcXG4rXFx0aWYgKGxhc3QpIHtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0ZGlicy1cXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS1cXHUwMDNlc2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0XFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcXG4rXFx0XFx0ZGlic19sb19mcmVlX2RtYihsZGV2LCBkbWJfbm9kZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4LDE0ICsxODksOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fYXR0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbiBcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbitcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQpO1xcbiBcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXG4tXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQpKVxcbi1cXHRcXHQvKiB0aGUgZG1iIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCwgYnV0IGhhc1xcbi1cXHRcXHQgKiBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdC8qIHByb3ZpZGUgZG1iIGluZm9ybWF0aW9uICovXFxuIFxcdGRtYi1cXHUwMDNlaWR4ID0gZG1iX25vZGUtXFx1MDAzZXNiYV9pZHg7XFxuIFxcdGRtYi1cXHUwMDNlZG1iX3RvayA9IGRtYl9ub2RlLVxcdTAwM2V0b2tlbjtcXG5AQCAtMjA5LDExICsyMDUsMTIgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXFxuIHtcXG4gXFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbiBcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuK1xcdGJvb2wgbGFzdDtcXG4gXFxuIFxcdGxkZXYgPSBkaWJzLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFxuIFxcdC8qIGZpbmQgZG1iX25vZGUgYWNjb3JkaW5nIHRvIGRtYi1cXHUwMDNlZG1iX3RvayAqL1xcbi1cXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4rXFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXFx1MDAzZWRtYl9odCwgdG1wX25vZGUsIGxpc3QsIHRva2VuKSB7XFxuIFxcdFxcdGlmICh0bXBfbm9kZS1cXHUwMDNldG9rZW4gPT0gdG9rZW4pIHtcXG4gXFx0XFx0XFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcXG5AQCAtMjIxLDEzICsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoIWRtYl9ub2RlKSB7XFxuLVxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfaHRfbG9jayk7XFxuK1xcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbitcXHRsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGhhc2hfZGVsKFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbitcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xcbiBcXG4tXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZXJlZmNudCkpXFxuLVxcdFxcdF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihsZGV2LCBkbWJfbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToxNi4xNTYyOTQ0MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzQzMDAyMjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2xvX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJkaWJzX2xvX2F0dGFjaF9kbWJcIixcbiAgICBcImRpYnNfbG9fZGV0YWNoX2RtYlwiLFxuICAgIFwic21jX2lzbV91bnJlZ2lzdGVyX2RtYlwiLFxuICAgIFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2RldGFjaF9kbWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIERJQlMgbG9vcGJhY2sgZHJpdmVyIChkaWJzX2xvb3BiYWNrLmMpLiBUaGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHVzZWQgYnkgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZm9yIGludHJhLU9TIGNvbW11bmljYXRpb24uIFNpbmNlIGl0IGlzIHNvZnR3YXJlLWVtdWxhdGVkLCBpdCBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2gvZGV0YWNoL3VucmVnaXN0ZXIgRE1CIGZ1bmN0aW9ucyBhbmQgdGhlaXIgU01DIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZiNTVhOTBiMGNjOTdiZDZhNGZlMjIwMDc2ZmNkZjAxMjRmNTc3OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxOTo0OToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5pbmRleCAwZjJlMDkzMTExNTI2Yi4uZmQ1Y2FmMWUxOWE4ZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5AQCAtMTE4LDE0ICsxMTgsOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbitzdGF0aWMgdm9pZCBkaWJzX2xvX2ZyZWVfZG1iKHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldixcbitcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbiB7XG4tXHQvKiByZW1vdmUgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbi1cdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuLVxuIFx0Y2xlYXJfYml0KGRtYl9ub2RlLVx1MDAzZXNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKTtcbiBcdGZvbGlvX3B1dCh2aXJ0X3RvX2ZvbGlvKGRtYl9ub2RlLVx1MDAzZWNwdV9hZGRyKSk7XG4gXHRrZnJlZShkbWJfbm9kZSk7XG5AQCAtMTM5LDI3ICsxMzQsMzMgQEAgc3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCBsYXN0O1xuIFxuIFx0bGRldiA9IGRpYnMtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHQvKiBmaW5kIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cbi1cdHJlYWRfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLVx1MDAzZWRtYl90b2spIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IGRtYi1cdTAwM2VkbWJfdG9rKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4tXHRpZiAoIWRtYl9ub2RlKVxuK1x0aWYgKCFkbWJfbm9kZSkge1xuK1x0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0bGFzdCA9IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpO1xuK1x0aWYgKGxhc3QpXG4rXHRcdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuK1x0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFxuLVx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpKSB7XG4rXHRpZiAobGFzdCkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYl9ub2RlLVx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihsZGV2LCBkbWJfbm9kZSk7XG4rXHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCwxNCArMTg5LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX2F0dGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYilcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuK1x0cmVmY291bnRfaW5jKFx1MDAyNmRtYl9ub2RlLVx1MDAzZXJlZmNudCk7XG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcbi1cdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmRtYl9ub2RlLVx1MDAzZXJlZmNudCkpXG4tXHRcdC8qIHRoZSBkbWIgaXMgYmVpbmcgdW5yZWdpc3RlcmVkLCBidXQgaGFzXG4tXHRcdCAqIG5vdCBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGFzaCB0YWJsZS5cbi1cdFx0ICovXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0LyogcHJvdmlkZSBkbWIgaW5mb3JtYXRpb24gKi9cbiBcdGRtYi1cdTAwM2VpZHggPSBkbWJfbm9kZS1cdTAwM2VzYmFfaWR4O1xuIFx0ZG1iLVx1MDAzZWRtYl90b2sgPSBkbWJfbm9kZS1cdTAwM2V0b2tlbjtcbkBAIC0yMDksMTEgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcbiB7XG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4rXHRib29sIGxhc3Q7XG4gXG4gXHRsZGV2ID0gZGlicy1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdC8qIGZpbmQgZG1iX25vZGUgYWNjb3JkaW5nIHRvIGRtYi1cdTAwM2VkbWJfdG9rICovXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4rXHR3cml0ZV9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShsZGV2LVx1MDAzZWRtYl9odCwgdG1wX25vZGUsIGxpc3QsIHRva2VuKSB7XG4gXHRcdGlmICh0bXBfbm9kZS1cdTAwM2V0b2tlbiA9PSB0b2tlbikge1xuIFx0XHRcdGRtYl9ub2RlID0gdG1wX25vZGU7XG5AQCAtMjIxLDEzICsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG4gXHRcdH1cbiBcdH1cbiBcdGlmICghZG1iX25vZGUpIHtcbi1cdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4rXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcdGxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbitcdGlmIChsYXN0KVxuK1x0XHRoYXNoX2RlbChcdTAwMjZkbWJfbm9kZS1cdTAwM2VsaXN0KTtcbitcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcbitcdGlmIChsYXN0KVxuK1x0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiBcbi1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSlcbi1cdFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjE2LjE1NjI5NzQ2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTE1MjIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaWJzIExvb3BiYWNrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGl0cyBEaWJzIE1lc3NhZ2UgQmxvY2sgKERNQikgbm9kZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhvc2Ugbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGhhc2ggdGFibGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgZml4LlxuXG5UaGUga2V5IGNoYW5nZSBJIHNlZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHJlYWRfbG9ja19iaGAgd2l0aCBgd3JpdGVfbG9ja19iaGAgaW4gYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgIGFuZCBgZGlic19sb19kZXRhY2hfZG1iYCB3aGVuIGxvY2F0aW5nIHRoZSBETUIgbm9kZS4gVGhlIGhhc2ggdGFibGUgZGVsZXRpb24gYWxzbyBub3cgb2NjdXJzIHdpdGhpbiB0aGUgd3JpdGUgbG9jayBvbmx5IGlmIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgIHlpZWxkcyBhIGB0cnVlYCB2YWx1ZS4gVGhpcyBpcyBhIHZlcnkgc2lnbmlmaWNhbnQgY2hhbmdlOyBpdCBzaG93cyB0aGUgaW50ZW50IHRvIG1ha2UgdGhlc2Ugb3BlcmF0aW9ucyB0aHJlYWQtc2FmZSBpbiBhIG1vcmUgcm9idXN0IHdheSBieSB0YWtpbmcgYW4gZXhjbHVzaXZlIGxvY2sgdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBhbmQgZGV0YWNoaW5nLiBBbHNvLCB0aGUgcmVtb3ZhbCBvZiBgX19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCBhbmQgaXRzIHJlcGxhY2VtZW50IHdpdGggYGRpYnNfbG9fZnJlZV9kbWJgIGluZGljYXRlcyBwb3RlbnRpYWwgc2ltcGxpZmljYXRpb24gb3IgcGVyaGFwcyBhIHNoaWZ0IGluIHJlc3BvbnNpYmlsaXR5IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5JbiBgZGlic19sb19hdHRhY2hfZG1iYCwgdGhlIGNoYW5nZSBmcm9tIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHRvIGByZWZjb3VudF9pbmNgIHdpdGhpbiB0aGUgcmVhZCBsb2NrIGFsc28gcGlxdWVzIG15IGludGVyZXN0LiBJdCBjb3VsZCBiZSBvcHRpbWl6YXRpb24gYXMgYHJlZmNvdW50X2luY2AgaXMgc2ltcGxlciBvciBpcyB1c2VkIHRvIGd1YXJhbnRlZSBhbiBpbmNyZW1lbnQgZXZlbiBpZiB0aGUgY291bnQgaXMgemVybywgcGVyaGFwcyBiZWNhdXNlIHRoZSBjb2RlIGV4cGVjdHMgdGhlIGNvdW50IHRvIGJlIHplcm8gaW4gdGhpcyBzcGVjaWZpYyBwb2ludC5cblxuQmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIERpYnMgc3Vic3lzdGVtIGFjdHVhbGx5IGRvZXMsIHdoYXQgaXRzIHB1cnBvc2UgaXMsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdldHRpbmcgYSBoYW5kbGUgb24gaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwuIEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGRpYnNgIHN1YnN5c3RlbSBhbmQgaXRzIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MjEuNTY3ODIyMzQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjI1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToyMi4wNDQwODY5NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3NzMwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBkaWJzIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlcXVpcmVkIHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhpcyBgZGlic2AgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZC4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9ucy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcywgcGxhdGZvcm0gc3BlY2lmaWNzLCBhbmQgYW55IG90aGVyIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBkcml2ZXIuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgbWFnaWMgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDI3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI0LjczMTgxOTcyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToyNC43MzE4ODIyMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1ODUwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERJQlMgTG9vcGJhY2sqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlOiBgRElCU2AgYW5kIGBESUJTX0xPYC4gUmlnaHQsIGBESUJTX0xPYCAtIHRoYXQncyB0aGUgc29mdHdhcmUtZW11bGF0ZWQgRElCUyBkZXZpY2UuIEl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGRhdGEgdHJhbnNmZXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBsb29wYmFjayBmZWF0dXJlIGlzIGJyaWxsaWFudCBmb3IgY29udmVuaWVudCB0ZXN0aW5nIG9mIERJQlMgY2xpZW50cywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZS4gVGhhdCdzIGEgaHVnZSB3aW4gZm9yIHBvcnRhYmlsaXR5IGluIG91ciB0ZXN0aW5nLlxuXG5UaGlzIGBESUJTX0xPYCBpcyAqcHJlY2lzZWx5KiB0aGUga2luZCBvZiB0YXJnZXQgd2Ugd2FudCB0byBoaXQgd2l0aCBmdXp6aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExvdy1oYW5naW5nIGZydWl0LCBtaW5pbWFsIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSB0byBleHBvc2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBzZWUgd2hhdCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYnkgdGhpcyBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AgbW9kdWxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gcG9rZSBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI4LjU2NzczNTIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI0OTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2xvX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjQtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNTpzdGF0aWMgY29uc3QgY2hhciBkaWJzX2xvX2Rldl9uYW1lW10gPSBcXFwibG9cXFwiO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjYtLyogZ2xvYmFsIGxvb3BiYWNrIGRldmljZSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6Mjc6c3RhdGljIHN0cnVjdCBkaWJzX2xvX2RldiAqbG9fZGV2O1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyOTpzdGF0aWMgdTE2IGRpYnNfbG9fZ2V0X2ZhYnJpY19pZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzQ6c3RhdGljIGludCBkaWJzX2xvX3F1ZXJ5X3JnaWQoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBjb25zdCB1dWlkX3QgKnJnaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNS1cXHRcXHRcXHQgICAgICB1MzIgdmlkX3ZhbGlkLCB1MzIgdmlkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00Mi1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQzOnN0YXRpYyBpbnQgZGlic19sb19tYXhfZG1icyh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDQte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00Ny1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQ4OnN0YXRpYyBpbnQgZGlic19sb19yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ5LVxcdFxcdFxcdFxcdHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50KVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTAte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NTE6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlLCAqdG1wX25vZGU7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MjpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy01My1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMjAtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjE6c3RhdGljIHZvaWQgZGlic19sb19mcmVlX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjI6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMjMte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTM0OlxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEzNTpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYyLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYzOlxcdFxcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY0LVxcdH1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY3LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTY4OnN0YXRpYyBpbnQgZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY5LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTcyLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTczOnN0YXRpYyBpbnQgZGlic19sb19hdHRhY2hfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzQte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTc1OlxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3NjpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzctXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwMy1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIwNDpzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwNS17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMDY6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjA3OlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwOC1cXHRib29sIGxhc3Q7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIyOS1cXHRpZiAobGFzdClcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIzMDpcXHRcXHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzMS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM0LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjM1OnN0YXRpYyBpbnQgZGlic19sb19tb3ZlX2RhdGEoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgZG1iX3RvayxcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzNi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBpZHgsIGJvb2wgc2YsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzOC17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzk6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKnJtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjQwOlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0MS1cXHR1MTYgc19tYXNrO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzktXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODA6c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODE6XFx0LmdldF9mYWJyaWNfaWQgPSBkaWJzX2xvX2dldF9mYWJyaWNfaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODI6XFx0LnF1ZXJ5X3JlbW90ZV9naWQgPSBkaWJzX2xvX3F1ZXJ5X3JnaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODM6XFx0Lm1heF9kbWJzID0gZGlic19sb19tYXhfZG1icyxcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NDpcXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODU6XFx0LnVucmVnaXN0ZXJfZG1iID0gZGlic19sb191bnJlZ2lzdGVyX2RtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NjpcXHQubW92ZV9kYXRhID0gZGlic19sb19tb3ZlX2RhdGEsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODc6XFx0LnN1cHBvcnRfbW1hcHBlZF9yZG1iID0gZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHksXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODg6XFx0LmF0dGFjaF9kbWIgPSBkaWJzX2xvX2F0dGFjaF9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODk6XFx0LmRldGFjaF9kbWIgPSBkaWJzX2xvX2RldGFjaF9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yOTAtfTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5MS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI5MjpzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9pbml0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5My17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5OS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwMDpzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwMS17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwNjpzdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMDcte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzA4OlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwOS1cXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyMy1cXHRkaWJzLVxcdTAwM2VkcnZfcHJpdiA9IGxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjQ6XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyNS1cXHR1dWlkX2dlbihcXHUwMDI2ZGlicy1cXHUwMDNlZ2lkKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMyNjpcXHRkaWJzLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZGlic19sb19vcHM7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjctXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjgtXFx0ZGlicy1cXHUwMDNlZGV2LnBhcmVudCA9IE5VTEw7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjk6XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYsIFxcXCIlc1xcXCIsIGRpYnNfbG9fZGV2X25hbWUpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMwLVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDUtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDY6c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDcte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTEtXFx0ZGlic19kZXZfZGVsKGxvX2Rldi1cXHUwMDNlZGlicyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTI6XFx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUzLVxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNTk9aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM2MTpcXHRyZXR1cm4gZGlic19sb19kZXZfcHJvYmUoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Mi19XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM2ND12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzY1LXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM2NjpcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI4Ljc0Mzk5MDUxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc2MjE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIGRpYnMgRnJhbWV3b3JrIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgZGlic2AgZnJhbWV3b3JrIHdvcmtzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IER5bmFtaWMgTWVtb3J5IEJ1ZmZlcnMgKERNQnMpIGFyZSBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCwgYGRpYnNfbG9fYXR0YWNoX2RtYmAsIGFuZCBgZGlic19sb19kZXRhY2hfZG1iYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGVyZSwgYW5kIHRoZXkncmUgYWxsIGJ1bmRsZWQgdG9nZXRoZXIgd2l0aGluIGBkaWJzX2xvX29wc2AuIFRoYXQgYGRpYnNfbG9fb3BzYCBzdHJ1Y3R1cmUgaXMgdGhlbiBhc3NpZ25lZCB0byBgZGlicy1cdTAwM2VvcHNgLiBTbywgdGhlIGBkaWJzYCBmcmFtZXdvcmsgZXNzZW50aWFsbHkgdXNlcyB0aGlzIHNldCBvZiBvcGVyYXRpb25zLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUsIGdpdmVuIGl0cyBkZXNpZ24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGEgd2VsbC1zdHJ1Y3R1cmVkIGRyaXZlciBvciBmcmFtZXdvcmsuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBETUJzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIGBkaWJzYCBjb2RlLiBUaGVyZWZvcmUsIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMuIFdoZXJlIGlzIGBkaWJzLVx1MDAzZW9wcy1cdTAwM2V1bnJlZ2lzdGVyX2RtYmAgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFRoYXTigJlzIHdoZXJlIEknbGwgZ2V0IHRvIHNlZSB0aGUgYWN0dWFsIGNvbnRleHQgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgRE1CIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBhcyB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgbW9zdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjMyLjg5MTYxNTg2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MTI4OTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldW5yZWdpc3Rlcl9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MzIuOTYzNTM5MjczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODE4NTAwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQb3RlbnRpYWwgRGUtUmVnaXN0cmF0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2UncmUgZGVhbGluZyB3aXRoIGRlLXJlZ2lzdHJhdGlvbiwgc28gYSBjYW5kaWRhdGUgZnVuY3Rpb24ganVtcHMgdG8gbWluZDogYG9wcy1cdTAwM2V1bnJlZ2lzdGVyX2RtYmAuIEl0J3MgYSBwbGF1c2libGUgY29udGVuZGVyLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayB0aGUgY29udGV4dCwgdGhvdWdoLCBiZWZvcmUgSSBjb21taXQgdG8gaXQgYmVpbmcgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoYXQncyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRldGFpbHMgb2YgdGhhdCBzdWJzeXN0ZW0uLi4gaXMgdGhpcyBhYm91dCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50PyBJZiBzbywgdGhpcyBmdW5jdGlvbiBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4uIEFsc28gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIGRtYiBmdW5jdGlvbnMgd2hpY2ggY291bGQgYmUgYXBwbGljYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjM2LjA0NTM5MjU0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMTg4Njg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLVxcdTAwM2V1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OTozNy43NjcyODcyMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1MjcwMTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgZGlicyBEcml2ZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHVucmVnaXN0ZXJfZG1iYC4gR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIGRldmljZSBkcml2ZXJzLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGNoZWNrIGlzIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIHRlcm0gYGRtYmAgKERldmljZSBNZW1vcnkgQmFycmllcikgYW5kIGRyaXZlcnMuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OTo0MC42MTk5OTIzNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTQyMzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTIxPXN0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yODA9c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4NC1cXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODU6XFx0LnVucmVnaXN0ZXJfZG1iID0gZGlic19sb191bnJlZ2lzdGVyX2RtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4Ni1cXHQubW92ZV9kYXRhID0gZGlic19sb19tb3ZlX2RhdGEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjQwLjk3OTQyNTg5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg2NDg0NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBgdW5yZWdpc3Rlcl9kbWJgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgYW5kIEkndmUgbm90aWNlZCB0aGF0IGB1bnJlZ2lzdGVyX2RtYmAgZG9lc24ndCBzZWVtIHRvIGJlIGV4cGxpY2l0bHkgY2FsbGVkIGFueXdoZXJlIHdpdGhpbiBpdC4gVGhhdCdzIGEgYml0IG9kZDsgdXN1YWxseSwgeW91J2QgZXhwZWN0IGEgZnVuY3Rpb24gbGlrZSB0aGF0IHRvIGJlIHBhaXJlZCB3aXRoIGl0cyBjb3VudGVycGFydCwgbGlrZSBhIHJlZ2lzdGVyL3VucmVnaXN0ZXIgcGFpci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaGVhZGVyIGZpbGVzIHRvIHNlZSAqd2hlcmUqIGl0IGlzIGJlaW5nIGNhbGxlZCwgYXMgaWYgaXQgaXNuJ3Qgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGl0IG11c3QgZXhpc3QgYXMgYSBwdWJsaWMgbWV0aG9kLiBMZXQncyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlczogYGluY2x1ZGUvbGludXgvZGlicy5oYCBhbmQgYGluY2x1ZGUvbmV0L2RpYnMuaGAuIEknbGwgYWxzbyBnbGFuY2UgYXQgYW55dGhpbmcgc2ltaWxhciB0aGF0IG1pZ2h0IGNvbnRhaW4gdGhlIHByb3RvdHlwZSwganVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRldmljZSBtYW5hZ2VtZW50IGJsb2NrIGlzIGJlaW5nIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0IHRoZXNlIGhlYWRlcnMgcmV2ZWFsLiBJIGJldCBpdCBpcyBsb2NhdGVkIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDQuNTY1OTEzMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzE3NDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yNzQtXFx0LyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Mjc1OlxcdCAqIHVucmVnaXN0ZXJfZG1iKCkgLSB1bnJlZ2lzdGVyIGFuZCBmcmVlIGEgZG1iXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc2LVxcdCAqIEBkZXY6IGRpYnMgZGV2aWNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yODUtXFx0ICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Mjg2OlxcdGludCAoKnVucmVnaXN0ZXJfZG1iKShzdHJ1Y3QgZGlic19kZXYgKmRldiwgc3RydWN0IGRpYnNfZG1iICpkbWIpO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTI4Ny1cXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDQuODAzMDk4MDM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDI3NDEyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgZGlic19kZXZfb3BzIHN0cnVjdHVyZSBhbmQgdW5yZWdpc3Rlcl9kbWIgY2FsbCoqXG5cbk9rYXksIHNvIGBkaWJzX2Rldl9vcHNgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZGlicy5oYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBwdXR0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIGEgaGVhZGVyIGZpbGUgZm9yIG90aGVyIG1vZHVsZXMgdG8gdXNlLiBUaGF0J3MgZ29vZC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aG8gY2FsbHMgYHVucmVnaXN0ZXJfZG1iYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHVzZSBpcyBtb3JlIGltcG9ydGFudC4gSXMgdGhpcyBjYWxsIHBhcnQgb2YgdGhlIG1vZHVsZSB0ZWFyZG93bj8gSXMgaXQgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZD8gT3IgaXMgaXQgbW9yZSBkeW5hbWljIHRoYW4gdGhhdD8gVGhlIGZhY3QgdGhhdCBJIGRvbid0IGluc3RhbnRseSBrbm93IHdoZXJlIHRvIGxvb2sgc3VnZ2VzdHMgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzLCBzbyBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgdG9vbHMgdG8gdHJhY2UgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoYXQgYHVucmVnaXN0ZXJfZG1iYCBjYWxsIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYGRpYnNfZGV2X29wc2AgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBsYXJnZXIga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjIxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDguMzA1ODQyMDI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg4MzUyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldW5yZWdpc3Rlcl9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2lzbS5jPTIxNT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjI5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjIzMDpcXHRzbWNkLVxcdTAwM2VkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZXVucmVnaXN0ZXJfZG1iKHNtY2QtXFx1MDAzZWRpYnMsIFxcdTAwMjZkbWIpO1xcbm5ldC9zbWMvc21jX2lzbS5jLTIzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NTEuMzk0MjA0MjQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjM3MTQ5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU01DIERldGFjaG1lbnQgTG9naWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYG5ldC9zbWMvc21jX2lzbS5jYCBpcyBjYWxsaW5nIGBzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl04oCZcyB0aGUgdW5yZWdpc3RyYXRpb24gb2YgdGhlIGRlZGljYXRlZCBtZW1vcnkgYnVmZmVyIChETUIpIHRoYXQncyBrZXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBob3cgdGhlIERNQiBpcyAqYXR0YWNoZWQqIGFuZCAqZGV0YWNoZWQqLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIg4oCTIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBhdHRhY2hfZG1iYCBhbmQgYGRldGFjaF9kbWJgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGB1bnJlZ2lzdGVyX2RtYmAgYW5kIHVsdGltYXRlbHkgd2hhdCB0aGlzIHRlbGxzIG1lIGFib3V0IHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NTQuOTE3OTI0MTU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ4ODA4NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYXR0YWNoX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjcwPWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTI3NS1cXG5uZXQvc21jL3NtY19pc20uYzoyNzY6XFx0aWYgKCFkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYXR0YWNoX2RtYilcXG5uZXQvc21jL3NtY19pc20uYy0yNzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy0yODAtXFx0ZG1iLmRtYl90b2sgPSB0b2tlbjtcXG5uZXQvc21jL3NtY19pc20uYzoyODE6XFx0cmMgPSBkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYXR0YWNoX2RtYihkZXYtXFx1MDAzZWRpYnMsIFxcdTAwMjZkbWIpO1xcbm5ldC9zbWMvc21jX2lzbS5jLTI4Mi1cXHRpZiAoIXJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjU4LjA2NjczOTYxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzYzMDg5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBzcGVha2luZyBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW5kIHN0YXJ0aW5nIHdpdGggYSBib2xkZWQgaGVhZGVyOlxuXG4qKkFuYWx5emluZyBgZGV0YWNoX2RtYmAqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGV0YWNoX2RtYmAgY2FsbC4uLiBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBsaWtlbHkgaW1wYWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFjdGlvbi4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgRGlnaXRhbCBNZWRpYSBCdWZmZXIgKERNQiksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICp3aGF0J3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcj8qIElzIGl0IGluIHVzZT8gSXMgdGhlcmUgYSBwZW5kaW5nIG9wZXJhdGlvbj8gQXJlIGFueSBjbGllbnRzIGN1cnJlbnRseSByZWZlcmVuY2luZyBpdD9cblxuSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciByZXNvdXJjZSBsZWFrcyBpZiB0aGlzIGBkZXRhY2hgIG9wZXJhdGlvbiBpc24ndCBoYW5kbGVkIGNhcmVmdWxseSwgb3IgcmFjZSBjb25kaXRpb25zIGlmIGl0J3MgYmVpbmcgdXNlZCBjb25jdXJyZW50bHkuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJ1ZmZlcuKAmXMgb3duZXJzaGlwIG1vZGVsIOKAkyBJcyBpdCByZWZlcmVuY2UtY291bnRlZD8gRG9lcyBpdCBoYXZlIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGJ1ZmZlcnM/IEhvdyBpcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZD8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBhbnkgbWV0YWRhdGEsIGZsYWdzLCBvciBoYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVyP1xuXG5UaGUgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl04oCZcyBzZXZlcmluZyBhIGxpbmssIGJyZWFraW5nIGFuIGFzc29jaWF0aW9uLiBCdXQgKndoaWNoKiBsaW5rPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGRvd24gdGhlIGxpbmUgZm9yIHRoYXQgbGlua2VkIGFzc29jaWF0aW9uPyBUaGUgY29udGV4dCBvZiB0aGUgY2FsbCBpcyBjcml0aWNhbC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBoYW5kbGUgcmVsZWFzZSwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQ/IEnigJltIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpbXBhY3QgdG8gYXNzb2NpYXRlZCBtZW1vcnkgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIHRocmVhZCBzeW5jaHJvbml6YXRpb24gdGhhdCBtYXkgYmUgYWZmZWN0ZWQuXG5cbk15IHRob3VnaHQgcHJvY2VzcyBxdWlja2x5IHNoaWZ0cyB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGlzIGBkZXRhY2hgIGZhaWxzPyBBcmUgZXhjZXB0aW9ucyB0aHJvd24sIHJldHVybiBjb2RlcyBwcm92aWRlZCwgb3Igc29tZSBvdGhlciBtZWNoYW5pc20gdXNlZCB0byBzaWduYWwgdGhlIHByb2JsZW0/IEFuZCBob3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24/IElzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5kZWZpbmVkIGJlaGF2aW9yP1xuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjYWxsIHBhdGhzIGFuZCBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MsIHRyeWluZyB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGBkZXRhY2hfZG1iYCBjYWxsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBob3BlZnVsbHkgZmluZCBzb21lIGRvY3VtZW50YXRpb24gdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTMyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDowMy40Mjk4MzI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MzY3NzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZWRldGFjaF9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2lzbS5jPTI5Mz1pbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXFxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcXG5uZXQvc21jL3NtY19pc20uYzoyOTU6XFx0aWYgKCFkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlZGV0YWNoX2RtYilcXG5uZXQvc21jL3NtY19pc20uYy0yOTYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L3NtYy9zbWNfaXNtLmMtMjk3LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI5ODpcXHRyZXR1cm4gZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZWRldGFjaF9kbWIoZGV2LVxcdTAwM2VkaWJzLCB0b2tlbik7XFxubmV0L3NtYy9zbWNfaXNtLmMtMjk5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MDYuNDczNTE1ODU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTk2NDQ1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIG5ldHdvcmtpbmcgYW5kIFNNQzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIFNNQyBvbiBESUJTKipcblxuUmlnaHQsIHNvIGBkaWJzYCBpcyBhIGtleSBjb25jZXB0IHdpdGhpbiBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zLCBvciBgU01DYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3by4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgdG8gY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBTTUMgZmVhdHVyZXMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSdsbCBzY2FuIHRoYXQgZmlsZSB0byBjb25maXJtIGlmIGBTTUNgIGFjdHVhbGx5IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBESUJTYC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjUwOjA5Ljc3MzE2MzY3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MzgzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDowOS44NTU4MDk0NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTYwOTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlNNQydzIERlcGVuZGVuY2llczogVGltZSB0byBEaWcgSW4qKlxuXG5Pa2F5LCBzbyBgU01DYCByZWxpZXMgb24gYERJQlNgPyBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYmV0dGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGlzIHRoZSBrZXksIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2U6IGBuZXQvc21jL0tjb25maWdgLiBUaGlzIGZpbGUgbGlrZWx5IHNwZWxscyBvdXQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIG9wdGlvbnMsIGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMsIGBTTUNgIGFuZCBgRElCU2AsIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIGRlcGVuZGVuY3kgYW5kIHdoYXQgaXQgaW1wbGllcyBhYm91dCB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBob2xkcyEgVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSB3aWxsIGNsYXJpZnkgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoxMy40ODc0MjMwODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gU01DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXFxuICAxOTpcXHRcXHQgIHNtY3NzLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjUwOjEzLjQ4NzUyMTY2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc1MDA5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBESUJTIExvb3BiYWNrIGZvciBTTUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgaXQgbW9kaWZpZXMgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBUaGF0J3MgYSBzb2Z0d2FyZSBsb29wYmFjayBkZXZpY2UgZm9yIGBESUJTYCwgd2hpY2gsIG5hdHVyYWxseSwgYFNNQ2AgZGVwZW5kcyBvbi4gVGhlIGxvb3BiYWNrIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfRElCU19MT2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBmaXhpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAuICBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGBTTUNgIHNvY2tldHMsIHRoaXMgcGF0Y2ggc2NyZWFtcyBcImZ1enogbWVcIiFcblxuTm93LCBsZXQncyBpZGVudGlmeSBvdXIgdGFyZ2V0IHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdDpcblxuKiAgIGBkaWJzX2xvX2ZyZWVfZG1iYCAoc3RhdGljKVxuKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYWthIG9wcylcbiogICBgZGlic19sb19hdHRhY2hfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBvcHMpXG4qICAgYGRpYnNfbG9fZGV0YWNoX2RtYmAgKHN0YXRpYywgYnV0IGNhbGxlZCB2aWEgb3BzKVxuXG5JIHdhcyBpbml0aWFsbHkgYSBiaXQgY29uY2VybmVkIGFib3V0IHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgaW5saW5lZCBhbmQgdGh1cyB1bnJlYWNoYWJsZSBieSBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBkaWJzX2xvX29wc2AsIEkgY2FuIGNvbmNsdWRlIHRoYXQgdGhleSBhcmUgbm90IGlubGluZWQuIEluIGFkZGl0aW9uLCBJIHdpbGwgdmVyaWZ5IHRoYXQgYHN5emthbGxlcmAgY2FuIHRhcmdldCBzdWNoIGZ1bmN0aW9ucy4gQnV0IHJlZ2FyZGxlc3MsIHNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgb3BzLCB0YXJnZXRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGxlc3MgaWRlYWwgdGhhbiB0YXJnZXRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS5cblxuU28sIHNpbmNlIHRoZXNlIGBkaWJzX2xvX2AgZnVuY3Rpb25zIGFyZSB1c2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgIGxvb2sgbGlrZSBzb2xpZCB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGZpbmQgdGhlIGBTTUNgIGNvdW50ZXJwYXJ0cy4gQWZ0ZXIgYSBxdWljayBzY2FuLCBJJ3ZlIGlkZW50aWZpZWQ6XG5cbiogICBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmBcbiogICBgc21jX2lzbV9hdHRhY2hfZG1iYFxuKiAgIGBzbWNfaXNtX2RldGFjaF9kbWJgXG5cblRpbWUgdG8gY2hlY2sgaWYgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyMS4xNjI1MzQzMzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODg4NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xNDA5PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2ZyZWUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgaXNfZG1iLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE0MTQtXFx0XFx0YnVmX2Rlc2MtXFx1MDAzZWxlbiArPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjE0MTU6XFx0XFx0c21jX2lzbV91bnJlZ2lzdGVyX2RtYihsZ3ItXFx1MDAzZXNtY2QsIGJ1Zl9kZXNjKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTQxNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MTc5PWludCBzbWNfaXNtX3B1dF92bGFuKHN0cnVjdCBzbWNkX2RldiAqc21jZCwgdW5zaWduZWQgc2hvcnQgdmxhbmlkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjE0LVxcbm5ldC9zbWMvc21jX2lzbS5jOjIxNTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxcbm5ldC9zbWMvc21jX2lzbS5jLTIxNi1cXHRcXHRcXHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uaD00OT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBidWZfc2l6ZSxcXG5uZXQvc21jL3NtY19pc20uaC01MC1cXHRcXHRcXHQgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2lzbS5oOjUxOnZvaWQgc21jX2lzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldixcXG5uZXQvc21jL3NtY19pc20uaC01Mi1cXHRcXHRcXHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyMS4zNzE0MjQ4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDI2ODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgRHluYW1pYyBNZW1vcnkgQmFycmllciAoRE1CKSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgZnVuY3Rpb24sIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBlbnRpdHkuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE5vdywgd2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbj8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuVGhhdCB0aGVuIGJyaW5ncyB1cCBxdWVzdGlvbnMgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0cy4gV2hhdCBhYm91dCBgc21jX2lzbV9hdHRhY2hfZG1iYCBhbmQgYHNtY19pc21fZGV0YWNoX2RtYmA/IEFyZSB0aGV5IHNpbWlsYXJseSBkeW5hbWljPyBBcmUgdGhleSBhbHNvIHN1YmplY3QgdG8gdGhlIHNhbWUgZGVzaWduIGNvbnNpZGVyYXRpb25zIGJhc2VkIG9uIHRoZWlyIGxhY2sgb2Ygc3RhdGljIHN0YXR1cz8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgYW5kIHVzYWdlIHBhdHRlcm5zPyBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG9mIG1lbW9yeSBiYXJyaWVycyBoZXJlPyBJZiBzbywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gZnVuY3Rpb24gYXMgYSB3aG9sZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgYW5hbHl6ZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyNS41ODE2OTY4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMTI4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0yNTc3PWludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU5My1cXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU5NDpcXHRyYyA9IHNtY19pc21fYXR0YWNoX2RtYihzbWNkLCBwZWVyX3Rva2VuLCBidWZfZGVzYyk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTI1OTUtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjY5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI3MDppbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXFxubmV0L3NtYy9zbWNfaXNtLmMtMjcxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTUzPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKTtcXG5uZXQvc21jL3NtY19pc20uaDo1NDppbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXFxubmV0L3NtYy9zbWNfaXNtLmgtNTUtXFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKmRtYl9kZXNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MjUuNjUwMDI3NDI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTgyNzI2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHNtY19pc21fZGV0YWNoX2RtYmAqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGlkZWEuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgc21jX2lzbV9kZXRhY2hfZG1iYCBsaWtlbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgc3lzdGVtIG1hbmFnZW1lbnQgY29udHJvbGxlciAoU01DKSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBkZXRhY2hpbmcgb3IgZGlzY29ubmVjdGluZyBhIGRldmljZSwgd2l0aCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgaW5kaWNhdGVkIGJ5IGBkbWJgLiBUaGUgdXNlIG9mIGBpc21gIGxpa2VseSBpbXBsaWVzIGEgbWVtb3J5IGlzb2xhdGlvbiBzdHJhdGVneSBpbnZvbHZlZCBpbiB0aGlzIHByb2NlZHVyZS4gVGhlIFwiZGV0YWNoXCIgcGFydCBzdWdnZXN0cyBzb21ldGhpbmcgaXMgYmVpbmcgcmVtb3ZlZCwgcGVyaGFwcyBhIHBlcmlwaGVyYWwsIG9yIHNvbWUgc2VjdXJlIGNvbnRleHQgaXMgYmVpbmcgZGVhY3RpdmF0ZWQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgU01DIGludGVyYWN0aW9ucywgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGhhcmR3YXJlIG1hbnVhbHMsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBTTUMgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIE15IG1haW4gY29uY2VybiBpcyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIGluY29uc2lzdGVudCBtZW1vcnkgdmlld3MgZHVyaW5nIHRoZSBkZXRhY2ggcHJvY2Vzcy4gVGhlIGBkbWJgIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIGhlcmU7IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGJhcnJpZXIg4oCTIGlzIGl0IGEgZnVsbCBzeXN0ZW0gYmFycmllciwgb3IgYSBtb3JlIHNjb3BlZCBvbmU/IFVuZGVyc3RhbmRpbmcgdGhlIGJhcnJpZXIncyB0eXBlIHdpbGwgaW5mb3JtIG15IGFuYWx5c2lzIG9mIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIHZhcmlvdXMgcHJvY2Vzc29ycywgb3Igd2l0aGluIGEgc3BlY2lmaWMgc2VjdXJpdHkgY29udGV4dC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBtZW1vcnkgcmVnaW9ucyBpbnZvbHZlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZWQgZGF0YSwgRE1BIHRyYW5zZmVycywgb3Igc2hhcmVkIG1lbW9yeT8gVGhlc2UgZmFjdG9ycyB3aWxsIGRyaXZlIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZG1iYCBhZmZlY3RzIHN5bmNocm9uaXphdGlvbi4gSSdtIGFsc28gY29uc2lkZXJpbmcgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIFdoYXQgaWYgdGhlIGRldGFjaCBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgZG8gd2UgcmlzayBtZW1vcnkgY29ycnVwdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBlbnN1cmUgdGhlIFwiZGV0YWNoXCIgb3BlcmF0aW9uIGNvbXBsZXRlcyBzYWZlbHksIHBvdGVudGlhbGx5IHVzaW5nIHNlbWFwaG9yZXMsIG11dGV4ZXMgb3Igb3RoZXIgY29uY3VycmVuY3kgY29udHJvbCBtZWNoYW5pc21zLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbnN0cnVjdGlvbiBpcyB0cmlnZ2VyZWQuIElzIGl0IHNvZnR3YXJlLWluaXRpYXRlZCwgb3IgZG9lcyBpdCBvY2N1ciBpbiByZXNwb25zZSB0byBzb21lIGhhcmR3YXJlIGV2ZW50PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCB0cmlnZ2VycyB0aGUgY29tbWFuZCBhbmQgd2hhdCBhcmUgdGhlIGVmZmVjdHMgb2YgdGhpcyBvcGVyYXRpb24sIGhvdyBpcyB0aGlzIGhhbmRsZWQgaW4gYSBzZWN1cmUgZW5jbGF2ZSAoaWYgcHJlc2VudCksIGFuZCB3aGF0IGFyZSB0aGUgYXNzb2NpYXRlZCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/XG5cbkkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSBkZXRhY2hlZCBkZXZpY2UsIGFuZCB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBkZXZpY2UgZHJpdmVycyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gQW55IHJlbGF0ZWQgY29kZSBpcyBjcml0aWNhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgdGlnaHRseSBjb250cm9sbGVkIHNlcXVlbmNlIHRvIG1haW50YWluIHN5c3RlbSBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MzEuMTY4MzA4MDA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODU1NTg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2lzbV9kZXRhY2hfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xMjA4PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2RldGFjaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTIxNS1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTIxNjpcXHRzbWNfaXNtX2RldGFjaF9kbWIoc21jZCwgcGVlcl90b2tlbik7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyMTctXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz0yNzA9aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjkyLVxcbm5ldC9zbWMvc21jX2lzbS5jOjI5MzppbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXFxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTU0PWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5uZXQvc21jL3NtY19pc20uaC01NS1cXHRcXHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2lzbS5oOjU2OmludCBzbWNfaXNtX2RldGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbik7XFxubmV0L3NtYy9zbWNfaXNtLmgtNTctaW50IHNtY19pc21fc2lnbmFsX3NodXRkb3duKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MzEuNTUzODc4NDU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzQ4OTIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgXG4qICAgYGRpYnNfbG9fYXR0YWNoX2RtYmBcbiogICBgZGlic19sb19kZXRhY2hfZG1iYFxuKiAgIGBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iYFxuKiAgIGBzbWNfaXNtX2F0dGFjaF9kbWJgXG4qICAgYHNtY19pc21fZGV0YWNoX2RtYmBcblxuTm93LCB0aGUgY29uZmlnIGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AgYXJlIHRoZSBrZXkgb25lcyBoZXJlLiBXYWl0IGEgbWludXRlLCBgRElCU19MT2AgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBhY3RpdmF0ZXMgYGRpYnNfbG9vcGJhY2suY2AsIHJpZ2h0PyBMZXQncyB2ZXJpZnkgdGhhdCBgRElCU19MT2AgaXMgc3VmZmljaWVudC4gT2theSwgSSBzZWUgYERJQlNfTE9gIGRlcGVuZHMgb24gYERJQlNgLCBzbyBib3RoIG5lZWQgdG8gYmUgZW5hYmxlZC4gSSBrbm93IGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgc28gSSBuZWVkIGBTTUNgIGVuYWJsZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIGBTTUNgIGRlcGVuZHMgb24gYERJQlNgLiBZZXMsIEkgc2VlIHRoYXQuIEl0IGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNgLiBTbywgdGhhdCBjb25maXJtcyBpdDogYFNNQ2AsIGBESUJTYCwgYW5kIGBESUJTX0xPYCBhcmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYERJQlNfTE9gIGlzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQgZm9yIGBkaWJzX2xvb3BiYWNrLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDozNy4zMjg3NzQyOTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDkzMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2sub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19ESUJTKSArPSBkaWJzLm9cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6ODpkaWJzLSQoQ09ORklHX0RJQlNfTE8pICs9IGRpYnNfbG9vcGJhY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDozNy40MTU4NzkzNTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwODc4NTMwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgc2VlIGBkaWJzLSQoQ09ORklHX0RJQlNfTE8pICs9IGRpYnNfbG9vcGJhY2sub2AuIFRoYXQgdGVsbHMgbWUgYGRpYnNfbG9vcGJhY2sub2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBgZGlic2AgbW9kdWxlIG9ubHkgaWYgYENPTkZJR19ESUJTX0xPYCBpcyBlbmFibGVkLiBTbywgYERJQlNgIGFuZCBgRElCU19MT2AgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIHRoZSByZWxldmFudCBjb25maWdzLiAgYFNNQ2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYC4gU28sIHRoZSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYC4gSG93ZXZlciwgZm9yIGZ1enppbmcsIEknbSBnb2luZyB0byBvbmx5IGxpc3QgdGhlIGRpcmVjdCBjb25maWdzIGFuZCBhbnkgXCJub24tc3RhbmRhcmRcIiBwYXJlbnRzLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgc3RhbmRhcmQsIGJ1dCBgSU5GSU5JQkFORGAgaXMgYSBtb3JlIHNwZWNpYWxpemVkIG9wdGlvbi4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2guIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNoYW5nZSBpbiBsb2NraW5nLCBzaGlmdGluZyBmcm9tIGByZWFkX2xvY2tfYmhgIHRvIGB3cml0ZV9sb2NrX2JoYC4gIEZ1cnRoZXJtb3JlLCBpdCBzZWVtcyB0aGVyZSdzIGEgYnVnIGZpeCByZWxhdGVkIHRvIG5vZGUgcmVtb3ZhbCBmcm9tIGEgaGFzaCB0YWJsZSwgcG90ZW50aWFsbHkgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHJlZmNvdW50aW5nLiBUaGlzIGlzIGNydWNpYWw6IHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIOKAkyBgZGlic19sb2Ag4oCTIGFuZCB0aGF0IGVtdWxhdGVkIGRldmljZSBpcyAqcmVhY2hhYmxlKiBieSBgU01DYCBzb2NrZXRzLiAgVGhpcyBtZWFucyBpdCdzIGZ1bGx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlLiBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRvIHN1bW1hcml6ZSwgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldCBhcmU6XG5cbiogICBgZGlic19sb191bnJlZ2lzdGVyX2RtYmBcbiogICBgZGlic19sb19hdHRhY2hfZG1iYFxuKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgXG4qICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgXG4qICAgYHNtY19pc21fYXR0YWNoX2RtYmBcbiogICBgc21jX2lzbV9kZXRhY2hfZG1iYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6XG5cbiogICBgRElCU2BcbiogICBgRElCU19MT2BcbiogICBgU01DYFxuKiAgIGBJTkZJTklCQU5EYFxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGludm9sdmVzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVyIChgZGlic19sb29wYmFjay5jYCkgdXRpbGl6ZWQgYnkgdGhlIGBTTUNgIHByb3RvY29sLiBUaGlzIG1ha2VzIGl0IGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCdzIGVhc2lseSB0ZXN0YWJsZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLlxuXG5PbmUgZmluYWwgY2hlY2s6IExldCBtZSBjb25maXJtIHRoYXQgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy4gWWVzLCBpdCdzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIEV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBTeXprYWxsZXIgY2FuIHN0aWxsIHRhcmdldCBpdCwgZXNwZWNpYWxseSBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGlic19sb19vcHNgLiBBbHNvLCBpbmNsdWRpbmcgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGFuZCB0aGUgb3RoZXIgU01DIHJlbGF0ZWQgZnVuY3Rpb25zIGlzIHNtYXJ0IGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0IGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIERJQlMgZnVuY3Rpb25zLlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMiwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6NDkuNTAzNzM1MTY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1Nzc0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJcIixcbiAgICBcImRpYnNfbG9fYXR0YWNoX2RtYlwiLFxuICAgIFwiZGlic19sb19kZXRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2F0dGFjaF9kbWJcIixcbiAgICBcInNtY19pc21fZGV0YWNoX2RtYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2xvX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJkaWJzX2xvX2F0dGFjaF9kbWJcIixcbiAgICBcImRpYnNfbG9fZGV0YWNoX2RtYlwiLFxuICAgIFwic21jX2lzbV91bnJlZ2lzdGVyX2RtYlwiLFxuICAgIFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2RldGFjaF9kbWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIERJQlMgbG9vcGJhY2sgZHJpdmVyIChkaWJzX2xvb3BiYWNrLmMpLiBUaGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHVzZWQgYnkgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZm9yIGludHJhLU9TIGNvbW11bmljYXRpb24uIFNpbmNlIGl0IGlzIHNvZnR3YXJlLWVtdWxhdGVkLCBpdCBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2gvZGV0YWNoL3VucmVnaXN0ZXIgRE1CIGZ1bmN0aW9ucyBhbmQgdGhlaXIgU01DIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkfx65[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-27 19:29:14 +0000 UTC FinishedAt: 2026-07-27 19:50:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "53658c6f3682967a5e76ed4bc7462c4bdcddaec3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DIBS", "DIBS_LO", "SMC", "INFINIBAND" ], "series_id": "40f780a3-575e-4062-91a3-3f9724d548e0" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dibs_lo_unregister_dmb", "dibs_lo_attach_dmb", "dibs_lo_detach_dmb", "smc_ism_unregister_dmb", "smc_ism_attach_dmb", "smc_ism_detach_dmb" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWImIzM0OywKICAgICYjMzQ7ZGlic19sb19hdHRhY2hfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fZGV0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O3NtY19pc21fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBESUJTIGxvb3BiYWNrIGRyaXZlciAoZGlic19sb29wYmFjay5jKS4gVGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSB1c2VkIGJ5IHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGZvciBpbnRyYS1PUyBjb21tdW5pY2F0aW9uLiBTaW5jZSBpdCBpcyBzb2Z0d2FyZS1lbXVsYXRlZCwgaXQgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoL2RldGFjaC91bnJlZ2lzdGVyIERNQiBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZmI1NWE5MGIwY2M5N2JkNmE0ZmUyMjAwNzZmY2RmMDEyNGY1Nzc4ZlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjQ5OjEzIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5pbmRleCAwZjJlMDkzMTExNTI2Yi4uZmQ1Y2FmMWUxOWE4ZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5AQCAtMTE4LDE0ICYjNDM7MTE4LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxuIFx0cmV0dXJuIHJjO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCBfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuLVx0XHRcdFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXG4mIzQzO3N0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuJiM0MztcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbiB7XG4tXHQvKiByZW1vdmUgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbi1cdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuLVxuIFx0Y2xlYXJfYml0KGRtYl9ub2RlLVx1MDAzZXNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKTtcbiBcdGZvbGlvX3B1dCh2aXJ0X3RvX2ZvbGlvKGRtYl9ub2RlLVx1MDAzZWNwdV9hZGRyKSk7XG4gXHRrZnJlZShkbWJfbm9kZSk7XG5AQCAtMTM5LDI3ICYjNDM7MTM0LDMzIEBAIHN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuIFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xuIFx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRib29sIGxhc3Q7XG4gXG4gXHRsZGV2ID0gZGlicy1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdC8qIGZpbmQgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLVx1MDAzZWRtYl90b2spIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IGRtYi1cdTAwM2VkbWJfdG9rKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4tXHRpZiAoIWRtYl9ub2RlKVxuJiM0MztcdGlmICghZG1iX25vZGUpIHtcbiYjNDM7XHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdGxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbiYjNDM7XHRpZiAobGFzdClcbiYjNDM7XHRcdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuJiM0MztcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcbi1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSkge1xuJiM0MztcdGlmIChsYXN0KSB7XG4gXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmRpYnMtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0XHRkaWJzLVx1MDAzZWRtYl9jbGllbnRpZF9hcnJbZG1iX25vZGUtXHUwMDNlc2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDtcbiBcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiYjNDM7XHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCwxNCAmIzQzOzE4OSw5IEBAIHN0YXRpYyBpbnQgZGlic19sb19hdHRhY2hfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4gXHRcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdH1cbiYjNDM7XHRyZWZjb3VudF9pbmMoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbiBcdHJlYWRfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFxuLVx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSlcbi1cdFx0LyogdGhlIGRtYiBpcyBiZWluZyB1bnJlZ2lzdGVyZWQsIGJ1dCBoYXNcbi1cdFx0ICogbm90IGJlZW4gcmVtb3ZlZCBmcm9tIHRoZSBoYXNoIHRhYmxlLlxuLVx0XHQgKi9cbi1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tXG4gXHQvKiBwcm92aWRlIGRtYiBpbmZvcm1hdGlvbiAqL1xuIFx0ZG1iLVx1MDAzZWlkeCA9IGRtYl9ub2RlLVx1MDAzZXNiYV9pZHg7XG4gXHRkbWItXHUwMDNlZG1iX3RvayA9IGRtYl9ub2RlLVx1MDAzZXRva2VuO1xuQEAgLTIwOSwxMSAmIzQzOzIwNSwxMiBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcbiB7XG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4mIzQzO1x0Ym9vbCBsYXN0O1xuIFxuIFx0bGRldiA9IGRpYnMtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHQvKiBmaW5kIGRtYl9ub2RlIGFjY29yZGluZyB0byBkbWItXHUwMDNlZG1iX3RvayAqL1xuLVx0cmVhZF9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgdG9rZW4pIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IHRva2VuKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbkBAIC0yMjEsMTMgJiM0MzsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG4gXHRcdH1cbiBcdH1cbiBcdGlmICghZG1iX25vZGUpIHtcbi1cdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4mIzQzO1x0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4mIzQzO1x0bGFzdCA9IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpO1xuJiM0MztcdGlmIChsYXN0KVxuJiM0MztcdFx0aGFzaF9kZWwoXHUwMDI2ZG1iX25vZGUtXHUwMDNlbGlzdCk7XG4mIzQzO1x0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuJiM0MztcbiYjNDM7XHRpZiAobGFzdClcbiYjNDM7XHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFxuLVx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpKVxuLVx0XHRfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2xvX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtkaWJzX2xvX2RldGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV9kZXRhY2hfZG1iJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGZiNTVhOTBiMGNjOTdiZDZhNGZlMjIwMDc2ZmNkZjAxMjRmNTc3OGYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1bCAyNyAxOTo0OToxMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jCmluZGV4IDBmMmUwOTMxMTE1MjZiLi5mZDVjYWYxZTE5YThmOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jCkBAIC0xMTgsMTQgJiM0MzsxMTgsOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsCiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LAotCQkJCSAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKQomIzQzO3N0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LAomIzQzOwkJCSAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKQogewotCS8qIHJlbW92ZSBkbWIgZnJvbSBoYXNoIHRhYmxlICovCi0Jd3JpdGVfbG9ja19iaCgmYW1wO2xkZXYtJmd0O2RtYl9odF9sb2NrKTsKLQloYXNoX2RlbCgmYW1wO2RtYl9ub2RlLSZndDtsaXN0KTsKLQl3cml0ZV91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7Ci0KIAljbGVhcl9iaXQoZG1iX25vZGUtJmd0O3NiYV9pZHgsIGxkZXYtJmd0O3NiYV9pZHhfbWFzayk7CiAJZm9saW9fcHV0KHZpcnRfdG9fZm9saW8oZG1iX25vZGUtJmd0O2NwdV9hZGRyKSk7CiAJa2ZyZWUoZG1iX25vZGUpOwpAQCAtMTM5LDI3ICYjNDM7MTM0LDMzIEBAIHN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKQogCXN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTsKIAlzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKJiM0MzsJYm9vbCBsYXN0OwogCiAJbGRldiA9IGRpYnMtJmd0O2Rydl9wcml2OwogCiAJLyogZmluZCBkbWIgZnJvbSBoYXNoIHRhYmxlICovCi0JcmVhZF9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwl3cml0ZV9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUobGRldi0mZ3Q7ZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLSZndDtkbWJfdG9rKSB7CiAJCWlmICh0bXBfbm9kZS0mZ3Q7dG9rZW4gPT0gZG1iLSZndDtkbWJfdG9rKSB7CiAJCQlkbWJfbm9kZSA9IHRtcF9ub2RlOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7Ci0JaWYgKCFkbWJfbm9kZSkKJiM0MzsJaWYgKCFkbWJfbm9kZSkgewomIzQzOwkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwlsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7ZG1iX25vZGUtJmd0O3JlZmNudCk7CiYjNDM7CWlmIChsYXN0KQomIzQzOwkJaGFzaF9kZWwoJmFtcDtkbWJfbm9kZS0mZ3Q7bGlzdCk7CiYjNDM7CXdyaXRlX3VubG9ja19iaCgmYW1wO2xkZXYtJmd0O2RtYl9odF9sb2NrKTsKIAotCWlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtkbWJfbm9kZS0mZ3Q7cmVmY250KSkgewomIzQzOwlpZiAobGFzdCkgewogCQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2RpYnMtJmd0O2xvY2ssIGZsYWdzKTsKIAkJZGlicy0mZ3Q7ZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS0mZ3Q7c2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2RpYnMtJmd0O2xvY2ssIGZsYWdzKTsKIAotCQlfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpOwomIzQzOwkJZGlic19sb19mcmVlX2RtYihsZGV2LCBkbWJfbm9kZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMTg4LDE0ICYjNDM7MTg5LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX2F0dGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYikKIAkJcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KJiM0MzsJcmVmY291bnRfaW5jKCZhbXA7ZG1iX25vZGUtJmd0O3JlZmNudCk7CiAJcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiAKLQlpZiAoIXJlZmNvdW50X2luY19ub3RfemVybygmYW1wO2RtYl9ub2RlLSZndDtyZWZjbnQpKQotCQkvKiB0aGUgZG1iIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCwgYnV0IGhhcwotCQkgKiBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUuCi0JCSAqLwotCQlyZXR1cm4gLUVJTlZBTDsKLQogCS8qIHByb3ZpZGUgZG1iIGluZm9ybWF0aW9uICovCiAJZG1iLSZndDtpZHggPSBkbWJfbm9kZS0mZ3Q7c2JhX2lkeDsKIAlkbWItJmd0O2RtYl90b2sgPSBkbWJfbm9kZS0mZ3Q7dG9rZW47CkBAIC0yMDksMTEgJiM0MzsyMDUsMTIgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pCiB7CiAJc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlOwogCXN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjsKJiM0MzsJYm9vbCBsYXN0OwogCiAJbGRldiA9IGRpYnMtJmd0O2Rydl9wcml2OwogCiAJLyogZmluZCBkbWJfbm9kZSBhY2NvcmRpbmcgdG8gZG1iLSZndDtkbWJfdG9rICovCi0JcmVhZF9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwl3cml0ZV9sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCWhhc2hfZm9yX2VhY2hfcG9zc2libGUobGRldi0mZ3Q7ZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgdG9rZW4pIHsKIAkJaWYgKHRtcF9ub2RlLSZndDt0b2tlbiA9PSB0b2tlbikgewogCQkJZG1iX25vZGUgPSB0bXBfbm9kZTsKQEAgLTIyMSwxMyAmIzQzOzIxOCwxNyBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbikKIAkJfQogCX0KIAlpZiAoIWRtYl9ub2RlKSB7Ci0JCXJlYWRfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwkJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcmVhZF91bmxvY2tfYmgoJmFtcDtsZGV2LSZndDtkbWJfaHRfbG9jayk7CiYjNDM7CWxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoJmFtcDtkbWJfbm9kZS0mZ3Q7cmVmY250KTsKJiM0MzsJaWYgKGxhc3QpCiYjNDM7CQloYXNoX2RlbCgmYW1wO2RtYl9ub2RlLSZndDtsaXN0KTsKJiM0MzsJd3JpdGVfdW5sb2NrX2JoKCZhbXA7bGRldi0mZ3Q7ZG1iX2h0X2xvY2spOwomIzQzOwomIzQzOwlpZiAobGFzdCkKJiM0MzsJCWRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpOwogCi0JaWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdCgmYW1wO2RtYl9ub2RlLSZndDtyZWZjbnQpKQotCQlfX2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWIobGRldiwgZG1iX25vZGUpOwogCXJldHVybiAwOwogfQogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0NzAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEaWJzIExvb3BiYWNrIERyaXZlciBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCBmb3IgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBJbW1lZGlhdGVseSwgSSBzZWUgdGhhdCBpdCYjMzk7cyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGl0cyBEaWJzIE1lc3NhZ2UgQmxvY2sgKERNQikgbm9kZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhvc2Ugbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGhhc2ggdGFibGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgZml4LgoKVGhlIGtleSBjaGFuZ2UgSSBzZWUgaXMgdGhlIHJlcGxhY2VtZW50IG9mIGByZWFkX2xvY2tfYmhgIHdpdGggYHdyaXRlX2xvY2tfYmhgIGluIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAgd2hlbiBsb2NhdGluZyB0aGUgRE1CIG5vZGUuIFRoZSBoYXNoIHRhYmxlIGRlbGV0aW9uIGFsc28gbm93IG9jY3VycyB3aXRoaW4gdGhlIHdyaXRlIGxvY2sgb25seSBpZiBgcmVmY291bnRfZGVjX2FuZF90ZXN0YCB5aWVsZHMgYSBgdHJ1ZWAgdmFsdWUuIFRoaXMgaXMgYSB2ZXJ5IHNpZ25pZmljYW50IGNoYW5nZTsgaXQgc2hvd3MgdGhlIGludGVudCB0byBtYWtlIHRoZXNlIG9wZXJhdGlvbnMgdGhyZWFkLXNhZmUgaW4gYSBtb3JlIHJvYnVzdCB3YXkgYnkgdGFraW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIHRvIHByZXZlbnQgZGF0YSByYWNlcyBkdXJpbmcgdW5yZWdpc3RyYXRpb24gYW5kIGRldGFjaGluZy4gQWxzbywgdGhlIHJlbW92YWwgb2YgYF9fZGlic19sb191bnJlZ2lzdGVyX2RtYmAgYW5kIGl0cyByZXBsYWNlbWVudCB3aXRoIGBkaWJzX2xvX2ZyZWVfZG1iYCBpbmRpY2F0ZXMgcG90ZW50aWFsIHNpbXBsaWZpY2F0aW9uIG9yIHBlcmhhcHMgYSBzaGlmdCBpbiByZXNwb25zaWJpbGl0eSBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudC4KCkluIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCB0aGUgY2hhbmdlIGZyb20gYHJlZmNvdW50X2luY19ub3RfemVyb2AgdG8gYHJlZmNvdW50X2luY2Agd2l0aGluIHRoZSByZWFkIGxvY2sgYWxzbyBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl0IGNvdWxkIGJlIG9wdGltaXphdGlvbiBhcyBgcmVmY291bnRfaW5jYCBpcyBzaW1wbGVyIG9yIGlzIHVzZWQgdG8gZ3VhcmFudGVlIGFuIGluY3JlbWVudCBldmVuIGlmIHRoZSBjb3VudCBpcyB6ZXJvLCBwZXJoYXBzIGJlY2F1c2UgdGhlIGNvZGUgZXhwZWN0cyB0aGUgY291bnQgdG8gYmUgemVybyBpbiB0aGlzIHNwZWNpZmljIHBvaW50LgoKQmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIERpYnMgc3Vic3lzdGVtIGFjdHVhbGx5IGRvZXMsIHdoYXQgaXRzIHB1cnBvc2UgaXMsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdldHRpbmcgYSBoYW5kbGUgb24gaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwuIEkmIzM5O2xsIG5lZWQgdG8gcmVzZWFyY2ggdGhlIGRlZmluaXRpb24gb2YgdGhlIGBkaWJzYCBzdWJzeXN0ZW0gYW5kIGl0cyByZWxldmFudCBjb25maWd1cmF0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5kcml2ZXJzL2RpYnMvS2NvbmZpZzoyOmNvbmZpZyBESUJTXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xMy1cbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0xNS1cdGJvb2wgXCYjMzQ7SW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDI3OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgZGlzdGlsbGVkOgoKKipDaGVja2luZyBEZXBlbmRlbmNpZXMgZm9yIGRpYnMgRHJpdmVyIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCYjMzk7cyByZXF1aXJlZCB0byBlbmFibGUgb3IgY29uZmlndXJlIHRoaXMgYGRpYnNgIGRyaXZlci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaXZlIGludG8gdGhlIGBLY29uZmlnYCBmaWxlIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgdGhlaXIgZGVwZW5kZW5jaWVzIHNob3VsZCBiZSBkZWZpbmVkLiBJJiMzOTtsbCBvcGVuIHVwIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9ucy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcywgcGxhdGZvcm0gc3BlY2lmaWNzLCBhbmQgYW55IG90aGVyIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBkcml2ZXIuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgbWFnaWMgcmV2ZWFscyEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiAgIDI6XHRjb25maWcgRElCU1xuICAgMzpcdFx0dHJpc3RhdGUgXCYjMzQ7RGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcJiMzNDtcbiAgIDQ6XHRcdGRlZmF1bHQgblxuICAgNTpcdFx0aGVscFxuICAgNjpcdFx0ICBEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgKERJQlMpIGlzIGEgY29tbXVuaWNhdGlvbiBtZXRob2QgdGhhdFxuICAgNzpcdFx0ICB1c2VzIGNvbW1vbiBwaHlzaWNhbCAoaW50ZXJuYWwpIG1lbW9yeSBmb3Igc3luY2hyb25vdXMgZGlyZWN0IGFjY2Vzc1xuICAgODpcdFx0ICBpbnRvIGEgcmVtb3RlIGJ1ZmZlci5cbiAgIDk6XHRcbiAgMTA6XHRcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cbiAgMTE6XHRcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxuICAxMjpcdFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgRElCU19MT1xuICAxNTpcdFx0Ym9vbCBcJiMzNDtJbnRyYS1PUyBzaG9ydGN1dCB3aXRoIGRpYnMgbG9vcGJhY2tcJiMzNDtcbiAgMTY6XHRcdGRlcGVuZHMgb24gRElCU1xuICAxNzpcdFx0ZGVmYXVsdCBuXG4gIDE4Olx0XHRoZWxwXG4gIDE5Olx0XHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcbiAgMjA6XHRcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxuICAyMTpcdFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxuICAyMjpcdFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXG4gIDIzOlx0XHQgIGhhcmR3YXJlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3ODgKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxMTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgRElCUyBMb29wYmFjayoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IHR3byBjb25maWd1cmF0aW9uIG9wdGlvbnMgaGVyZTogYERJQlNgIGFuZCBgRElCU19MT2AuIFJpZ2h0LCBgRElCU19MT2AgLSB0aGF0JiMzOTtzIHRoZSBzb2Z0d2FyZS1lbXVsYXRlZCBESUJTIGRldmljZS4gSXQgbWFrZXMgcGVyZmVjdCBzZW5zZSBmb3IgZGF0YSB0cmFuc2ZlcnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGxvb3BiYWNrIGZlYXR1cmUgaXMgYnJpbGxpYW50IGZvciBjb252ZW5pZW50IHRlc3Rpbmcgb2YgRElCUyBjbGllbnRzLCBlc3BlY2lhbGx5IHNpbmNlIGl0JiMzOTtzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZS4gVGhhdCYjMzk7cyBhIGh1Z2Ugd2luIGZvciBwb3J0YWJpbGl0eSBpbiBvdXIgdGVzdGluZy4KClRoaXMgYERJQlNfTE9gIGlzICpwcmVjaXNlbHkqIHRoZSBraW5kIG9mIHRhcmdldCB3ZSB3YW50IHRvIGhpdCB3aXRoIGZ1enppbmcgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gTG93LWhhbmdpbmcgZnJ1aXQsIG1pbmltYWwgZGVwZW5kZW5jaWVzLCBhbmQgbGlrZWx5IHRvIGV4cG9zZSBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZXMgb3IgdnVsbmVyYWJpbGl0aWVzLgoKQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIHdoYXQgZnVuY3Rpb25zIGFyZSBleHBvc2VkIGJ5IHRoaXMgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgIG1vZHVsZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHdlIGNhbiBwb2tlIGF0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RpYnNfbG9fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNTpzdGF0aWMgY29uc3QgY2hhciBkaWJzX2xvX2Rldl9uYW1lW10gPSBcJiMzNDtsb1wmIzM0OztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjYtLyogZ2xvYmFsIGxvb3BiYWNrIGRldmljZSAqL1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNzpzdGF0aWMgc3RydWN0IGRpYnNfbG9fZGV2ICpsb19kZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyOTpzdGF0aWMgdTE2IGRpYnNfbG9fZ2V0X2ZhYnJpY19pZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDpzdGF0aWMgaW50IGRpYnNfbG9fcXVlcnlfcmdpZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIGNvbnN0IHV1aWRfdCAqcmdpZCxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUtXHRcdFx0ICAgICAgdTMyIHZpZF92YWxpZCwgdTMyIHZpZClcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQyLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo0MzpzdGF0aWMgaW50IGRpYnNfbG9fbWF4X2RtYnModm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDQte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDctXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQ4OnN0YXRpYyBpbnQgZGlic19sb19yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDktXHRcdFx0XHRzdHJ1Y3QgZGlic19jbGllbnQgKmNsaWVudClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTAte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MTpcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSwgKnRtcF9ub2RlO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MjpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTMtXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTIwLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjE6c3RhdGljIHZvaWQgZGlic19sb19mcmVlX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEyMjpcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTIzLXtcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEzMS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTMyOnN0YXRpYyBpbnQgZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzQ6XHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEzNTpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTM2LVx0dW5zaWduZWQgbG9uZyBmbGFncztcbi0tXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2Mi1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYzOlx0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY0LVx0fVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNjg6c3RhdGljIGludCBkaWJzX2xvX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTE2OS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzItXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3MzpzdGF0aWMgaW50IGRpYnNfbG9fYXR0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzQte1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxNzU6XHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3NjpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTc3LVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjAzLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMDQ6c3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwNS17XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIwNjpcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjA3Olx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMDgtXHRib29sIGxhc3Q7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMjktXHRpZiAobGFzdClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjMwOlx0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjMxLVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM0LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzU6c3RhdGljIGludCBkaWJzX2xvX21vdmVfZGF0YShzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCBkbWJfdG9rLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yMzYtXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaWR4LCBib29sIHNmLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM4LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjM5Olx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKnJtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNDA6XHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0MS1cdHUxNiBzX21hc2s7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzktXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4MDpzdGF0aWMgY29uc3Qgc3RydWN0IGRpYnNfZGV2X29wcyBkaWJzX2xvX29wcyA9IHtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjgxOlx0LmdldF9mYWJyaWNfaWQgPSBkaWJzX2xvX2dldF9mYWJyaWNfaWQsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4MjpcdC5xdWVyeV9yZW1vdGVfZ2lkID0gZGlic19sb19xdWVyeV9yZ2lkLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODM6XHQubWF4X2RtYnMgPSBkaWJzX2xvX21heF9kbWJzLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODQ6XHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NTpcdC51bnJlZ2lzdGVyX2RtYiA9IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NjpcdC5tb3ZlX2RhdGEgPSBkaWJzX2xvX21vdmVfZGF0YSxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6Mjg3Olx0LnN1cHBvcnRfbW1hcHBlZF9yZG1iID0gZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHksXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4ODpcdC5hdHRhY2hfZG1iID0gZGlic19sb19hdHRhY2hfZG1iLFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODk6XHQuZGV0YWNoX2RtYiA9IGRpYnNfbG9fZGV0YWNoX2RtYixcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjkwLX07XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5MS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjkyOnN0YXRpYyB2b2lkIGRpYnNfbG9fZGV2X2luaXQoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2KVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yOTMte1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjk5LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMDA6c3RhdGljIHZvaWQgZGlic19sb19kZXZfZXhpdChzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwMS17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMDUtXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwNjpzdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwNy17XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwODpcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzA5LVx0c3RydWN0IGRpYnNfZGV2ICpkaWJzO1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzIzLVx0ZGlicy1cdTAwM2VkcnZfcHJpdiA9IGxkZXY7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMyNDpcdGRpYnNfbG9fZGV2X2luaXQobGRldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyNS1cdHV1aWRfZ2VuKFx1MDAyNmRpYnMtXHUwMDNlZ2lkKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzI2Olx0ZGlicy1cdTAwM2VvcHMgPSBcdTAwMjZkaWJzX2xvX29wcztcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzI3LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjgtXHRkaWJzLVx1MDAzZWRldi5wYXJlbnQgPSBOVUxMO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjk6XHRkZXZfc2V0X25hbWUoXHUwMDI2ZGlicy1cdTAwM2VkZXYsIFwmIzM0OyVzXCYjMzQ7LCBkaWJzX2xvX2Rldl9uYW1lKTtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMwLVxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzQ1LVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDY6c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM0Ny17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTEtXHRkaWJzX2Rldl9kZWwobG9fZGV2LVx1MDAzZWRpYnMpO1xuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTI6XHRkaWJzX2xvX2Rldl9leGl0KGxvX2Rldik7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM1My1cdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MzU5PWludCBkaWJzX2xvb3BiYWNrX2luaXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzYxOlx0cmV0dXJuIGRpYnNfbG9fZGV2X3Byb2JlKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Mi19XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNjQ9dm9pZCBkaWJzX2xvb3BiYWNrX2V4aXQodm9pZClcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzY1LXtcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzY2Olx0ZGlic19sb19kZXZfcmVtb3ZlKCk7XG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Ny19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODA1NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDkwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLgoKKipBbmFseXppbmcgZGlicyBGcmFtZXdvcmsgT3BlcmF0aW9ucyoqCgpSaWdodCwgc28gSSYjMzk7bSBsb29raW5nIGF0IGhvdyB0aGUgYGRpYnNgIGZyYW1ld29yayB3b3Jrcywgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBEeW5hbWljIE1lbW9yeSBCdWZmZXJzIChETUJzKSBhcmUgbWFuYWdlZC4gSXQgbG9va3MgbGlrZSBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUsIGFuZCB0aGV5JiMzOTtyZSBhbGwgYnVuZGxlZCB0b2dldGhlciB3aXRoaW4gYGRpYnNfbG9fb3BzYC4gVGhhdCBgZGlic19sb19vcHNgIHN0cnVjdHVyZSBpcyB0aGVuIGFzc2lnbmVkIHRvIGBkaWJzLSZndDtvcHNgLiBTbywgdGhlIGBkaWJzYCBmcmFtZXdvcmsgZXNzZW50aWFsbHkgdXNlcyB0aGlzIHNldCBvZiBvcGVyYXRpb25zLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUsIGdpdmVuIGl0cyBkZXNpZ24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGEgd2VsbC1zdHJ1Y3R1cmVkIGRyaXZlciBvciBmcmFtZXdvcmsuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhlc2UgRE1CcyBhbmQgaG93IHRoZXkgaW50ZXJhY3Qgd2l0aCB0aGUgY29yZSBgZGlic2AgY29kZS4gVGhlcmVmb3JlLCBJIHdhbnQgdG8gdHJhY2UgdGhlIGNhbGxzLiBXaGVyZSBpcyBgZGlicy0mZ3Q7b3BzLSZndDt1bnJlZ2lzdGVyX2RtYmAgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFRoYXTigJlzIHdoZXJlIEkmIzM5O2xsIGdldCB0byBzZWUgdGhlIGFjdHVhbCBjb250ZXh0IGFuZCB1bmRlcnN0YW5kIHRoZSBsb2dpYyBhcm91bmQgdGhlIERNQiB1bnJlZ2lzdHJhdGlvbiBwcm9jZXNzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRoZSBjYWxsZXJzIG9mIHRoYXQgZnVuY3Rpb24sIGFzIHRoYXQgd2lsbCBwcm92aWRlIHRoZSBtb3N0IGluZm9ybWF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V1bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NDYxCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKlBvdGVudGlhbCBEZS1SZWdpc3RyYXRpb24gRnVuY3Rpb24qKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBkZS1yZWdpc3RyYXRpb24sIHNvIGEgY2FuZGlkYXRlIGZ1bmN0aW9uIGp1bXBzIHRvIG1pbmQ6IGBvcHMtJmd0O3VucmVnaXN0ZXJfZG1iYC4gSXQmIzM5O3MgYSBwbGF1c2libGUgY29udGVuZGVyLiBJJiMzOTttIGdvaW5nIHRvIHdhbnQgdG8gY2hlY2sgdGhlIGNvbnRleHQsIHRob3VnaCwgYmVmb3JlIEkgY29tbWl0IHRvIGl0IGJlaW5nIHRoZSBjb3JyZWN0IGZ1bmN0aW9uLiBXaGF0JiMzOTtzIHRoZSBzdXJyb3VuZGluZyBjb2RlIGRvaW5nLCBhbmQgd2hhdCYjMzk7cyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRldGFpbHMgb2YgdGhhdCBzdWJzeXN0ZW0uLi4gaXMgdGhpcyBhYm91dCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50PyBJZiBzbywgdGhpcyBmdW5jdGlvbiBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4uIEFsc28gSSYjMzk7bGwgaGF2ZSB0byBjb25zaWRlciBvdGhlciBkbWIgZnVuY3Rpb25zIHdoaWNoIGNvdWxkIGJlIGFwcGxpY2FibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg2ODcKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgdGhlIG9uZSB0aGlua2luZyBpdDoKCioqRGlnZ2luZyBpbnRvIHRoZSBkaWJzIERyaXZlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHVucmVnaXN0ZXJfZG1iYC4gR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIGRldmljZSBkcml2ZXJzLCB0aGUgZmlyc3QgcGxhY2UgSSYjMzk7ZCBjaGVjayBpcyB3aXRoaW4gdGhlIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHN0YXJ0aW5nIHBvaW50IGdpdmVuIHRoZSB0ZXJtIGBkbWJgIChEZXZpY2UgTWVtb3J5IEJhcnJpZXIpIGFuZCBkcml2ZXJzLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIHF1aWNrIHNlYXJjaCBpbiB0aGVyZSBhbmQgc2VlIHdoYXQgY29tZXMgdXAuIFRoaXMgc2hvdWxkIGJlIHN0cmFpZ2h0Zm9yd2FyZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5yZWdpc3Rlcl9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTIxPXN0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxuLS1cbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTMxLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTEzMy17XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yODA9c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XG4tLVxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yODQtXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NTpcdC51bnJlZ2lzdGVyX2RtYiA9IGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWIsXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4Ni1cdC5tb3ZlX2RhdGEgPSBkaWJzX2xvX21vdmVfZGF0YSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTEzNwoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBNaXNzaW5nIGB1bnJlZ2lzdGVyX2RtYmAgQ2FsbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGFuZCBJJiMzOTt2ZSBub3RpY2VkIHRoYXQgYHVucmVnaXN0ZXJfZG1iYCBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGV4cGxpY2l0bHkgY2FsbGVkIGFueXdoZXJlIHdpdGhpbiBpdC4gVGhhdCYjMzk7cyBhIGJpdCBvZGQ7IHVzdWFsbHksIHlvdSYjMzk7ZCBleHBlY3QgYSBmdW5jdGlvbiBsaWtlIHRoYXQgdG8gYmUgcGFpcmVkIHdpdGggaXRzIGNvdW50ZXJwYXJ0LCBsaWtlIGEgcmVnaXN0ZXIvdW5yZWdpc3RlciBwYWlyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpZyBpbnRvIHRoZSBoZWFkZXIgZmlsZXMgdG8gc2VlICp3aGVyZSogaXQgaXMgYmVpbmcgY2FsbGVkLCBhcyBpZiBpdCBpc24mIzM5O3Qgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGl0IG11c3QgZXhpc3QgYXMgYSBwdWJsaWMgbWV0aG9kLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCB0aGUgb2J2aW91cyBwbGFjZXM6IGBpbmNsdWRlL2xpbnV4L2RpYnMuaGAgYW5kIGBpbmNsdWRlL25ldC9kaWJzLmhgLiBJJiMzOTtsbCBhbHNvIGdsYW5jZSBhdCBhbnl0aGluZyBzaW1pbGFyIHRoYXQgbWlnaHQgY29udGFpbiB0aGUgcHJvdG90eXBlLCBqdXN0IHRvIGJlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRldmljZSBtYW5hZ2VtZW50IGJsb2NrIGlzIGJlaW5nIGhhbmRsZWQuIExldCYjMzk7cyBzZWUgd2hhdCB0aGVzZSBoZWFkZXJzIHJldmVhbC4gSSBiZXQgaXQgaXMgbG9jYXRlZCB0aGVyZSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dW5yZWdpc3Rlcl9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc0LVx0LyoqXG5pbmNsdWRlL2xpbnV4L2RpYnMuaDoyNzU6XHQgKiB1bnJlZ2lzdGVyX2RtYigpIC0gdW5yZWdpc3RlciBhbmQgZnJlZSBhIGRtYlxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc2LVx0ICogQGRldjogZGlicyBkZXZpY2Vcbi0tXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yODUtXHQgKi9cbmluY2x1ZGUvbGludXgvZGlicy5oOjI4NjpcdGludCAoKnVucmVnaXN0ZXJfZG1iKShzdHJ1Y3QgZGlic19kZXYgKmRldiwgc3RydWN0IGRpYnNfZG1iICpkbWIpO1xuaW5jbHVkZS9saW51eC9kaWJzLmgtMjg3LVx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2MjEKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAzMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOgoKKipBbmFseXppbmcgdGhlIGRpYnNfZGV2X29wcyBzdHJ1Y3R1cmUgYW5kIHVucmVnaXN0ZXJfZG1iIGNhbGwqKgoKT2theSwgc28gYGRpYnNfZGV2X29wc2AgaXMgZGVmaW5lZCBpbiBgaW5jbHVkZS9saW51eC9kaWJzLmhgLiBUaGF0JiMzOTtzIHN0YW5kYXJkIHByYWN0aWNlLCBwdXR0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIGEgaGVhZGVyIGZpbGUgZm9yIG90aGVyIG1vZHVsZXMgdG8gdXNlLiBUaGF0JiMzOTtzIGdvb2QuIE5vdywgdGhlIG1vcmUgaW50ZXJlc3RpbmcgcXVlc3Rpb24gaXMgd2hvIGNhbGxzIGB1bnJlZ2lzdGVyX2RtYmA/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBsaWZlY3ljbGUgb2YgdGhpcyB0aGluZy4gS25vd2luZyB3aGVyZSBpdCYjMzk7cyBkZWZpbmVkIGlzIGp1c3QgdGhlIHN0YXJ0aW5nIHBvaW50LCB0aGUgdXNlIGlzIG1vcmUgaW1wb3J0YW50LiBJcyB0aGlzIGNhbGwgcGFydCBvZiB0aGUgbW9kdWxlIHRlYXJkb3duPyBJcyBpdCBjYWxsZWQgd2hlbiBhIGRldmljZSBpcyByZW1vdmVkPyBPciBpcyBpdCBtb3JlIGR5bmFtaWMgdGhhbiB0aGF0PyBUaGUgZmFjdCB0aGF0IEkgZG9uJiMzOTt0IGluc3RhbnRseSBrbm93IHdoZXJlIHRvIGxvb2sgc3VnZ2VzdHMgdGhpcyBpc24mIzM5O3QgaW1tZWRpYXRlbHkgb2J2aW91cywgc28gSSYjMzk7bGwgbmVlZCB0byB1c2Ugc29tZSB0b29scyB0byB0cmFjZSBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHVzZSBjYXNlIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudC4gVGhhdCBgdW5yZWdpc3Rlcl9kbWJgIGNhbGwgaXMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyBgZGlic19kZXZfb3BzYCBpcyBpbnRlZ3JhdGVkIHdpdGggdGhlIGxhcmdlciBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V1bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yMTU9dm9pZCBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBzbWNkX2RldiAqc21jZCxcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yMjktXG5uZXQvc21jL3NtY19pc20uYzoyMzA6XHRzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iKHNtY2QtXHUwMDNlZGlicywgXHUwMDI2ZG1iKTtcbm5ldC9zbWMvc21jX2lzbS5jLTIzMS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAwMzUKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiA0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipEaWdnaW5nIGludG8gdGhlIFNNQyBEZXRhY2htZW50IExvZ2ljKioKClJpZ2h0LCBzbyBJIHNlZSBgbmV0L3NtYy9zbWNfaXNtLmNgIGlzIGNhbGxpbmcgYHNtY2QtJmd0O2RpYnMtJmd0O29wcy0mZ3Q7dW5yZWdpc3Rlcl9kbWJgLiBUaGF0IGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXTigJlzIHRoZSB1bnJlZ2lzdHJhdGlvbiBvZiB0aGUgZGVkaWNhdGVkIG1lbW9yeSBidWZmZXIgKERNQikgdGhhdCYjMzk7cyBrZXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBob3cgdGhlIERNQiBpcyAqYXR0YWNoZWQqIGFuZCAqZGV0YWNoZWQqLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIg4oCTIEkmIzM5O20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBgYXR0YWNoX2RtYmAgYW5kIGBkZXRhY2hfZG1iYCBmdW5jdGlvbnMuIFRob3NlIGFyZSB0aGUgZnVuY3Rpb25zIHRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjb250ZXh0dWFsIGZvdW5kYXRpb24gSSBuZWVkLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGV5IGludGVyYWN0IHdpdGggYHVucmVnaXN0ZXJfZG1iYCBhbmQgdWx0aW1hdGVseSB3aGF0IHRoaXMgdGVsbHMgbWUgYWJvdXQgdGhlIGNvbm5lY3Rpb24gcHJvY2Vzcy4gSXQmIzM5O3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2VhdHRhY2hfZG1iJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2lzbS5jPTI3MD1pbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjc1LVxubmV0L3NtYy9zbWNfaXNtLmM6Mjc2Olx0aWYgKCFkZXYtXHUwMDNlZGlicy1cdTAwM2VvcHMtXHUwMDNlYXR0YWNoX2RtYilcbm5ldC9zbWMvc21jX2lzbS5jLTI3Ny1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmMtMjgwLVx0ZG1iLmRtYl90b2sgPSB0b2tlbjtcbm5ldC9zbWMvc21jX2lzbS5jOjI4MTpcdHJjID0gZGV2LVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZWF0dGFjaF9kbWIoZGV2LVx1MDAzZWRpYnMsIFx1MDAyNmRtYik7XG5uZXQvc21jL3NtY19pc20uYy0yODItXHRpZiAoIXJjKSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNTMyCgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHNwZWFraW5nIGZyb20gYSBmaXJzdC1wZXJzb24gZXhwZXJ0IHBlcnNwZWN0aXZlLCBhbmQgc3RhcnRpbmcgd2l0aCBhIGJvbGRlZCBoZWFkZXI6CgoqKkFuYWx5emluZyBgZGV0YWNoX2RtYmAqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBkZXRhY2hfZG1iYCBjYWxsLi4uIGltbWVkaWF0ZWx5LCBteSBtaW5kIHN0YXJ0cyB0cmFjaW5nIGJhY2sgdGhyb3VnaCB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGl0IGxpa2VseSBpbXBhY3RzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgYWN0aW9uLiBHaXZlbiB0aGF0IEkmIzM5O20gZGVhbGluZyB3aXRoIGEgRGlnaXRhbCBNZWRpYSBCdWZmZXIgKERNQiksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICp3aGF0JiMzOTtzIHRoZSBjdXJyZW50IHN0YXRlIG9mIHRoZSBidWZmZXI/KiBJcyBpdCBpbiB1c2U/IElzIHRoZXJlIGEgcGVuZGluZyBvcGVyYXRpb24/IEFyZSBhbnkgY2xpZW50cyBjdXJyZW50bHkgcmVmZXJlbmNpbmcgaXQ/CgpJ4oCZbSBhbHJlYWR5IGNvbnNpZGVyaW5nIHRoZSBwb3RlbnRpYWwgZm9yIHJlc291cmNlIGxlYWtzIGlmIHRoaXMgYGRldGFjaGAgb3BlcmF0aW9uIGlzbiYjMzk7dCBoYW5kbGVkIGNhcmVmdWxseSwgb3IgcmFjZSBjb25kaXRpb25zIGlmIGl0JiMzOTtzIGJlaW5nIHVzZWQgY29uY3VycmVudGx5LiBJJiMzOTttIHdvbmRlcmluZyBhYm91dCB0aGUgYnVmZmVy4oCZcyBvd25lcnNoaXAgbW9kZWwg4oCTIElzIGl0IHJlZmVyZW5jZS1jb3VudGVkPyBEb2VzIGl0IGhhdmUgYSBwYXJlbnQvY2hpbGQgcmVsYXRpb25zaGlwIHdpdGggb3RoZXIgYnVmZmVycz8gSG93IGlzIG1lbW9yeSBhbGxvY2F0ZWQgYW5kIGRlYWxsb2NhdGVkPyBEb2VzIHRoaXMgZnVuY3Rpb24gbWFuYWdlIGFueSBtZXRhZGF0YSwgZmxhZ3MsIG9yIGhhbmRsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBidWZmZXI/CgpUaGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdOKAmXMgc2V2ZXJpbmcgYSBsaW5rLCBicmVha2luZyBhbiBhc3NvY2lhdGlvbi4gQnV0ICp3aGljaCogbGluaz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBkb3duIHRoZSBsaW5lIGZvciB0aGF0IGxpbmtlZCBhc3NvY2lhdGlvbj8gVGhlIGNvbnRleHQgb2YgdGhlIGNhbGwgaXMgY3JpdGljYWwuIEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgc2ltcGxlIHBvaW50ZXIgZGVyZWZlcmVuY2UsIGEgaGFuZGxlIHJlbGVhc2UsIG9yIGlzIGl0IHNvbWV0aGluZyBtb3JlIGludm9sdmVkPyBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3RlbnRpYWwgaW1wYWN0IHRvIGFzc29jaWF0ZWQgbWVtb3J5IG1hbmFnZW1lbnQsIGVycm9yIGhhbmRsaW5nLCBhbmQgcGVyaGFwcyB0aHJlYWQgc3luY2hyb25pemF0aW9uIHRoYXQgbWF5IGJlIGFmZmVjdGVkLgoKTXkgdGhvdWdodCBwcm9jZXNzIHF1aWNrbHkgc2hpZnRzIHRvIHRoZSBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoaXMgYGRldGFjaGAgZmFpbHM/IEFyZSBleGNlcHRpb25zIHRocm93biwgcmV0dXJuIGNvZGVzIHByb3ZpZGVkLCBvciBzb21lIG90aGVyIG1lY2hhbmlzbSB1c2VkIHRvIHNpZ25hbCB0aGUgcHJvYmxlbT8gQW5kIGhvdyByb2J1c3QgaXMgdGhlIGVycm9yIGhhbmRsaW5nPyBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSByZXN0IG9mIHRoZSBhcHBsaWNhdGlvbj8gSXMgdGhlcmUgYSBwb3NzaWJpbGl0eSBvZiBtZW1vcnkgY29ycnVwdGlvbiBvciB1bmRlZmluZWQgYmVoYXZpb3I/CgpJJiMzOTttIHN0YXJ0aW5nIHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiB0aGUgcG9zc2libGUgY2FsbCBwYXRocyBhbmQgcG90ZW50aWFsIGZhaWx1cmUgc2NlbmFyaW9zLCB0cnlpbmcgdG8gYXNzZXNzIHRoZSBpbXBhY3Qgb2YgdGhpcyBgZGV0YWNoX2RtYmAgY2FsbCBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIHN5c3RlbS4gVGhlIGRldmlsLCBhcyBhbHdheXMsIGlzIGluIHRoZSBkZXRhaWxzLiBJIG5lZWQgdG8gZGlnIGRlZXBlciwgcmV2aWV3IHRoZSBzdXJyb3VuZGluZyBjb2RlLCBhbmQgaG9wZWZ1bGx5IGZpbmQgc29tZSBkb2N1bWVudGF0aW9uIHRvIGJlIHN1cmUgSSB1bmRlcnN0YW5kIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDstXHUwMDNlZGV0YWNoX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19pc20uYz0yOTM9aW50IHNtY19pc21fZGV0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuKVxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcbm5ldC9zbWMvc21jX2lzbS5jOjI5NTpcdGlmICghZGV2LVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZWRldGFjaF9kbWIpXG5uZXQvc21jL3NtY19pc20uYy0yOTYtXHRcdHJldHVybiAtRUlOVkFMO1xubmV0L3NtYy9zbWNfaXNtLmMtMjk3LVxubmV0L3NtYy9zbWNfaXNtLmM6Mjk4Olx0cmV0dXJuIGRldi1cdTAwM2VkaWJzLVx1MDAzZW9wcy1cdTAwM2VkZXRhY2hfZG1iKGRldi1cdTAwM2VkaWJzLCB0b2tlbik7XG5uZXQvc21jL3NtY19pc20uYy0yOTktfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTIxOAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIG5ldHdvcmtpbmcgYW5kIFNNQzoKCioqSW52ZXN0aWdhdGluZyB0aGUgRGVwZW5kZW5jeSBvZiBTTUMgb24gRElCUyoqCgpSaWdodCwgc28gYGRpYnNgIGlzIGEga2V5IGNvbmNlcHQgd2l0aGluIFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMsIG9yIGBTTUNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgdHdvLiBNeSBmaXJzdCBpbnN0aW5jdCwgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBpcyB0byBjaGVjayBgbmV0L3NtYy9LY29uZmlnYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBTTUMgZmVhdHVyZXMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSYjMzk7bGwgc2NhbiB0aGF0IGZpbGUgdG8gY29uZmlybSBpZiBgU01DYCBhY3R1YWxseSBoYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBvbiBgRElCU2AuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgd2hhdCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJldmVhbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RElCUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL0tjb25maWc9Mj1jb25maWcgU01DXG5uZXQvc21jL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG5uZXQvc21jL0tjb25maWc6NDpcdGRlcGVuZHMgb24gSU5FVCBcdTAwMjZcdTAwMjYgSU5GSU5JQkFORCBcdTAwMjZcdTAwMjYgRElCU1xubmV0L3NtYy9LY29uZmlnLTUtXHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNTEzCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6CgoqKlNNQyYjMzk7cyBEZXBlbmRlbmNpZXM6IFRpbWUgdG8gRGlnIEluKioKCk9rYXksIHNvIGBTTUNgIHJlbGllcyBvbiBgRElCU2A/IFRoYXQmIzM5O3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYmV0dGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGlzIHRoZSBrZXksIHNvIGxldCYjMzk7cyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlOiBgbmV0L3NtYy9LY29uZmlnYC4gVGhpcyBmaWxlIGxpa2VseSBzcGVsbHMgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSBidWlsZCBvcHRpb25zLCBhbmQgaG93IHRoZXNlIHR3byBjb21wb25lbnRzLCBgU01DYCBhbmQgYERJQlNgLCBpbnRlcmFjdC4gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhlIHJlbGV2YW50IHNlY3Rpb25zIGluIGBLY29uZmlnYCB0byBzZWUgZXhhY3RseSB3aGF0IGNvbmRpdGlvbnMgdHJpZ2dlciB0aGUgZGVwZW5kZW5jeSBhbmQgd2hhdCBpdCBpbXBsaWVzIGFib3V0IHRoZSBvdmVyYWxsIHN5c3RlbSBjb25maWd1cmF0aW9uLiBUaW1lIHRvIHB1dCBvbiBteSBkZXRlY3RpdmUgaGF0IGFuZCBzZWUgd2hhdCBzZWNyZXRzIHRoaXMgY29uZmlndXJhdGlvbiBmaWxlIGhvbGRzISBVbmRlcnN0YW5kaW5nIHRoZSBLY29uZmlnIGRlcGVuZGVuY2llcyBoZXJlIHdpbGwgY2xhcmlmeSB0aGUgd2hvbGUgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9zbWMvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuICAgMjpcdGNvbmZpZyBTTUNcbiAgIDM6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQyBzb2NrZXQgcHJvdG9jb2wgZmFtaWx5XCYjMzQ7XG4gICA0Olx0XHRkZXBlbmRzIG9uIElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNcbiAgIDU6XHRcdGhlbHBcbiAgIDY6XHRcdCAgU01DLVIgcHJvdmlkZXMgYSBcJiMzNDtzb2NrZXRzIG92ZXIgUkRNQVwmIzM0OyBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXG4gICA3Olx0XHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxuICAgODpcdFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxuICAgOTpcdFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXG4gIDEwOlx0XHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlbGVjdCB0aGlzIG9wdGlvbiBpZiB5b3Ugd2FudCB0byBydW4gU01DIHNvY2tldCBhcHBsaWNhdGlvbnNcbiAgMTM6XHRcbiAgMTQ6XHRjb25maWcgU01DX0RJQUdcbiAgMTU6XHRcdHRyaXN0YXRlIFwmIzM0O1NNQzogc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlXCYjMzQ7XG4gIDE2Olx0XHRkZXBlbmRzIG9uIFNNQ1xuICAxNzpcdFx0aGVscFxuICAxODpcdFx0ICBTdXBwb3J0IGZvciBTTUMgc29ja2V0IG1vbml0b3JpbmcgaW50ZXJmYWNlIHVzZWQgYnkgdG9vbHMgc3VjaCBhc1xuICAxOTpcdFx0ICBzbWNzcy5cbiAgMjA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMTkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiA0NjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb246IERJQlMgTG9vcGJhY2sgZm9yIFNNQyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIHllYWgsIGl0IG1vZGlmaWVzIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gVGhhdCYjMzk7cyBhIHNvZnR3YXJlIGxvb3BiYWNrIGRldmljZSBmb3IgYERJQlNgLCB3aGljaCwgbmF0dXJhbGx5LCBgU01DYCBkZXBlbmRzIG9uLiBUaGUgbG9vcGJhY2sgaXMgZW5hYmxlZCB2aWEgYENPTkZJR19ESUJTX0xPYCwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciB2aXJ0dWFsaXplZCB0ZXN0aW5nIGVudmlyb25tZW50cy4KClRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBmaXhpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAuICBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGBTTUNgIHNvY2tldHMsIHRoaXMgcGF0Y2ggc2NyZWFtcyAmIzM0O2Z1enogbWUmIzM0OyEKCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IG91ciB0YXJnZXQgc3ltYm9scyBmb3IgZnV6emluZy4gV2UmIzM5O3ZlIGdvdDoKCiogICBgZGlic19sb19mcmVlX2RtYmAgKHN0YXRpYykKKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYWthIG9wcykKKiAgIGBkaWJzX2xvX2F0dGFjaF9kbWJgIChzdGF0aWMsIGJ1dCBjYWxsZWQgdmlhIG9wcykKKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgIChzdGF0aWMsIGJ1dCBjYWxsZWQgdmlhIG9wcykKCkkgd2FzIGluaXRpYWxseSBhIGJpdCBjb25jZXJuZWQgYWJvdXQgc3RhdGljIGZ1bmN0aW9ucyBiZWluZyBpbmxpbmVkIGFuZCB0aHVzIHVucmVhY2hhYmxlIGJ5IHN5emthbGxlci4gSG93ZXZlciwgc2luY2UgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBhcmUgYXNzaWduZWQgdG8gYGRpYnNfbG9fb3BzYCwgSSBjYW4gY29uY2x1ZGUgdGhhdCB0aGV5IGFyZSBub3QgaW5saW5lZC4gSW4gYWRkaXRpb24sIEkgd2lsbCB2ZXJpZnkgdGhhdCBgc3l6a2FsbGVyYCBjYW4gdGFyZ2V0IHN1Y2ggZnVuY3Rpb25zLiBCdXQgcmVnYXJkbGVzcywgc2luY2UgdGhleSBhcmUgY2FsbGVkIHZpYSBvcHMsIHRhcmdldGluZyB0aGVzZSBmdW5jdGlvbnMgaXMgbGVzcyBpZGVhbCB0aGFuIHRhcmdldGluZyB0aGUgZnVuY3Rpb25zIHRoYXQgY2FsbCB0aGVtLgoKU28sIHNpbmNlIHRoZXNlIGBkaWJzX2xvX2AgZnVuY3Rpb25zIGFyZSB1c2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgIGxvb2sgbGlrZSBzb2xpZCB0YXJnZXRzLgoKTm93LCBsZXQmIzM5O3MgZmluZCB0aGUgYFNNQ2AgY291bnRlcnBhcnRzLiBBZnRlciBhIHF1aWNrIHNjYW4sIEkmIzM5O3ZlIGlkZW50aWZpZWQ6CgoqICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgCiogICBgc21jX2lzbV9hdHRhY2hfZG1iYAoqICAgYHNtY19pc21fZGV0YWNoX2RtYmAKClRpbWUgdG8gY2hlY2sgaWYgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9zbWMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9zbWMvc21jX2NvcmUuYz0xNDA5PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2ZyZWUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgaXNfZG1iLFxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xNDE0LVx0XHRidWZfZGVzYy1cdTAwM2VsZW4gJiM0Mzs9IHNpemVvZihzdHJ1Y3Qgc21jZF9jZGNfbXNnKTtcbm5ldC9zbWMvc21jX2NvcmUuYzoxNDE1Olx0XHRzbWNfaXNtX3VucmVnaXN0ZXJfZG1iKGxnci1cdTAwM2VzbWNkLCBidWZfZGVzYyk7XG5uZXQvc21jL3NtY19jb3JlLmMtMTQxNi1cdH0gZWxzZSB7XG4tLVxubmV0L3NtYy9zbWNfaXNtLmM9MTc5PWludCBzbWNfaXNtX3B1dF92bGFuKHN0cnVjdCBzbWNkX2RldiAqc21jZCwgdW5zaWduZWQgc2hvcnQgdmxhbmlkKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTIxNC1cbm5ldC9zbWMvc21jX2lzbS5jOjIxNTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxubmV0L3NtYy9zbWNfaXNtLmMtMjE2LVx0XHRcdCAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcbi0tXG5uZXQvc21jL3NtY19pc20uaD00OT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBidWZfc2l6ZSxcbm5ldC9zbWMvc21jX2lzbS5oLTUwLVx0XHRcdCBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XG5uZXQvc21jL3NtY19pc20uaDo1MTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsXG5uZXQvc21jL3NtY19pc20uaC01Mi1cdFx0XHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OQoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIER5bmFtaWMgTWVtb3J5IEJhcnJpZXIgKERNQikgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgZnVuY3Rpb24sIGFuZCBpdCYjMzk7cyBpbW1lZGlhdGVseSBhcHBhcmVudCB0aGF0IGl0JiMzOTtzICpub3QqIGEgc3RhdGljIGVudGl0eS4gVGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE5vdywgd2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbj8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC4KClRoYXQgdGhlbiBicmluZ3MgdXAgcXVlc3Rpb25zIGFib3V0IGl0cyBjb3VudGVycGFydHMuIFdoYXQgYWJvdXQgYHNtY19pc21fYXR0YWNoX2RtYmAgYW5kIGBzbWNfaXNtX2RldGFjaF9kbWJgPyBBcmUgdGhleSBzaW1pbGFybHkgZHluYW1pYz8gQXJlIHRoZXkgYWxzbyBzdWJqZWN0IHRvIHRoZSBzYW1lIGRlc2lnbiBjb25zaWRlcmF0aW9ucyBiYXNlZCBvbiB0aGVpciBsYWNrIG9mIHN0YXRpYyBzdGF0dXM/IFdoYXQgYXJlIHRoZSBjYWxsaW5nIGFuZCB1c2FnZSBwYXR0ZXJucz8gQXJlIHdlIGRlYWxpbmcgd2l0aCBkeW5hbWljIHJlZ2lzdHJhdGlvbi9kZXJlZ2lzdHJhdGlvbiBvZiBtZW1vcnkgYmFycmllcnMgaGVyZT8gSWYgc28sIHdoYXQgYXJlIHRoZSBpbXBsaWNhdGlvbnMgb24gc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgYW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnM/IEkgbmVlZCB0byBleGFtaW5lIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhbGwgdGhyZWUgYW5kIGhvdyB0aGV5JiMzOTtyZSBpbnRlbmRlZCB0byBmdW5jdGlvbiBhcyBhIHdob2xlLiBUaW1lIHRvIGRpdmUgZGVlcGVyIGFuZCBhbmFseXplIHRoZSBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MjU3Nz1pbnQgc21jZF9idWZfYXR0YWNoKHN0cnVjdCBzbWNfc29jayAqc21jKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0yNTkzLVx0ICovXG5uZXQvc21jL3NtY19jb3JlLmM6MjU5NDpcdHJjID0gc21jX2lzbV9hdHRhY2hfZG1iKHNtY2QsIHBlZXJfdG9rZW4sIGJ1Zl9kZXNjKTtcbm5ldC9zbWMvc21jX2NvcmUuYy0yNTk1LVx0aWYgKHJjKVxuLS1cbm5ldC9zbWMvc21jX2lzbS5jPTI2MD1ib29sIHNtY19pc21fc3VwcG9ydF9kbWJfbm9jb3B5KHN0cnVjdCBzbWNkX2RldiAqc21jZClcbi0tXG5uZXQvc21jL3NtY19pc20uYy0yNjktXG5uZXQvc21jL3NtY19pc20uYzoyNzA6aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxubmV0L3NtYy9zbWNfaXNtLmMtMjcxLVx0XHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpXG4tLVxubmV0L3NtYy9zbWNfaXNtLmg9NTM9Ym9vbCBzbWNfaXNtX3N1cHBvcnRfZG1iX25vY29weShzdHJ1Y3Qgc21jZF9kZXYgKnNtY2QpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTQ6aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxubmV0L3NtYy9zbWNfaXNtLmgtNTUtXHRcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MTM1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkFuYWx5emluZyBgc21jX2lzbV9kZXRhY2hfZG1iYCoqCgpSaWdodCwgbGV0JiMzOTtzIGJyZWFrIGRvd24gdGhpcyBpZGVhLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoYXQgYHNtY19pc21fZGV0YWNoX2RtYmAgbGlrZWx5IGluZGljYXRlcyBhIHNwZWNpZmljIHN5c3RlbSBtYW5hZ2VtZW50IGNvbnRyb2xsZXIgKFNNQykgaW5zdHJ1Y3Rpb24gc2VxdWVuY2UsIHBvdGVudGlhbGx5IHJlbGF0ZWQgdG8gZGV0YWNoaW5nIG9yIGRpc2Nvbm5lY3RpbmcgYSBkZXZpY2UsIHdpdGggbWVtb3J5IGJhcnJpZXIgc2VtYW50aWNzIGluZGljYXRlZCBieSBgZG1iYC4gVGhlIHVzZSBvZiBgaXNtYCBsaWtlbHkgaW1wbGllcyBhIG1lbW9yeSBpc29sYXRpb24gc3RyYXRlZ3kgaW52b2x2ZWQgaW4gdGhpcyBwcm9jZWR1cmUuIFRoZSAmIzM0O2RldGFjaCYjMzQ7IHBhcnQgc3VnZ2VzdHMgc29tZXRoaW5nIGlzIGJlaW5nIHJlbW92ZWQsIHBlcmhhcHMgYSBwZXJpcGhlcmFsLCBvciBzb21lIHNlY3VyZSBjb250ZXh0IGlzIGJlaW5nIGRlYWN0aXZhdGVkLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBTTUMgaW50ZXJhY3Rpb25zLCBJJiMzOTttIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGhhcmR3YXJlIG1hbnVhbHMsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBTTUMgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIE15IG1haW4gY29uY2VybiBpcyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIGluY29uc2lzdGVudCBtZW1vcnkgdmlld3MgZHVyaW5nIHRoZSBkZXRhY2ggcHJvY2Vzcy4gVGhlIGBkbWJgIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIGhlcmU7IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGJhcnJpZXIg4oCTIGlzIGl0IGEgZnVsbCBzeXN0ZW0gYmFycmllciwgb3IgYSBtb3JlIHNjb3BlZCBvbmU/IFVuZGVyc3RhbmRpbmcgdGhlIGJhcnJpZXImIzM5O3MgdHlwZSB3aWxsIGluZm9ybSBteSBhbmFseXNpcyBvZiBkYXRhIGNvbnNpc3RlbmN5IGFjcm9zcyB2YXJpb3VzIHByb2Nlc3NvcnMsIG9yIHdpdGhpbiBhIHNwZWNpZmljIHNlY3VyaXR5IGNvbnRleHQuCgpJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBtZW1vcnkgcmVnaW9ucyBpbnZvbHZlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZWQgZGF0YSwgRE1BIHRyYW5zZmVycywgb3Igc2hhcmVkIG1lbW9yeT8gVGhlc2UgZmFjdG9ycyB3aWxsIGRyaXZlIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZG1iYCBhZmZlY3RzIHN5bmNocm9uaXphdGlvbi4gSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zLiBXaGF0IGlmIHRoZSBkZXRhY2ggZmFpbHM/IERvZXMgdGhlIHN5c3RlbSBncmFjZWZ1bGx5IHJlY292ZXIsIG9yIGRvIHdlIHJpc2sgbWVtb3J5IGNvcnJ1cHRpb24gb3Igc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzPyBJIG5lZWQgdG8gbG9vayBmb3IgYW55IHJlbGF0ZWQgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXMgdG8gZW5zdXJlIHRoZSAmIzM0O2RldGFjaCYjMzQ7IG9wZXJhdGlvbiBjb21wbGV0ZXMgc2FmZWx5LCBwb3RlbnRpYWxseSB1c2luZyBzZW1hcGhvcmVzLCBtdXRleGVzIG9yIG90aGVyIGNvbmN1cnJlbmN5IGNvbnRyb2wgbWVjaGFuaXNtcy4KCkZyb20gYSBwcmFjdGljYWwgcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBrbm93IGhvdyB0aGlzIGluc3RydWN0aW9uIGlzIHRyaWdnZXJlZC4gSXMgaXQgc29mdHdhcmUtaW5pdGlhdGVkLCBvciBkb2VzIGl0IG9jY3VyIGluIHJlc3BvbnNlIHRvIHNvbWUgaGFyZHdhcmUgZXZlbnQ/IEFuZCBtb3JlIGltcG9ydGFudGx5LCB3aGF0IHRyaWdnZXJzIHRoZSBjb21tYW5kIGFuZCB3aGF0IGFyZSB0aGUgZWZmZWN0cyBvZiB0aGlzIG9wZXJhdGlvbiwgaG93IGlzIHRoaXMgaGFuZGxlZCBpbiBhIHNlY3VyZSBlbmNsYXZlIChpZiBwcmVzZW50KSwgYW5kIHdoYXQgYXJlIHRoZSBhc3NvY2lhdGVkIHNlY3VyaXR5IGltcGxpY2F0aW9ucz8KCkkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSBkZXRhY2hlZCBkZXZpY2UsIGFuZCB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBkZXZpY2UgZHJpdmVycyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gQW55IHJlbGF0ZWQgY29kZSBpcyBjcml0aWNhbC4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSBhIHRpZ2h0bHkgY29udHJvbGxlZCBzZXF1ZW5jZSB0byBtYWludGFpbiBzeXN0ZW0gaW50ZWdyaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNyAxOTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvc21jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvc21jL3NtY19jb3JlLmM9MTIwOD1zdGF0aWMgdm9pZCBzbWNkX2J1Zl9kZXRhY2goc3RydWN0IHNtY19jb25uZWN0aW9uICpjb25uKVxuLS1cbm5ldC9zbWMvc21jX2NvcmUuYy0xMjE1LVxubmV0L3NtYy9zbWNfY29yZS5jOjEyMTY6XHRzbWNfaXNtX2RldGFjaF9kbWIoc21jZCwgcGVlcl90b2tlbik7XG5uZXQvc21jL3NtY19jb3JlLmMtMTIxNy1cbi0tXG5uZXQvc21jL3NtY19pc20uYz0yNzA9aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxuLS1cbm5ldC9zbWMvc21jX2lzbS5jLTI5Mi1cbm5ldC9zbWMvc21jX2lzbS5jOjI5MzppbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXG5uZXQvc21jL3NtY19pc20uYy0yOTQte1xuLS1cbm5ldC9zbWMvc21jX2lzbS5oPTU0PWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcbm5ldC9zbWMvc21jX2lzbS5oLTU1LVx0XHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xubmV0L3NtYy9zbWNfaXNtLmg6NTY6aW50IHNtY19pc21fZGV0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuKTtcbm5ldC9zbWMvc21jX2lzbS5oLTU3LWludCBzbWNfaXNtX3NpZ25hbF9zaHV0ZG93bihzdHJ1Y3Qgc21jX2xpbmtfZ3JvdXAgKmxncik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MDYxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjk3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzIFN5bWJvbCBhbmQgQ29uZmlndXJhdGlvbiBSZXZpZXcqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRhcmdldGluZyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSYjMzk7bSB0aGlua2luZzoKCiogICBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAKKiAgIGBkaWJzX2xvX2F0dGFjaF9kbWJgCiogICBgZGlic19sb19kZXRhY2hfZG1iYAoqICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgCiogICBgc21jX2lzbV9hdHRhY2hfZG1iYAoqICAgYHNtY19pc21fZGV0YWNoX2RtYmAKCk5vdywgdGhlIGNvbmZpZyBjaGVjay4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb25zIGVuYWJsZWQuIExldCYjMzk7cyBzZWUuLi4gYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYCBhcmUgdGhlIGtleSBvbmVzIGhlcmUuIFdhaXQgYSBtaW51dGUsIGBESUJTX0xPYCBpcyB0aGUgb25lIHRoYXQgcmVhbGx5IGFjdGl2YXRlcyBgZGlic19sb29wYmFjay5jYCwgcmlnaHQ/IExldCYjMzk7cyB2ZXJpZnkgdGhhdCBgRElCU19MT2AgaXMgc3VmZmljaWVudC4gT2theSwgSSBzZWUgYERJQlNfTE9gIGRlcGVuZHMgb24gYERJQlNgLCBzbyBib3RoIG5lZWQgdG8gYmUgZW5hYmxlZC4gSSBrbm93IGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgc28gSSBuZWVkIGBTTUNgIGVuYWJsZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIGBTTUNgIGRlcGVuZHMgb24gYERJQlNgLiBZZXMsIEkgc2VlIHRoYXQuIEl0IGRlcGVuZHMgb24gYElORVQgJmFtcDsmYW1wOyBJTkZJTklCQU5EICZhbXA7JmFtcDsgRElCU2AuIFNvLCB0aGF0IGNvbmZpcm1zIGl0OiBgU01DYCwgYERJQlNgLCBhbmQgYERJQlNfTE9gIGFyZSB0aGUgcmVxdWlyZWQgY29uZmlncy4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJiMzOTtsbCBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBESUJTX0xPYCBpcyB0aGUgb25seSBjb25maWcgSSBuZWVkIGZvciBgZGlic19sb29wYmFjay5jYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGlic19sb29wYmFjay5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9kaWJzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL2RpYnMvTWFrZWZpbGU9Nz1vYmotJChDT05GSUdfRElCUykgJiM0Mzs9IGRpYnMub1xuZHJpdmVycy9kaWJzL01ha2VmaWxlOjg6ZGlicy0kKENPTkZJR19ESUJTX0xPKSAmIzQzOz0gZGlic19sb29wYmFjay5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI3IDE5OjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1ODAyCgkJCQkJCQlvdXRwdXQ6IDIxNwoJCQkJCQkJdGhvdWdodHM6IDYzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiBUaGlzIFBhdGNoJiMzOTtzIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duIHN5c3RlbWF0aWNhbGx5LiBGaXJzdCwgSSBzZWUgYGRpYnMtJChDT05GSUdfRElCU19MTykgJiM0Mzs9IGRpYnNfbG9vcGJhY2sub2AuIFRoYXQgdGVsbHMgbWUgYGRpYnNfbG9vcGJhY2sub2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBgZGlic2AgbW9kdWxlIG9ubHkgaWYgYENPTkZJR19ESUJTX0xPYCBpcyBlbmFibGVkLiBTbywgYERJQlNgIGFuZCBgRElCU19MT2AgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuCgpOb3csIEkgbmVlZCB0byBpZGVudGlmeSAqYWxsKiB0aGUgcmVsZXZhbnQgY29uZmlncy4gIGBTTUNgIGRlcGVuZHMgb24gYElORVRgIGFuZCBgSU5GSU5JQkFORGAuIFNvLCB0aGUgaW1tZWRpYXRlIGRlcGVuZGVuY2llcyBhcmUgYElORVRgLCBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuIEhvd2V2ZXIsIGZvciBmdXp6aW5nLCBJJiMzOTttIGdvaW5nIHRvIG9ubHkgbGlzdCB0aGUgZGlyZWN0IGNvbmZpZ3MgYW5kIGFueSAmIzM0O25vbi1zdGFuZGFyZCYjMzQ7IHBhcmVudHMuIGBJTkVUYCBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBzdGFuZGFyZCwgYnV0IGBJTkZJTklCQU5EYCBpcyBhIG1vcmUgc3BlY2lhbGl6ZWQgb3B0aW9uLiBUaGVyZWZvcmUsIHRoZSBlc3NlbnRpYWwgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGZvY3VzIG9uIGFyZSBgSU5GSU5JQkFORGAsIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AuCgpOZXh0LCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2guIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNoYW5nZSBpbiBsb2NraW5nLCBzaGlmdGluZyBmcm9tIGByZWFkX2xvY2tfYmhgIHRvIGB3cml0ZV9sb2NrX2JoYC4gIEZ1cnRoZXJtb3JlLCBpdCBzZWVtcyB0aGVyZSYjMzk7cyBhIGJ1ZyBmaXggcmVsYXRlZCB0byBub2RlIHJlbW92YWwgZnJvbSBhIGhhc2ggdGFibGUsIHBvdGVudGlhbGx5IGEgcmFjZSBjb25kaXRpb24gd2l0aCByZWZjb3VudGluZy4gVGhpcyBpcyBjcnVjaWFsOiB0aGUgcGF0Y2ggaXMgbW9kaWZ5aW5nIHRoZSBiZWhhdmlvciBvZiBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSDigJMgYGRpYnNfbG9gIOKAkyBhbmQgdGhhdCBlbXVsYXRlZCBkZXZpY2UgaXMgKnJlYWNoYWJsZSogYnkgYFNNQ2Agc29ja2V0cy4gIFRoaXMgbWVhbnMgaXQmIzM5O3MgZnVsbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGFibGUuIEFic29sdXRlbHkgd29ydGggZnV6emluZy4KClRvIHN1bW1hcml6ZSwgSSYjMzk7bSBjb25jbHVkaW5nIHRoYXQgdGhpcyBwYXRjaCBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0byB0YXJnZXQgYXJlOgoKKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYAoqICAgYGRpYnNfbG9fYXR0YWNoX2RtYmAKKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgCiogICBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAKKiAgIGBzbWNfaXNtX2F0dGFjaF9kbWJgCiogICBgc21jX2lzbV9kZXRhY2hfZG1iYAoKQW5kIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlOgoKKiAgIGBESUJTYAoqICAgYERJQlNfTE9gCiogICBgU01DYAoqICAgYElORklOSUJBTkRgCgpUaGUgcmF0aW9uYWxlIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGludm9sdmVzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVyIChgZGlic19sb29wYmFjay5jYCkgdXRpbGl6ZWQgYnkgdGhlIGBTTUNgIHByb3RvY29sLiBUaGlzIG1ha2VzIGl0IGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCYjMzk7cyBlYXNpbHkgdGVzdGFibGUgaW4gZW11bGF0ZWQgZW52aXJvbm1lbnRzLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4KCk9uZSBmaW5hbCBjaGVjazogTGV0IG1lIGNvbmZpcm0gdGhhdCBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAgaXMgc3RhdGljLiBZZXMsIGl0JiMzOTtzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIEV2ZW4gdGhvdWdoIGl0JiMzOTtzIHN0YXRpYywgU3l6a2FsbGVyIGNhbiBzdGlsbCB0YXJnZXQgaXQsIGVzcGVjaWFsbHkgYmVjYXVzZSBpdCYjMzk7cyBhc3NpZ25lZCB0byBhIGZ1bmN0aW9uIHBvaW50ZXIgd2l0aGluIGBkaWJzX2xvX29wc2AuIEFsc28sIGluY2x1ZGluZyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgYW5kIHRoZSBvdGhlciBTTUMgcmVsYXRlZCBmdW5jdGlvbnMgaXMgc21hcnQgYmVjYXVzZSB0aGV5IGFyZSBkaXJlY3QgY2FsbGVycyBvZiB0aGUgbW9kaWZpZWQgRElCUyBmdW5jdGlvbnMuCgpOb3csIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBzZXQtcmVzdWx0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjcgMTk6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RJQlMmIzM0OywKICAgICYjMzQ7RElCU19MTyYjMzQ7LAogICAgJiMzNDtTTUMmIzM0OywKICAgICYjMzQ7SU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RpYnNfbG9fdW5yZWdpc3Rlcl9kbWImIzM0OywKICAgICYjMzQ7ZGlic19sb19hdHRhY2hfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fZGV0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O3NtY19pc21fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2RldGFjaF9kbWImIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGxvZ2ljIGluIHRoZSBESUJTIGxvb3BiYWNrIGRyaXZlciAoZGlic19sb29wYmFjay5jKS4gVGhpcyBpcyBhIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZSB1c2VkIGJ5IHRoZSBTTUMgKFNoYXJlZCBNZW1vcnkgQ29tbXVuaWNhdGlvbnMpIHByb3RvY29sIGZvciBpbnRyYS1PUyBjb21tdW5pY2F0aW9uLiBTaW5jZSBpdCBpcyBzb2Z0d2FyZS1lbXVsYXRlZCwgaXQgaXMgZnVsbHkgcmVhY2hhYmxlIGFuZCB0ZXN0YWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbW9kaWZpZWQgYXR0YWNoL2RldGFjaC91bnJlZ2lzdGVyIERNQiBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtESUJTJiMzNDssCiAgICAmIzM0O0RJQlNfTE8mIzM0OywKICAgICYjMzQ7U01DJiMzNDssCiAgICAmIzM0O0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkaWJzX2xvX3VucmVnaXN0ZXJfZG1iJiMzNDssCiAgICAmIzM0O2RpYnNfbG9fYXR0YWNoX2RtYiYjMzQ7LAogICAgJiMzNDtkaWJzX2xvX2RldGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV91bnJlZ2lzdGVyX2RtYiYjMzQ7LAogICAgJiMzNDtzbWNfaXNtX2F0dGFjaF9kbWImIzM0OywKICAgICYjMzQ7c21jX2lzbV9kZXRhY2hfZG1iJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjE1LjYxNDc2NzQ2NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkzOTcxNTU5ODM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJcIixcbiAgICBcImRpYnNfbG9fYXR0YWNoX2RtYlwiLFxuICAgIFwiZGlic19sb19kZXRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2F0dGFjaF9kbWJcIixcbiAgICBcInNtY19pc21fZGV0YWNoX2RtYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MTUuNjE0Nzc5Mjc2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDA2Mjk3MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBmYjU1YTkwYjBjYzk3YmQ2YTRmZTIyMDA3NmZjZGYwMTI0ZjU3NzhmXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDI3IDE5OjQ5OjEzIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXFxuaW5kZXggMGYyZTA5MzExMTUyNmIuLmZkNWNhZjFlMTlhOGY4IDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNcXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXFxuQEAgLTExOCwxNCArMTE4LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX3JlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iLFxcbiBcXHRyZXR1cm4gcmM7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXFxuLVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlKVxcbitzdGF0aWMgdm9pZCBkaWJzX2xvX2ZyZWVfZG1iKHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldixcXG4rXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXFxuIHtcXG4tXFx0LyogcmVtb3ZlIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cXG4tXFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbi1cXHRoYXNoX2RlbChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZWxpc3QpO1xcbi1cXHR3cml0ZV91bmxvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4tXFxuIFxcdGNsZWFyX2JpdChkbWJfbm9kZS1cXHUwMDNlc2JhX2lkeCwgbGRldi1cXHUwMDNlc2JhX2lkeF9tYXNrKTtcXG4gXFx0Zm9saW9fcHV0KHZpcnRfdG9fZm9saW8oZG1iX25vZGUtXFx1MDAzZWNwdV9hZGRyKSk7XFxuIFxcdGtmcmVlKGRtYl9ub2RlKTtcXG5AQCAtMTM5LDI3ICsxMzQsMzMgQEAgc3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuIFxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG4gXFx0c3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2O1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRib29sIGxhc3Q7XFxuIFxcbiBcXHRsZGV2ID0gZGlicy1cXHUwMDNlZHJ2X3ByaXY7XFxuIFxcbiBcXHQvKiBmaW5kIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cXG4tXFx0cmVhZF9sb2NrX2JoKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfaHRfbG9jayk7XFxuK1xcdHdyaXRlX2xvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4gXFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShsZGV2LVxcdTAwM2VkbWJfaHQsIHRtcF9ub2RlLCBsaXN0LCBkbWItXFx1MDAzZWRtYl90b2spIHtcXG4gXFx0XFx0aWYgKHRtcF9ub2RlLVxcdTAwM2V0b2tlbiA9PSBkbWItXFx1MDAzZWRtYl90b2spIHtcXG4gXFx0XFx0XFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbi1cXHRpZiAoIWRtYl9ub2RlKVxcbitcXHRpZiAoIWRtYl9ub2RlKSB7XFxuK1xcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXHRsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGhhc2hfZGVsKFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXG4tXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZXJlZmNudCkpIHtcXG4rXFx0aWYgKGxhc3QpIHtcXG4gXFx0XFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmRpYnMtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0XFx0ZGlicy1cXHUwMDNlZG1iX2NsaWVudGlkX2FycltkbWJfbm9kZS1cXHUwMDNlc2JhX2lkeF0gPSBOT19ESUJTX0NMSUVOVDtcXG4gXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ZGlicy1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0XFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcXG4rXFx0XFx0ZGlic19sb19mcmVlX2RtYihsZGV2LCBkbWJfbm9kZSk7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5AQCAtMTg4LDE0ICsxODksOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fYXR0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHN0cnVjdCBkaWJzX2RtYiAqZG1iKVxcbiBcXHRcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbitcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQpO1xcbiBcXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXG4tXFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oXFx1MDAyNmRtYl9ub2RlLVxcdTAwM2VyZWZjbnQpKVxcbi1cXHRcXHQvKiB0aGUgZG1iIGlzIGJlaW5nIHVucmVnaXN0ZXJlZCwgYnV0IGhhc1xcbi1cXHRcXHQgKiBub3QgYmVlbiByZW1vdmVkIGZyb20gdGhlIGhhc2ggdGFibGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tXFxuIFxcdC8qIHByb3ZpZGUgZG1iIGluZm9ybWF0aW9uICovXFxuIFxcdGRtYi1cXHUwMDNlaWR4ID0gZG1iX25vZGUtXFx1MDAzZXNiYV9pZHg7XFxuIFxcdGRtYi1cXHUwMDNlZG1iX3RvayA9IGRtYl9ub2RlLVxcdTAwM2V0b2tlbjtcXG5AQCAtMjA5LDExICsyMDUsMTIgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXFxuIHtcXG4gXFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbiBcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuK1xcdGJvb2wgbGFzdDtcXG4gXFxuIFxcdGxkZXYgPSBkaWJzLVxcdTAwM2VkcnZfcHJpdjtcXG4gXFxuIFxcdC8qIGZpbmQgZG1iX25vZGUgYWNjb3JkaW5nIHRvIGRtYi1cXHUwMDNlZG1iX3RvayAqL1xcbi1cXHRyZWFkX2xvY2tfYmgoXFx1MDAyNmxkZXYtXFx1MDAzZWRtYl9odF9sb2NrKTtcXG4rXFx0d3JpdGVfbG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXFx1MDAzZWRtYl9odCwgdG1wX25vZGUsIGxpc3QsIHRva2VuKSB7XFxuIFxcdFxcdGlmICh0bXBfbm9kZS1cXHUwMDNldG9rZW4gPT0gdG9rZW4pIHtcXG4gXFx0XFx0XFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcXG5AQCAtMjIxLDEzICsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXFxuIFxcdFxcdH1cXG4gXFx0fVxcbiBcXHRpZiAoIWRtYl9ub2RlKSB7XFxuLVxcdFxcdHJlYWRfdW5sb2NrX2JoKFxcdTAwMjZsZGV2LVxcdTAwM2VkbWJfaHRfbG9jayk7XFxuK1xcdFxcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFx0fVxcbi1cXHRyZWFkX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbitcXHRsYXN0ID0gcmVmY291bnRfZGVjX2FuZF90ZXN0KFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlcmVmY250KTtcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGhhc2hfZGVsKFxcdTAwMjZkbWJfbm9kZS1cXHUwMDNlbGlzdCk7XFxuK1xcdHdyaXRlX3VubG9ja19iaChcXHUwMDI2bGRldi1cXHUwMDNlZG1iX2h0X2xvY2spO1xcbitcXG4rXFx0aWYgKGxhc3QpXFxuK1xcdFxcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xcbiBcXG4tXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2ZG1iX25vZGUtXFx1MDAzZXJlZmNudCkpXFxuLVxcdFxcdF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihsZGV2LCBkbWJfbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToxNi4xNTYyOTQ0MjNaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo5MzQzMDAyMjM3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2xvX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJkaWJzX2xvX2F0dGFjaF9kbWJcIixcbiAgICBcImRpYnNfbG9fZGV0YWNoX2RtYlwiLFxuICAgIFwic21jX2lzbV91bnJlZ2lzdGVyX2RtYlwiLFxuICAgIFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2RldGFjaF9kbWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIERJQlMgbG9vcGJhY2sgZHJpdmVyIChkaWJzX2xvb3BiYWNrLmMpLiBUaGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHVzZWQgYnkgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZm9yIGludHJhLU9TIGNvbW11bmljYXRpb24uIFNpbmNlIGl0IGlzIHNvZnR3YXJlLWVtdWxhdGVkLCBpdCBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2gvZGV0YWNoL3VucmVnaXN0ZXIgRE1CIGZ1bmN0aW9ucyBhbmQgdGhlaXIgU01DIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGZiNTVhOTBiMGNjOTdiZDZhNGZlMjIwMDc2ZmNkZjAxMjRmNTc3OGZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1bCAyNyAxOTo0OToxMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5pbmRleCAwZjJlMDkzMTExNTI2Yi4uZmQ1Y2FmMWUxOWE4ZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG4rKysgYi9kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXG5AQCAtMTE4LDE0ICsxMTgsOSBAQCBzdGF0aWMgaW50IGRpYnNfbG9fcmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIsXG4gXHRyZXR1cm4gcmM7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbitzdGF0aWMgdm9pZCBkaWJzX2xvX2ZyZWVfZG1iKHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldixcbitcdFx0XHQgICAgIHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSlcbiB7XG4tXHQvKiByZW1vdmUgZG1iIGZyb20gaGFzaCB0YWJsZSAqL1xuLVx0d3JpdGVfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbi1cdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuLVx0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuLVxuIFx0Y2xlYXJfYml0KGRtYl9ub2RlLVx1MDAzZXNiYV9pZHgsIGxkZXYtXHUwMDNlc2JhX2lkeF9tYXNrKTtcbiBcdGZvbGlvX3B1dCh2aXJ0X3RvX2ZvbGlvKGRtYl9ub2RlLVx1MDAzZWNwdV9hZGRyKSk7XG4gXHRrZnJlZShkbWJfbm9kZSk7XG5AQCAtMTM5LDI3ICsxMzQsMzMgQEAgc3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuK1x0Ym9vbCBsYXN0O1xuIFxuIFx0bGRldiA9IGRpYnMtXHUwMDNlZHJ2X3ByaXY7XG4gXG4gXHQvKiBmaW5kIGRtYiBmcm9tIGhhc2ggdGFibGUgKi9cbi1cdHJlYWRfbG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcdHdyaXRlX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRoYXNoX2Zvcl9lYWNoX3Bvc3NpYmxlKGxkZXYtXHUwMDNlZG1iX2h0LCB0bXBfbm9kZSwgbGlzdCwgZG1iLVx1MDAzZWRtYl90b2spIHtcbiBcdFx0aWYgKHRtcF9ub2RlLVx1MDAzZXRva2VuID09IGRtYi1cdTAwM2VkbWJfdG9rKSB7XG4gXHRcdFx0ZG1iX25vZGUgPSB0bXBfbm9kZTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuIFx0fVxuLVx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4tXHRpZiAoIWRtYl9ub2RlKVxuK1x0aWYgKCFkbWJfbm9kZSkge1xuK1x0XHR3cml0ZV91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1x0bGFzdCA9IHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpO1xuK1x0aWYgKGxhc3QpXG4rXHRcdGhhc2hfZGVsKFx1MDAyNmRtYl9ub2RlLVx1MDAzZWxpc3QpO1xuK1x0d3JpdGVfdW5sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFxuLVx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZkbWJfbm9kZS1cdTAwM2VyZWZjbnQpKSB7XG4rXHRpZiAobGFzdCkge1xuIFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZkaWJzLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcdFx0ZGlicy1cdTAwM2VkbWJfY2xpZW50aWRfYXJyW2RtYl9ub2RlLVx1MDAzZXNiYV9pZHhdID0gTk9fRElCU19DTElFTlQ7XG4gXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ZGlicy1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRcdF9fZGlic19sb191bnJlZ2lzdGVyX2RtYihsZGV2LCBkbWJfbm9kZSk7XG4rXHRcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTE4OCwxNCArMTg5LDkgQEAgc3RhdGljIGludCBkaWJzX2xvX2F0dGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYilcbiBcdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0fVxuK1x0cmVmY291bnRfaW5jKFx1MDAyNmRtYl9ub2RlLVx1MDAzZXJlZmNudCk7XG4gXHRyZWFkX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcbi1cdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKFx1MDAyNmRtYl9ub2RlLVx1MDAzZXJlZmNudCkpXG4tXHRcdC8qIHRoZSBkbWIgaXMgYmVpbmcgdW5yZWdpc3RlcmVkLCBidXQgaGFzXG4tXHRcdCAqIG5vdCBiZWVuIHJlbW92ZWQgZnJvbSB0aGUgaGFzaCB0YWJsZS5cbi1cdFx0ICovXG4tXHRcdHJldHVybiAtRUlOVkFMO1xuLVxuIFx0LyogcHJvdmlkZSBkbWIgaW5mb3JtYXRpb24gKi9cbiBcdGRtYi1cdTAwM2VpZHggPSBkbWJfbm9kZS1cdTAwM2VzYmFfaWR4O1xuIFx0ZG1iLVx1MDAzZWRtYl90b2sgPSBkbWJfbm9kZS1cdTAwM2V0b2tlbjtcbkBAIC0yMDksMTEgKzIwNSwxMiBAQCBzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcbiB7XG4gXHRzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUgPSBOVUxMLCAqdG1wX25vZGU7XG4gXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XG4rXHRib29sIGxhc3Q7XG4gXG4gXHRsZGV2ID0gZGlicy1cdTAwM2VkcnZfcHJpdjtcbiBcbiBcdC8qIGZpbmQgZG1iX25vZGUgYWNjb3JkaW5nIHRvIGRtYi1cdTAwM2VkbWJfdG9rICovXG4tXHRyZWFkX2xvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4rXHR3cml0ZV9sb2NrX2JoKFx1MDAyNmxkZXYtXHUwMDNlZG1iX2h0X2xvY2spO1xuIFx0aGFzaF9mb3JfZWFjaF9wb3NzaWJsZShsZGV2LVx1MDAzZWRtYl9odCwgdG1wX25vZGUsIGxpc3QsIHRva2VuKSB7XG4gXHRcdGlmICh0bXBfbm9kZS1cdTAwM2V0b2tlbiA9PSB0b2tlbikge1xuIFx0XHRcdGRtYl9ub2RlID0gdG1wX25vZGU7XG5AQCAtMjIxLDEzICsyMTgsMTcgQEAgc3RhdGljIGludCBkaWJzX2xvX2RldGFjaF9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgdG9rZW4pXG4gXHRcdH1cbiBcdH1cbiBcdGlmICghZG1iX25vZGUpIHtcbi1cdFx0cmVhZF91bmxvY2tfYmgoXHUwMDI2bGRldi1cdTAwM2VkbWJfaHRfbG9jayk7XG4rXHRcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHR9XG4tXHRyZWFkX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcdGxhc3QgPSByZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KTtcbitcdGlmIChsYXN0KVxuK1x0XHRoYXNoX2RlbChcdTAwMjZkbWJfbm9kZS1cdTAwM2VsaXN0KTtcbitcdHdyaXRlX3VubG9ja19iaChcdTAwMjZsZGV2LVx1MDAzZWRtYl9odF9sb2NrKTtcbitcbitcdGlmIChsYXN0KVxuK1x0XHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiBcbi1cdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZG1iX25vZGUtXHUwMDNlcmVmY250KSlcbi1cdFx0X19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iKGxkZXYsIGRtYl9ub2RlKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjE2LjE1NjI5NzQ2M1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MTE1MjIxODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBEaWJzIExvb3BiYWNrIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggZm9yIGBkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jYC4gSW1tZWRpYXRlbHksIEkgc2VlIHRoYXQgaXQncyBmdW5kYW1lbnRhbGx5IHJld29ya2luZyBob3cgdGhlIGRyaXZlciBtYW5hZ2VzIGl0cyBEaWJzIE1lc3NhZ2UgQmxvY2sgKERNQikgbm9kZXMsIHNwZWNpZmljYWxseSByZWdhcmRpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBob3cgdGhvc2Ugbm9kZXMgYXJlIGhhbmRsZWQgaW4gdGhlIGhhc2ggdGFibGUuIE15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyB0aGF0IHRoaXMgaXMgbGlrZWx5IGEgY3JpdGljYWwgcGVyZm9ybWFuY2Ugb3IgY29ycmVjdG5lc3MgZml4LlxuXG5UaGUga2V5IGNoYW5nZSBJIHNlZSBpcyB0aGUgcmVwbGFjZW1lbnQgb2YgYHJlYWRfbG9ja19iaGAgd2l0aCBgd3JpdGVfbG9ja19iaGAgaW4gYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgIGFuZCBgZGlic19sb19kZXRhY2hfZG1iYCB3aGVuIGxvY2F0aW5nIHRoZSBETUIgbm9kZS4gVGhlIGhhc2ggdGFibGUgZGVsZXRpb24gYWxzbyBub3cgb2NjdXJzIHdpdGhpbiB0aGUgd3JpdGUgbG9jayBvbmx5IGlmIGByZWZjb3VudF9kZWNfYW5kX3Rlc3RgIHlpZWxkcyBhIGB0cnVlYCB2YWx1ZS4gVGhpcyBpcyBhIHZlcnkgc2lnbmlmaWNhbnQgY2hhbmdlOyBpdCBzaG93cyB0aGUgaW50ZW50IHRvIG1ha2UgdGhlc2Ugb3BlcmF0aW9ucyB0aHJlYWQtc2FmZSBpbiBhIG1vcmUgcm9idXN0IHdheSBieSB0YWtpbmcgYW4gZXhjbHVzaXZlIGxvY2sgdG8gcHJldmVudCBkYXRhIHJhY2VzIGR1cmluZyB1bnJlZ2lzdHJhdGlvbiBhbmQgZGV0YWNoaW5nLiBBbHNvLCB0aGUgcmVtb3ZhbCBvZiBgX19kaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCBhbmQgaXRzIHJlcGxhY2VtZW50IHdpdGggYGRpYnNfbG9fZnJlZV9kbWJgIGluZGljYXRlcyBwb3RlbnRpYWwgc2ltcGxpZmljYXRpb24gb3IgcGVyaGFwcyBhIHNoaWZ0IGluIHJlc3BvbnNpYmlsaXR5IGZvciByZXNvdXJjZSBtYW5hZ2VtZW50LlxuXG5JbiBgZGlic19sb19hdHRhY2hfZG1iYCwgdGhlIGNoYW5nZSBmcm9tIGByZWZjb3VudF9pbmNfbm90X3plcm9gIHRvIGByZWZjb3VudF9pbmNgIHdpdGhpbiB0aGUgcmVhZCBsb2NrIGFsc28gcGlxdWVzIG15IGludGVyZXN0LiBJdCBjb3VsZCBiZSBvcHRpbWl6YXRpb24gYXMgYHJlZmNvdW50X2luY2AgaXMgc2ltcGxlciBvciBpcyB1c2VkIHRvIGd1YXJhbnRlZSBhbiBpbmNyZW1lbnQgZXZlbiBpZiB0aGUgY291bnQgaXMgemVybywgcGVyaGFwcyBiZWNhdXNlIHRoZSBjb2RlIGV4cGVjdHMgdGhlIGNvdW50IHRvIGJlIHplcm8gaW4gdGhpcyBzcGVjaWZpYyBwb2ludC5cblxuQmVmb3JlIEkgY2FuIGZ1bGx5IGdyYXNwIHRoZSBpbXBsaWNhdGlvbnMsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSB3aWRlciBjb250ZXh0LiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIHdoYXQgdGhlIERpYnMgc3Vic3lzdGVtIGFjdHVhbGx5IGRvZXMsIHdoYXQgaXRzIHB1cnBvc2UgaXMsIGFuZCB3aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgaW52b2x2ZWQuIEdldHRpbmcgYSBoYW5kbGUgb24gaG93IHRoaXMgcGF0Y2ggZml0cyBpbnRvIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBpcyBlc3NlbnRpYWwuIEknbGwgbmVlZCB0byByZXNlYXJjaCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYGRpYnNgIHN1YnN5c3RlbSBhbmQgaXRzIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNDcwLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MjEuNTY3ODIyMzQxWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3NjI1NzEzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjI6Y29uZmlnIERJQlNcXG5kcml2ZXJzL2RpYnMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJEaXJlY3QgSW50ZXJuYWwgQnVmZmVyIFNoYXJpbmcgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnLTEzLVxcbmRyaXZlcnMvZGlicy9LY29uZmlnOjE0OmNvbmZpZyBESUJTX0xPXFxuZHJpdmVycy9kaWJzL0tjb25maWctMTUtXFx0Ym9vbCBcXFwiSW50cmEtT1Mgc2hvcnRjdXQgd2l0aCBkaWJzIGxvb3BiYWNrXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToyMi4wNDQwODY5NzlaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjg3NzMwMjA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBkaXN0aWxsZWQ6XG5cbioqQ2hlY2tpbmcgRGVwZW5kZW5jaWVzIGZvciBkaWJzIERyaXZlciBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIHJlcXVpcmVkIHRvIGVuYWJsZSBvciBjb25maWd1cmUgdGhpcyBgZGlic2AgZHJpdmVyLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUgYEtjb25maWdgIGZpbGUgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5LiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHRoZWlyIGRlcGVuZGVuY2llcyBzaG91bGQgYmUgZGVmaW5lZC4gSSdsbCBvcGVuIHVwIGBkcml2ZXJzL2RpYnMvS2NvbmZpZ2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSByZWxldmFudCBzZWN0aW9ucy4gVGhpcyBmaWxlIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyB0aGUgcHJlcmVxdWlzaXRlcywgcGxhdGZvcm0gc3BlY2lmaWNzLCBhbmQgYW55IG90aGVyIGNvbmRpdGlvbmFsIHJlcXVpcmVtZW50cyBmb3IgdGhpcyBkcml2ZXIuIFRpbWUgdG8gc2VlIHdoYXQgdGhlIEtjb25maWcgbWFnaWMgcmV2ZWFscyFcblxuXG4iLCJJbnB1dFRva2VucyI6NDI3OSwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI0LjczMTgxOTcyNFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU5ODIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvZGlicy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgICAxOlxcdCMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG4gICAyOlxcdGNvbmZpZyBESUJTXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIHN1cHBvcnRcXFwiXFxuICAgNDpcXHRcXHRkZWZhdWx0IG5cXG4gICA1OlxcdFxcdGhlbHBcXG4gICA2OlxcdFxcdCAgRGlyZWN0IEludGVybmFsIEJ1ZmZlciBTaGFyaW5nIChESUJTKSBpcyBhIGNvbW11bmljYXRpb24gbWV0aG9kIHRoYXRcXG4gICA3OlxcdFxcdCAgdXNlcyBjb21tb24gcGh5c2ljYWwgKGludGVybmFsKSBtZW1vcnkgZm9yIHN5bmNocm9ub3VzIGRpcmVjdCBhY2Nlc3NcXG4gICA4OlxcdFxcdCAgaW50byBhIHJlbW90ZSBidWZmZXIuXFxuICAgOTpcXHRcXG4gIDEwOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIHRvIHByb3ZpZGUgdGhlIGFic3RyYWN0aW9uIGxheWVyIGJldHdlZW5cXG4gIDExOlxcdFxcdCAgZGlicyBkZXZpY2VzIGFuZCBkaWJzIGNsaWVudHMgbGlrZSB0aGUgU01DIHByb3RvY29sLlxcbiAgMTI6XFx0XFx0ICBUaGUgbW9kdWxlIG5hbWUgaXMgZGlicy5cXG4gIDEzOlxcdFxcbiAgMTQ6XFx0Y29uZmlnIERJQlNfTE9cXG4gIDE1OlxcdFxcdGJvb2wgXFxcIkludHJhLU9TIHNob3J0Y3V0IHdpdGggZGlicyBsb29wYmFja1xcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gRElCU1xcbiAgMTc6XFx0XFx0ZGVmYXVsdCBuXFxuICAxODpcXHRcXHRoZWxwXFxuICAxOTpcXHRcXHQgIERJQlNfTE8gZW5hYmxlcyB0aGUgY3JlYXRpb24gb2YgYW4gc29mdHdhcmUtZW11bGF0ZWQgZGlicyBkZXZpY2VcXG4gIDIwOlxcdFxcdCAgbmFtZWQgbG8gd2hpY2ggY2FuIGJlIHVzZWQgZm9yIHRyYW5zZmVycmluZyBkYXRhIHdoZW4gY29tbXVuaWNhdGlvblxcbiAgMjE6XFx0XFx0ICBvY2N1cnMgd2l0aGluIHRoZSBzYW1lIE9TLiBUaGlzIGhlbHBzIGluIGNvbnZlbmllbnQgdGVzdGluZyBvZlxcbiAgMjI6XFx0XFx0ICBkaWJzIGNsaWVudHMsIHNpbmNlIGRpYnMgbG9vcGJhY2sgaXMgaW5kZXBlbmRlbnQgb2YgYXJjaGl0ZWN0dXJlIG9yXFxuICAyMzpcXHRcXHQgIGhhcmR3YXJlLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OToyNC43MzE4ODIyMzRaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODM1ODUwMzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIERJQlMgTG9vcGJhY2sqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBnb3QgdHdvIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBoZXJlOiBgRElCU2AgYW5kIGBESUJTX0xPYC4gUmlnaHQsIGBESUJTX0xPYCAtIHRoYXQncyB0aGUgc29mdHdhcmUtZW11bGF0ZWQgRElCUyBkZXZpY2UuIEl0IG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGRhdGEgdHJhbnNmZXJzIHdpdGhpbiB0aGUgc2FtZSBPUy4gVGhpcyBsb29wYmFjayBmZWF0dXJlIGlzIGJyaWxsaWFudCBmb3IgY29udmVuaWVudCB0ZXN0aW5nIG9mIERJQlMgY2xpZW50cywgZXNwZWNpYWxseSBzaW5jZSBpdCdzIGluZGVwZW5kZW50IG9mIHRoZSB1bmRlcmx5aW5nIGFyY2hpdGVjdHVyZSBvciBoYXJkd2FyZS4gVGhhdCdzIGEgaHVnZSB3aW4gZm9yIHBvcnRhYmlsaXR5IGluIG91ciB0ZXN0aW5nLlxuXG5UaGlzIGBESUJTX0xPYCBpcyAqcHJlY2lzZWx5KiB0aGUga2luZCBvZiB0YXJnZXQgd2Ugd2FudCB0byBoaXQgd2l0aCBmdXp6aW5nIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIExvdy1oYW5naW5nIGZydWl0LCBtaW5pbWFsIGRlcGVuZGVuY2llcywgYW5kIGxpa2VseSB0byBleHBvc2Ugc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2VzIG9yIHZ1bG5lcmFiaWxpdGllcy5cblxuQWxyaWdodCwgdGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUuIEknbGwgbmVlZCB0byBzZWUgd2hhdCBmdW5jdGlvbnMgYXJlIGV4cG9zZWQgYnkgdGhpcyBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AgbW9kdWxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gcG9rZSBhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc4OCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI4LjU2NzczNTIzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NjI0OTMyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkaWJzX2xvX1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjQtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyNTpzdGF0aWMgY29uc3QgY2hhciBkaWJzX2xvX2Rldl9uYW1lW10gPSBcXFwibG9cXFwiO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjYtLyogZ2xvYmFsIGxvb3BiYWNrIGRldmljZSAqL1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6Mjc6c3RhdGljIHN0cnVjdCBkaWJzX2xvX2RldiAqbG9fZGV2O1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjgtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyOTpzdGF0aWMgdTE2IGRpYnNfbG9fZ2V0X2ZhYnJpY19pZChzdHJ1Y3QgZGlic19kZXYgKmRpYnMpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMC17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMzLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzQ6c3RhdGljIGludCBkaWJzX2xvX3F1ZXJ5X3JnaWQoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBjb25zdCB1dWlkX3QgKnJnaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNS1cXHRcXHRcXHQgICAgICB1MzIgdmlkX3ZhbGlkLCB1MzIgdmlkKVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00Mi1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQzOnN0YXRpYyBpbnQgZGlic19sb19tYXhfZG1icyh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNDQte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy00Ny1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjQ4OnN0YXRpYyBpbnQgZGlic19sb19yZWdpc3Rlcl9kbWIoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCBzdHJ1Y3QgZGlic19kbWIgKmRtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTQ5LVxcdFxcdFxcdFxcdHN0cnVjdCBkaWJzX2NsaWVudCAqY2xpZW50KVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtNTAte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6NTE6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlLCAqdG1wX25vZGU7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzo1MjpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy01My1cXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMjAtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjE6c3RhdGljIHZvaWQgZGlic19sb19mcmVlX2RtYihzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXYsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMjI6XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGlic19sb19kbWJfbm9kZSAqZG1iX25vZGUpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMjMte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTM0OlxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjEzNTpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzYtXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTYyLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTYzOlxcdFxcdGRpYnNfbG9fZnJlZV9kbWIobGRldiwgZG1iX25vZGUpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY0LVxcdH1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY3LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTY4OnN0YXRpYyBpbnQgZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IGRpYnNfZGV2ICpkaWJzKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTY5LXtcXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMTcyLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTczOnN0YXRpYyBpbnQgZGlic19sb19hdHRhY2hfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzQte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MTc1OlxcdHN0cnVjdCBkaWJzX2xvX2RtYl9ub2RlICpkbWJfbm9kZSA9IE5VTEwsICp0bXBfbm9kZTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjE3NjpcXHRzdHJ1Y3QgZGlic19sb19kZXYgKmxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xNzctXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwMy1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIwNDpzdGF0aWMgaW50IGRpYnNfbG9fZGV0YWNoX2RtYihzdHJ1Y3QgZGlic19kZXYgKmRpYnMsIHU2NCB0b2tlbilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwNS17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMDY6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKmRtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjA3OlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIwOC1cXHRib29sIGxhc3Q7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIyOS1cXHRpZiAobGFzdClcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjIzMDpcXHRcXHRkaWJzX2xvX2ZyZWVfZG1iKGxkZXYsIGRtYl9ub2RlKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzMS1cXG4tLVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMjM0LVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjM1OnN0YXRpYyBpbnQgZGlic19sb19tb3ZlX2RhdGEoc3RydWN0IGRpYnNfZGV2ICpkaWJzLCB1NjQgZG1iX3RvayxcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzNi1cXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBpZHgsIGJvb2wgc2YsIHVuc2lnbmVkIGludCBvZmZzZXQsXFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTIzOC17XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyMzk6XFx0c3RydWN0IGRpYnNfbG9fZG1iX25vZGUgKnJtYl9ub2RlID0gTlVMTCwgKnRtcF9ub2RlO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MjQwOlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI0MS1cXHR1MTYgc19tYXNrO1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yNzktXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODA6c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODE6XFx0LmdldF9mYWJyaWNfaWQgPSBkaWJzX2xvX2dldF9mYWJyaWNfaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODI6XFx0LnF1ZXJ5X3JlbW90ZV9naWQgPSBkaWJzX2xvX3F1ZXJ5X3JnaWQsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODM6XFx0Lm1heF9kbWJzID0gZGlic19sb19tYXhfZG1icyxcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NDpcXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODU6XFx0LnVucmVnaXN0ZXJfZG1iID0gZGlic19sb191bnJlZ2lzdGVyX2RtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI4NjpcXHQubW92ZV9kYXRhID0gZGlic19sb19tb3ZlX2RhdGEsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODc6XFx0LnN1cHBvcnRfbW1hcHBlZF9yZG1iID0gZGlic19sb19zdXBwb3J0X2RtYl9ub2NvcHksXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODg6XFx0LmF0dGFjaF9kbWIgPSBkaWJzX2xvX2F0dGFjaF9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODk6XFx0LmRldGFjaF9kbWIgPSBkaWJzX2xvX2RldGFjaF9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0yOTAtfTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5MS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjI5MjpzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9pbml0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5My17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI5OS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwMDpzdGF0aWMgdm9pZCBkaWJzX2xvX2Rldl9leGl0KHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldilcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwMS17XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwNS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMwNjpzdGF0aWMgaW50IGRpYnNfbG9fZGV2X3Byb2JlKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMDcte1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM6MzA4OlxcdHN0cnVjdCBkaWJzX2xvX2RldiAqbGRldjtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMwOS1cXHRzdHJ1Y3QgZGlic19kZXYgKmRpYnM7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyMy1cXHRkaWJzLVxcdTAwM2VkcnZfcHJpdiA9IGxkZXY7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjQ6XFx0ZGlic19sb19kZXZfaW5pdChsZGV2KTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTMyNS1cXHR1dWlkX2dlbihcXHUwMDI2ZGlicy1cXHUwMDNlZ2lkKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjMyNjpcXHRkaWJzLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZGlic19sb19vcHM7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjctXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zMjgtXFx0ZGlicy1cXHUwMDNlZGV2LnBhcmVudCA9IE5VTEw7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozMjk6XFx0ZGV2X3NldF9uYW1lKFxcdTAwMjZkaWJzLVxcdTAwM2VkZXYsIFxcXCIlc1xcXCIsIGRpYnNfbG9fZGV2X25hbWUpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzMwLVxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDUtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNDY6c3RhdGljIHZvaWQgZGlic19sb19kZXZfcmVtb3ZlKHZvaWQpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNDcte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0zNTEtXFx0ZGlic19kZXZfZGVsKGxvX2Rldi1cXHUwMDNlZGlicyk7XFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzozNTI6XFx0ZGlic19sb19kZXZfZXhpdChsb19kZXYpO1xcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzUzLVxcdC8qIHBhaXJzIHdpdGggZGlic19kZXZfYWxsb2MoKSAqL1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0zNTk9aW50IGRpYnNfbG9vcGJhY2tfaW5pdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzYwLXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM2MTpcXHRyZXR1cm4gZGlic19sb19kZXZfcHJvYmUoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Mi19XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jPTM2ND12b2lkIGRpYnNfbG9vcGJhY2tfZXhpdCh2b2lkKVxcbmRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmMtMzY1LXtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jOjM2NjpcXHRkaWJzX2xvX2Rldl9yZW1vdmUoKTtcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTM2Ny19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjI4Ljc0Mzk5MDUxNloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNDc2MjE3MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guXG5cbioqQW5hbHl6aW5nIGRpYnMgRnJhbWV3b3JrIE9wZXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHRoZSBgZGlic2AgZnJhbWV3b3JrIHdvcmtzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IER5bmFtaWMgTWVtb3J5IEJ1ZmZlcnMgKERNQnMpIGFyZSBtYW5hZ2VkLiBJdCBsb29rcyBsaWtlIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCwgYGRpYnNfbG9fYXR0YWNoX2RtYmAsIGFuZCBgZGlic19sb19kZXRhY2hfZG1iYCBhcmUgdGhlIGtleSBmdW5jdGlvbnMgaGVyZSwgYW5kIHRoZXkncmUgYWxsIGJ1bmRsZWQgdG9nZXRoZXIgd2l0aGluIGBkaWJzX2xvX29wc2AuIFRoYXQgYGRpYnNfbG9fb3BzYCBzdHJ1Y3R1cmUgaXMgdGhlbiBhc3NpZ25lZCB0byBgZGlicy1cdTAwM2VvcHNgLiBTbywgdGhlIGBkaWJzYCBmcmFtZXdvcmsgZXNzZW50aWFsbHkgdXNlcyB0aGlzIHNldCBvZiBvcGVyYXRpb25zLCBsaWtlbHkgdGhyb3VnaCBhIGZ1bmN0aW9uIHBvaW50ZXIgdGFibGUsIGdpdmVuIGl0cyBkZXNpZ24uIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2UgZm9yIGEgd2VsbC1zdHJ1Y3R1cmVkIGRyaXZlciBvciBmcmFtZXdvcmsuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGVzZSBETUJzIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIHRoZSBjb3JlIGBkaWJzYCBjb2RlLiBUaGVyZWZvcmUsIEkgd2FudCB0byB0cmFjZSB0aGUgY2FsbHMuIFdoZXJlIGlzIGBkaWJzLVx1MDAzZW9wcy1cdTAwM2V1bnJlZ2lzdGVyX2RtYmAgYWN0dWFsbHkgYmVpbmcgKmNhbGxlZCo/IFRoYXTigJlzIHdoZXJlIEknbGwgZ2V0IHRvIHNlZSB0aGUgYWN0dWFsIGNvbnRleHQgYW5kIHVuZGVyc3RhbmQgdGhlIGxvZ2ljIGFyb3VuZCB0aGUgRE1CIHVucmVnaXN0cmF0aW9uIHByb2Nlc3MuIEknbSBnb2luZyB0byBsb29rIGZvciB0aGUgY2FsbGVycyBvZiB0aGF0IGZ1bmN0aW9uLCBhcyB0aGF0IHdpbGwgcHJvdmlkZSB0aGUgbW9zdCBpbmZvcm1hdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6ODA1NywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjMyLjg5MTYxNTg2NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzE5MTI4OTgsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldW5yZWdpc3Rlcl9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9kaWJzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6MzIuOTYzNTM5MjczWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwODE4NTAwOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipQb3RlbnRpYWwgRGUtUmVnaXN0cmF0aW9uIEZ1bmN0aW9uKipcblxuT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gV2UncmUgZGVhbGluZyB3aXRoIGRlLXJlZ2lzdHJhdGlvbiwgc28gYSBjYW5kaWRhdGUgZnVuY3Rpb24ganVtcHMgdG8gbWluZDogYG9wcy1cdTAwM2V1bnJlZ2lzdGVyX2RtYmAuIEl0J3MgYSBwbGF1c2libGUgY29udGVuZGVyLiBJJ20gZ29pbmcgdG8gd2FudCB0byBjaGVjayB0aGUgY29udGV4dCwgdGhvdWdoLCBiZWZvcmUgSSBjb21taXQgdG8gaXQgYmVpbmcgdGhlIGNvcnJlY3QgZnVuY3Rpb24uIFdoYXQncyB0aGUgc3Vycm91bmRpbmcgY29kZSBkb2luZywgYW5kIHdoYXQncyB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGltcGxpY2F0aW9uPyBJIG5lZWQgdG8gcXVpY2tseSByZWNhbGwgdGhlIGRldGFpbHMgb2YgdGhhdCBzdWJzeXN0ZW0uLi4gaXMgdGhpcyBhYm91dCBtZW1vcnkgYmFycmllciBtYW5hZ2VtZW50PyBJZiBzbywgdGhpcyBmdW5jdGlvbiBuYW1lIG1ha2VzIHBlcmZlY3Qgc2Vuc2UuIEkgd2lsbCBuZWVkIHRvIGxvb2sgdXAgaXRzIGltcGxlbWVudGF0aW9uIHRvIGJlIGNlcnRhaW4uIEFsc28gSSdsbCBoYXZlIHRvIGNvbnNpZGVyIG90aGVyIGRtYiBmdW5jdGlvbnMgd2hpY2ggY291bGQgYmUgYXBwbGljYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6ODQ2MSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjM2LjA0NTM5MjU0OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcyMTg4Njg5OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib3BzLVxcdTAwM2V1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OTozNy43NjcyODcyMDZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjg1MjcwMTQwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgZGlicyBEcml2ZXJzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYHVucmVnaXN0ZXJfZG1iYC4gR2l2ZW4gbXkga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwgYW5kIGRldmljZSBkcml2ZXJzLCB0aGUgZmlyc3QgcGxhY2UgSSdkIGNoZWNrIGlzIHdpdGhpbiB0aGUgYGRyaXZlcnMvZGlicy9gIGRpcmVjdG9yeS4gVGhhdCBzZWVtcyBsaWtlIHRoZSBtb3N0IGxvZ2ljYWwgc3RhcnRpbmcgcG9pbnQgZ2l2ZW4gdGhlIHRlcm0gYGRtYmAgKERldmljZSBNZW1vcnkgQmFycmllcikgYW5kIGRyaXZlcnMuIExldCdzIHN0YXJ0IHdpdGggYSBxdWljayBzZWFyY2ggaW4gdGhlcmUgYW5kIHNlZSB3aGF0IGNvbWVzIHVwLiBUaGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg2ODcsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo0OTo0MC42MTk5OTIzNTZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1OTQyMzI1MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmM9MTIxPXN0YXRpYyB2b2lkIGRpYnNfbG9fZnJlZV9kbWIoc3RydWN0IGRpYnNfbG9fZGV2ICpsZGV2LFxcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzEtXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoxMzI6c3RhdGljIGludCBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iKHN0cnVjdCBkaWJzX2RldiAqZGlicywgc3RydWN0IGRpYnNfZG1iICpkbWIpXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYy0xMzMte1xcbi0tXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYz0yODA9c3RhdGljIGNvbnN0IHN0cnVjdCBkaWJzX2Rldl9vcHMgZGlic19sb19vcHMgPSB7XFxuLS1cXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4NC1cXHQucmVnaXN0ZXJfZG1iID0gZGlic19sb19yZWdpc3Rlcl9kbWIsXFxuZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suYzoyODU6XFx0LnVucmVnaXN0ZXJfZG1iID0gZGlic19sb191bnJlZ2lzdGVyX2RtYixcXG5kcml2ZXJzL2RpYnMvZGlic19sb29wYmFjay5jLTI4Ni1cXHQubW92ZV9kYXRhID0gZGlic19sb19tb3ZlX2RhdGEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjQwLjk3OTQyNTg5OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNTg2NDg0NjAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgTWlzc2luZyBgdW5yZWdpc3Rlcl9kbWJgIENhbGwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBkcml2ZXJzL2RpYnMvYCBkaXJlY3RvcnkgYW5kIEkndmUgbm90aWNlZCB0aGF0IGB1bnJlZ2lzdGVyX2RtYmAgZG9lc24ndCBzZWVtIHRvIGJlIGV4cGxpY2l0bHkgY2FsbGVkIGFueXdoZXJlIHdpdGhpbiBpdC4gVGhhdCdzIGEgYml0IG9kZDsgdXN1YWxseSwgeW91J2QgZXhwZWN0IGEgZnVuY3Rpb24gbGlrZSB0aGF0IHRvIGJlIHBhaXJlZCB3aXRoIGl0cyBjb3VudGVycGFydCwgbGlrZSBhIHJlZ2lzdGVyL3VucmVnaXN0ZXIgcGFpci4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBkaWcgaW50byB0aGUgaGVhZGVyIGZpbGVzIHRvIHNlZSAqd2hlcmUqIGl0IGlzIGJlaW5nIGNhbGxlZCwgYXMgaWYgaXQgaXNuJ3Qgd2l0aGluIHRoZSBgZHJpdmVycy9kaWJzL2AgZGlyZWN0b3J5IGl0IG11c3QgZXhpc3QgYXMgYSBwdWJsaWMgbWV0aG9kLiBMZXQncyBzdGFydCB3aXRoIHRoZSBvYnZpb3VzIHBsYWNlczogYGluY2x1ZGUvbGludXgvZGlicy5oYCBhbmQgYGluY2x1ZGUvbmV0L2RpYnMuaGAuIEknbGwgYWxzbyBnbGFuY2UgYXQgYW55dGhpbmcgc2ltaWxhciB0aGF0IG1pZ2h0IGNvbnRhaW4gdGhlIHByb3RvdHlwZSwganVzdCB0byBiZSBzdXJlIEknbSBub3QgbWlzc2luZyBzb21ldGhpbmcgc3VidGxlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBwaWN0dXJlIG9mIGhvdyB0aGlzIGRldmljZSBtYW5hZ2VtZW50IGJsb2NrIGlzIGJlaW5nIGhhbmRsZWQuIExldCdzIHNlZSB3aGF0IHRoZXNlIGhlYWRlcnMgcmV2ZWFsLiBJIGJldCBpdCBpcyBsb2NhdGVkIHRoZXJlIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTM3LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDQuNTY1OTEzMTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNzE3NDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ1bnJlZ2lzdGVyX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2RpYnMuaD0yMDk9c3RydWN0IGRpYnNfZGV2X29wcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yNzQtXFx0LyoqXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Mjc1OlxcdCAqIHVucmVnaXN0ZXJfZG1iKCkgLSB1bnJlZ2lzdGVyIGFuZCBmcmVlIGEgZG1iXFxuaW5jbHVkZS9saW51eC9kaWJzLmgtMjc2LVxcdCAqIEBkZXY6IGRpYnMgZGV2aWNlXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RpYnMuaC0yODUtXFx0ICovXFxuaW5jbHVkZS9saW51eC9kaWJzLmg6Mjg2OlxcdGludCAoKnVucmVnaXN0ZXJfZG1iKShzdHJ1Y3QgZGlic19kZXYgKmRldiwgc3RydWN0IGRpYnNfZG1iICpkbWIpO1xcbmluY2x1ZGUvbGludXgvZGlicy5oLTI4Ny1cXHQvKipcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDQuODAzMDk4MDM1WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MDI3NDEyOTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBhbmFseXppbmcgdGhpcyBjb2RlOlxuXG4qKkFuYWx5emluZyB0aGUgZGlic19kZXZfb3BzIHN0cnVjdHVyZSBhbmQgdW5yZWdpc3Rlcl9kbWIgY2FsbCoqXG5cbk9rYXksIHNvIGBkaWJzX2Rldl9vcHNgIGlzIGRlZmluZWQgaW4gYGluY2x1ZGUvbGludXgvZGlicy5oYC4gVGhhdCdzIHN0YW5kYXJkIHByYWN0aWNlLCBwdXR0aW5nIHRoZSBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9uIGluIGEgaGVhZGVyIGZpbGUgZm9yIG90aGVyIG1vZHVsZXMgdG8gdXNlLiBUaGF0J3MgZ29vZC4gTm93LCB0aGUgbW9yZSBpbnRlcmVzdGluZyBxdWVzdGlvbiBpcyB3aG8gY2FsbHMgYHVucmVnaXN0ZXJfZG1iYD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxpZmVjeWNsZSBvZiB0aGlzIHRoaW5nLiBLbm93aW5nIHdoZXJlIGl0J3MgZGVmaW5lZCBpcyBqdXN0IHRoZSBzdGFydGluZyBwb2ludCwgdGhlIHVzZSBpcyBtb3JlIGltcG9ydGFudC4gSXMgdGhpcyBjYWxsIHBhcnQgb2YgdGhlIG1vZHVsZSB0ZWFyZG93bj8gSXMgaXQgY2FsbGVkIHdoZW4gYSBkZXZpY2UgaXMgcmVtb3ZlZD8gT3IgaXMgaXQgbW9yZSBkeW5hbWljIHRoYW4gdGhhdD8gVGhlIGZhY3QgdGhhdCBJIGRvbid0IGluc3RhbnRseSBrbm93IHdoZXJlIHRvIGxvb2sgc3VnZ2VzdHMgdGhpcyBpc24ndCBpbW1lZGlhdGVseSBvYnZpb3VzLCBzbyBJJ2xsIG5lZWQgdG8gdXNlIHNvbWUgdG9vbHMgdG8gdHJhY2UgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSB0byB1bmRlcnN0YW5kIHRoZSBpbnRlbnQuIFRoYXQgYHVucmVnaXN0ZXJfZG1iYCBjYWxsIGlzIHRoZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgYGRpYnNfZGV2X29wc2AgaXMgaW50ZWdyYXRlZCB3aXRoIHRoZSBsYXJnZXIga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NjIxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NDguMzA1ODQyMDI5WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDg4MzUyNzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNldW5yZWdpc3Rlcl9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2lzbS5jPTIxNT12b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjI5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjIzMDpcXHRzbWNkLVxcdTAwM2VkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZXVucmVnaXN0ZXJfZG1iKHNtY2QtXFx1MDAzZWRpYnMsIFxcdTAwMjZkbWIpO1xcbm5ldC9zbWMvc21jX2lzbS5jLTIzMS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NTEuMzk0MjA0MjQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1MjM3MTQ5NTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgU01DIERldGFjaG1lbnQgTG9naWMqKlxuXG5SaWdodCwgc28gSSBzZWUgYG5ldC9zbWMvc21jX2lzbS5jYCBpcyBjYWxsaW5nIGBzbWNkLVx1MDAzZWRpYnMtXHUwMDNlb3BzLVx1MDAzZXVucmVnaXN0ZXJfZG1iYC4gVGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEl04oCZcyB0aGUgdW5yZWdpc3RyYXRpb24gb2YgdGhlIGRlZGljYXRlZCBtZW1vcnkgYnVmZmVyIChETUIpIHRoYXQncyBrZXkgaGVyZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZml0cyBpbnRvIHRoZSBvdmVyYWxsIGxpZmVjeWNsZSwgZXNwZWNpYWxseSBob3cgdGhlIERNQiBpcyAqYXR0YWNoZWQqIGFuZCAqZGV0YWNoZWQqLiBNeSBuZXh0IG1vdmUgaXMgY2xlYXIg4oCTIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBhdHRhY2hfZG1iYCBhbmQgYGRldGFjaF9kbWJgIGZ1bmN0aW9ucy4gVGhvc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNvbnRleHR1YWwgZm91bmRhdGlvbiBJIG5lZWQuIExldCdzIHNlZSBob3cgdGhleSBpbnRlcmFjdCB3aXRoIGB1bnJlZ2lzdGVyX2RtYmAgYW5kIHVsdGltYXRlbHkgd2hhdCB0aGlzIHRlbGxzIG1lIGFib3V0IHRoZSBjb25uZWN0aW9uIHByb2Nlc3MuIEl0J3MgdGhlIG1vc3QgbGlrZWx5IGxvY2F0aW9uIHRvIGRldGVybWluZSB0aGUgcm9vdCBjYXVzZSBvZiB0aGUgaXNzdWUgSSBhbSBkZWJ1Z2dpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDM1LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NDk6NTQuOTE3OTI0MTU4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTQ4ODA4NjgzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIi1cXHUwMDNlYXR0YWNoX2RtYlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9zbWNfaXNtLmM9MjcwPWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5jLTI3NS1cXG5uZXQvc21jL3NtY19pc20uYzoyNzY6XFx0aWYgKCFkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYXR0YWNoX2RtYilcXG5uZXQvc21jL3NtY19pc20uYy0yNzctXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuLS1cXG5uZXQvc21jL3NtY19pc20uYy0yODAtXFx0ZG1iLmRtYl90b2sgPSB0b2tlbjtcXG5uZXQvc21jL3NtY19pc20uYzoyODE6XFx0cmMgPSBkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlYXR0YWNoX2RtYihkZXYtXFx1MDAzZWRpYnMsIFxcdTAwMjZkbWIpO1xcbm5ldC9zbWMvc21jX2lzbS5jLTI4Mi1cXHRpZiAoIXJjKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjQ5OjU4LjA2NjczOTYxMVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzYzMDg5MzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCBzcGVha2luZyBmcm9tIGEgZmlyc3QtcGVyc29uIGV4cGVydCBwZXJzcGVjdGl2ZSwgYW5kIHN0YXJ0aW5nIHdpdGggYSBib2xkZWQgaGVhZGVyOlxuXG4qKkFuYWx5emluZyBgZGV0YWNoX2RtYmAqKlxuXG5SaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgZGV0YWNoX2RtYmAgY2FsbC4uLiBpbW1lZGlhdGVseSwgbXkgbWluZCBzdGFydHMgdHJhY2luZyBiYWNrIHRocm91Z2ggdGhlIGRhdGEgc3RydWN0dXJlcyBpdCBsaWtlbHkgaW1wYWN0cy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGFjdGlvbi4gR2l2ZW4gdGhhdCBJJ20gZGVhbGluZyB3aXRoIGEgRGlnaXRhbCBNZWRpYSBCdWZmZXIgKERNQiksIHRoZSBmaXJzdCBxdWVzdGlvbiBpcyBhbHdheXM6ICp3aGF0J3MgdGhlIGN1cnJlbnQgc3RhdGUgb2YgdGhlIGJ1ZmZlcj8qIElzIGl0IGluIHVzZT8gSXMgdGhlcmUgYSBwZW5kaW5nIG9wZXJhdGlvbj8gQXJlIGFueSBjbGllbnRzIGN1cnJlbnRseSByZWZlcmVuY2luZyBpdD9cblxuSeKAmW0gYWxyZWFkeSBjb25zaWRlcmluZyB0aGUgcG90ZW50aWFsIGZvciByZXNvdXJjZSBsZWFrcyBpZiB0aGlzIGBkZXRhY2hgIG9wZXJhdGlvbiBpc24ndCBoYW5kbGVkIGNhcmVmdWxseSwgb3IgcmFjZSBjb25kaXRpb25zIGlmIGl0J3MgYmVpbmcgdXNlZCBjb25jdXJyZW50bHkuIEknbSB3b25kZXJpbmcgYWJvdXQgdGhlIGJ1ZmZlcuKAmXMgb3duZXJzaGlwIG1vZGVsIOKAkyBJcyBpdCByZWZlcmVuY2UtY291bnRlZD8gRG9lcyBpdCBoYXZlIGEgcGFyZW50L2NoaWxkIHJlbGF0aW9uc2hpcCB3aXRoIG90aGVyIGJ1ZmZlcnM/IEhvdyBpcyBtZW1vcnkgYWxsb2NhdGVkIGFuZCBkZWFsbG9jYXRlZD8gRG9lcyB0aGlzIGZ1bmN0aW9uIG1hbmFnZSBhbnkgbWV0YWRhdGEsIGZsYWdzLCBvciBoYW5kbGVzIGFzc29jaWF0ZWQgd2l0aCB0aGUgYnVmZmVyP1xuXG5UaGUgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl04oCZcyBzZXZlcmluZyBhIGxpbmssIGJyZWFraW5nIGFuIGFzc29jaWF0aW9uLiBCdXQgKndoaWNoKiBsaW5rPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIGRvd24gdGhlIGxpbmUgZm9yIHRoYXQgbGlua2VkIGFzc29jaWF0aW9uPyBUaGUgY29udGV4dCBvZiB0aGUgY2FsbCBpcyBjcml0aWNhbC4gQXJlIHdlIHRhbGtpbmcgYWJvdXQgYSBzaW1wbGUgcG9pbnRlciBkZXJlZmVyZW5jZSwgYSBoYW5kbGUgcmVsZWFzZSwgb3IgaXMgaXQgc29tZXRoaW5nIG1vcmUgaW52b2x2ZWQ/IEnigJltIHRoaW5raW5nIGFib3V0IHBvdGVudGlhbCBpbXBhY3QgdG8gYXNzb2NpYXRlZCBtZW1vcnkgbWFuYWdlbWVudCwgZXJyb3IgaGFuZGxpbmcsIGFuZCBwZXJoYXBzIHRocmVhZCBzeW5jaHJvbml6YXRpb24gdGhhdCBtYXkgYmUgYWZmZWN0ZWQuXG5cbk15IHRob3VnaHQgcHJvY2VzcyBxdWlja2x5IHNoaWZ0cyB0byB0aGUgZXJyb3IgaGFuZGxpbmcuIFdoYXQgaGFwcGVucyBpZiB0aGlzIGBkZXRhY2hgIGZhaWxzPyBBcmUgZXhjZXB0aW9ucyB0aHJvd24sIHJldHVybiBjb2RlcyBwcm92aWRlZCwgb3Igc29tZSBvdGhlciBtZWNoYW5pc20gdXNlZCB0byBzaWduYWwgdGhlIHByb2JsZW0/IEFuZCBob3cgcm9idXN0IGlzIHRoZSBlcnJvciBoYW5kbGluZz8gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcmVzdCBvZiB0aGUgYXBwbGljYXRpb24/IElzIHRoZXJlIGEgcG9zc2liaWxpdHkgb2YgbWVtb3J5IGNvcnJ1cHRpb24gb3IgdW5kZWZpbmVkIGJlaGF2aW9yP1xuXG5JJ20gc3RhcnRpbmcgdG8gYnVpbGQgYSBtZW50YWwgbWFwIG9mIHRoZSBwb3NzaWJsZSBjYWxsIHBhdGhzIGFuZCBwb3RlbnRpYWwgZmFpbHVyZSBzY2VuYXJpb3MsIHRyeWluZyB0byBhc3Nlc3MgdGhlIGltcGFjdCBvZiB0aGlzIGBkZXRhY2hfZG1iYCBjYWxsIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgc3lzdGVtLiBUaGUgZGV2aWwsIGFzIGFsd2F5cywgaXMgaW4gdGhlIGRldGFpbHMuIEkgbmVlZCB0byBkaWcgZGVlcGVyLCByZXZpZXcgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGFuZCBob3BlZnVsbHkgZmluZCBzb21lIGRvY3VtZW50YXRpb24gdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTMyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDowMy40Mjk4MzI2OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA0MzY3NzIzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZWRldGFjaF9kbWJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2lzbS5jPTI5Mz1pbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXFxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcXG5uZXQvc21jL3NtY19pc20uYzoyOTU6XFx0aWYgKCFkZXYtXFx1MDAzZWRpYnMtXFx1MDAzZW9wcy1cXHUwMDNlZGV0YWNoX2RtYilcXG5uZXQvc21jL3NtY19pc20uYy0yOTYtXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxubmV0L3NtYy9zbWNfaXNtLmMtMjk3LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI5ODpcXHRyZXR1cm4gZGV2LVxcdTAwM2VkaWJzLVxcdTAwM2VvcHMtXFx1MDAzZWRldGFjaF9kbWIoZGV2LVxcdTAwM2VkaWJzLCB0b2tlbik7XFxubmV0L3NtYy9zbWNfaXNtLmMtMjk5LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MDYuNDczNTE1ODU2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTk2NDQ1NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFscmVhZHkgcHJldHR5IGZhbWlsaWFyIHdpdGgga2VybmVsIG5ldHdvcmtpbmcgYW5kIFNNQzpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBEZXBlbmRlbmN5IG9mIFNNQyBvbiBESUJTKipcblxuUmlnaHQsIHNvIGBkaWJzYCBpcyBhIGtleSBjb25jZXB0IHdpdGhpbiBTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zLCBvciBgU01DYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZXNlIHR3by4gTXkgZmlyc3QgaW5zdGluY3QsIGdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgY29uZmlndXJhdGlvbiwgaXMgdG8gY2hlY2sgYG5ldC9zbWMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSB0aGUgZGVwZW5kZW5jaWVzIGZvciBTTUMgZmVhdHVyZXMgYXJlIHVzdWFsbHkgZGVmaW5lZC4gSSdsbCBzY2FuIHRoYXQgZmlsZSB0byBjb25maXJtIGlmIGBTTUNgIGFjdHVhbGx5IGhhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IG9uIGBESUJTYC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmV2ZWFsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIxOCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjUwOjA5Ljc3MzE2MzY3NVoiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI2MzgzNDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRElCU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvc21jL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L3NtYy9LY29uZmlnPTI9Y29uZmlnIFNNQ1xcbm5ldC9zbWMvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJTTUMgc29ja2V0IHByb3RvY29sIGZhbWlseVxcXCJcXG5uZXQvc21jL0tjb25maWc6NDpcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxubmV0L3NtYy9LY29uZmlnLTUtXFx0aGVscFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDowOS44NTU4MDk0NTNaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzMTYwOTk3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKlNNQydzIERlcGVuZGVuY2llczogVGltZSB0byBEaWcgSW4qKlxuXG5Pa2F5LCBzbyBgU01DYCByZWxpZXMgb24gYERJQlNgPyBUaGF0J3MgYSBiaXQgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCByZWxhdGlvbnNoaXAgYmV0dGVyLiBJdCBzZWVtcyBsaWtlIHRoZSBjb25maWd1cmF0aW9uIGlzIHRoZSBrZXksIHNvIGxldCdzIHN0YXJ0IHdpdGggdGhlIG9idmlvdXMgcGxhY2U6IGBuZXQvc21jL0tjb25maWdgLiBUaGlzIGZpbGUgbGlrZWx5IHNwZWxscyBvdXQgdGhlIGRlcGVuZGVuY2llcywgdGhlIGJ1aWxkIG9wdGlvbnMsIGFuZCBob3cgdGhlc2UgdHdvIGNvbXBvbmVudHMsIGBTTUNgIGFuZCBgRElCU2AsIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHBhcnNlIHRoZSByZWxldmFudCBzZWN0aW9ucyBpbiBgS2NvbmZpZ2AgdG8gc2VlIGV4YWN0bHkgd2hhdCBjb25kaXRpb25zIHRyaWdnZXIgdGhlIGRlcGVuZGVuY3kgYW5kIHdoYXQgaXQgaW1wbGllcyBhYm91dCB0aGUgb3ZlcmFsbCBzeXN0ZW0gY29uZmlndXJhdGlvbi4gVGltZSB0byBwdXQgb24gbXkgZGV0ZWN0aXZlIGhhdCBhbmQgc2VlIHdoYXQgc2VjcmV0cyB0aGlzIGNvbmZpZ3VyYXRpb24gZmlsZSBob2xkcyEgVW5kZXJzdGFuZGluZyB0aGUgS2NvbmZpZyBkZXBlbmRlbmNpZXMgaGVyZSB3aWxsIGNsYXJpZnkgdGhlIHdob2xlIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTE1MTMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoxMy40ODc0MjMwODVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTU2MzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L3NtYy9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5XFxuICAgMjpcXHRjb25maWcgU01DXFxuICAgMzpcXHRcXHR0cmlzdGF0ZSBcXFwiU01DIHNvY2tldCBwcm90b2NvbCBmYW1pbHlcXFwiXFxuICAgNDpcXHRcXHRkZXBlbmRzIG9uIElORVQgXFx1MDAyNlxcdTAwMjYgSU5GSU5JQkFORCBcXHUwMDI2XFx1MDAyNiBESUJTXFxuICAgNTpcXHRcXHRoZWxwXFxuICAgNjpcXHRcXHQgIFNNQy1SIHByb3ZpZGVzIGEgXFxcInNvY2tldHMgb3ZlciBSRE1BXFxcIiBzb2x1dGlvbiBtYWtpbmcgdXNlIG9mXFxuICAgNzpcXHRcXHQgIFJETUEgb3ZlciBDb252ZXJnZWQgRXRoZXJuZXQgKFJvQ0UpIHRlY2hub2xvZ3kgdG8gdXBncmFkZVxcbiAgIDg6XFx0XFx0ICBBRl9JTkVUIFRDUCBjb25uZWN0aW9ucyB0cmFuc3BhcmVudGx5LlxcbiAgIDk6XFx0XFx0ICBUaGUgTGludXggaW1wbGVtZW50YXRpb24gb2YgdGhlIFNNQy1SIHNvbHV0aW9uIGlzIGRlc2lnbmVkIGFzXFxuICAxMDpcXHRcXHQgIGEgc2VwYXJhdGUgc29ja2V0IGZhbWlseSBTTUMuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VsZWN0IHRoaXMgb3B0aW9uIGlmIHlvdSB3YW50IHRvIHJ1biBTTUMgc29ja2V0IGFwcGxpY2F0aW9uc1xcbiAgMTM6XFx0XFxuICAxNDpcXHRjb25maWcgU01DX0RJQUdcXG4gIDE1OlxcdFxcdHRyaXN0YXRlIFxcXCJTTUM6IHNvY2tldCBtb25pdG9yaW5nIGludGVyZmFjZVxcXCJcXG4gIDE2OlxcdFxcdGRlcGVuZHMgb24gU01DXFxuICAxNzpcXHRcXHRoZWxwXFxuICAxODpcXHRcXHQgIFN1cHBvcnQgZm9yIFNNQyBzb2NrZXQgbW9uaXRvcmluZyBpbnRlcmZhY2UgdXNlZCBieSB0b29scyBzdWNoIGFzXFxuICAxOTpcXHRcXHQgIHNtY3NzLlxcbiAgMjA6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI3VDE5OjUwOjEzLjQ4NzUyMTY2NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3Njc1MDA5NDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uOiBESUJTIExvb3BiYWNrIGZvciBTTUMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCwgeWVhaCwgaXQgbW9kaWZpZXMgYGRyaXZlcnMvZGlicy9kaWJzX2xvb3BiYWNrLmNgLiBUaGF0J3MgYSBzb2Z0d2FyZSBsb29wYmFjayBkZXZpY2UgZm9yIGBESUJTYCwgd2hpY2gsIG5hdHVyYWxseSwgYFNNQ2AgZGVwZW5kcyBvbi4gVGhlIGxvb3BiYWNrIGlzIGVuYWJsZWQgdmlhIGBDT05GSUdfRElCU19MT2AsIHdoaWNoIGlzIGltcG9ydGFudCBmb3IgdmlydHVhbGl6ZWQgdGVzdGluZyBlbnZpcm9ubWVudHMuXG5cblRoZSBwYXRjaCBpdHNlbGYgZm9jdXNlcyBvbiBmaXhpbmcgcmVmZXJlbmNlIGNvdW50aW5nIGFuZCBsb2NraW5nIGlzc3VlcyB3aXRoaW4gYSBmZXcgc3BlY2lmaWMgZnVuY3Rpb25zOiBgZGlic19sb191bnJlZ2lzdGVyX2RtYmAsIGBkaWJzX2xvX2F0dGFjaF9kbWJgLCBhbmQgYGRpYnNfbG9fZGV0YWNoX2RtYmAuICBTaW5jZSB0aGVzZSBmdW5jdGlvbnMgYXJlIHJlYWNoYWJsZSBmcm9tIGBTTUNgIHNvY2tldHMsIHRoaXMgcGF0Y2ggc2NyZWFtcyBcImZ1enogbWVcIiFcblxuTm93LCBsZXQncyBpZGVudGlmeSBvdXIgdGFyZ2V0IHN5bWJvbHMgZm9yIGZ1enppbmcuIFdlJ3ZlIGdvdDpcblxuKiAgIGBkaWJzX2xvX2ZyZWVfZG1iYCAoc3RhdGljKVxuKiAgIGBkaWJzX2xvX3VucmVnaXN0ZXJfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYWthIG9wcylcbiogICBgZGlic19sb19hdHRhY2hfZG1iYCAoc3RhdGljLCBidXQgY2FsbGVkIHZpYSBvcHMpXG4qICAgYGRpYnNfbG9fZGV0YWNoX2RtYmAgKHN0YXRpYywgYnV0IGNhbGxlZCB2aWEgb3BzKVxuXG5JIHdhcyBpbml0aWFsbHkgYSBiaXQgY29uY2VybmVkIGFib3V0IHN0YXRpYyBmdW5jdGlvbnMgYmVpbmcgaW5saW5lZCBhbmQgdGh1cyB1bnJlYWNoYWJsZSBieSBzeXprYWxsZXIuIEhvd2V2ZXIsIHNpbmNlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGFzc2lnbmVkIHRvIGBkaWJzX2xvX29wc2AsIEkgY2FuIGNvbmNsdWRlIHRoYXQgdGhleSBhcmUgbm90IGlubGluZWQuIEluIGFkZGl0aW9uLCBJIHdpbGwgdmVyaWZ5IHRoYXQgYHN5emthbGxlcmAgY2FuIHRhcmdldCBzdWNoIGZ1bmN0aW9ucy4gQnV0IHJlZ2FyZGxlc3MsIHNpbmNlIHRoZXkgYXJlIGNhbGxlZCB2aWEgb3BzLCB0YXJnZXRpbmcgdGhlc2UgZnVuY3Rpb25zIGlzIGxlc3MgaWRlYWwgdGhhbiB0YXJnZXRpbmcgdGhlIGZ1bmN0aW9ucyB0aGF0IGNhbGwgdGhlbS5cblxuU28sIHNpbmNlIHRoZXNlIGBkaWJzX2xvX2AgZnVuY3Rpb25zIGFyZSB1c2VkIHZpYSBmdW5jdGlvbiBwb2ludGVycywgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgIGxvb2sgbGlrZSBzb2xpZCB0YXJnZXRzLlxuXG5Ob3csIGxldCdzIGZpbmQgdGhlIGBTTUNgIGNvdW50ZXJwYXJ0cy4gQWZ0ZXIgYSBxdWljayBzY2FuLCBJJ3ZlIGlkZW50aWZpZWQ6XG5cbiogICBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmBcbiogICBgc21jX2lzbV9hdHRhY2hfZG1iYFxuKiAgIGBzbWNfaXNtX2RldGFjaF9kbWJgXG5cblRpbWUgdG8gY2hlY2sgaWYgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIwMTksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NjQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyMS4xNjI1MzQzMzhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwODg4NDYzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xNDA5PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2ZyZWUoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGJvb2wgaXNfZG1iLFxcbi0tXFxubmV0L3NtYy9zbWNfY29yZS5jLTE0MTQtXFx0XFx0YnVmX2Rlc2MtXFx1MDAzZWxlbiArPSBzaXplb2Yoc3RydWN0IHNtY2RfY2RjX21zZyk7XFxubmV0L3NtYy9zbWNfY29yZS5jOjE0MTU6XFx0XFx0c21jX2lzbV91bnJlZ2lzdGVyX2RtYihsZ3ItXFx1MDAzZXNtY2QsIGJ1Zl9kZXNjKTtcXG5uZXQvc21jL3NtY19jb3JlLmMtMTQxNi1cXHR9IGVsc2Uge1xcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MTc5PWludCBzbWNfaXNtX3B1dF92bGFuKHN0cnVjdCBzbWNkX2RldiAqc21jZCwgdW5zaWduZWQgc2hvcnQgdmxhbmlkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjE0LVxcbm5ldC9zbWMvc21jX2lzbS5jOjIxNTp2b2lkIHNtY19pc21fdW5yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY2RfZGV2ICpzbWNkLFxcbm5ldC9zbWMvc21jX2lzbS5jLTIxNi1cXHRcXHRcXHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpXFxuLS1cXG5uZXQvc21jL3NtY19pc20uaD00OT1pbnQgc21jX2lzbV9yZWdpc3Rlcl9kbWIoc3RydWN0IHNtY19saW5rX2dyb3VwICpsZ3IsIGludCBidWZfc2l6ZSxcXG5uZXQvc21jL3NtY19pc20uaC01MC1cXHRcXHRcXHQgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2lzbS5oOjUxOnZvaWQgc21jX2lzbV91bnJlZ2lzdGVyX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldixcXG5uZXQvc21jL3NtY19pc20uaC01Mi1cXHRcXHRcXHQgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyMS4zNzE0MjQ4MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDIxMDI2ODc4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBwcmVzZW50ZWQgYXMgYSBwZXJzb25hbCB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgRHluYW1pYyBNZW1vcnkgQmFycmllciAoRE1CKSBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgc21jX2lzbV91bnJlZ2lzdGVyX2RtYmAgZnVuY3Rpb24sIGFuZCBpdCdzIGltbWVkaWF0ZWx5IGFwcGFyZW50IHRoYXQgaXQncyAqbm90KiBhIHN0YXRpYyBlbnRpdHkuIFRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQuIE5vdywgd2hhdCBpbXBsaWNhdGlvbnMgZG9lcyB0aGF0IGhhdmUgZm9yIHRoZSBvdmVyYWxsIGRlc2lnbj8gSSBuZWVkIHRvIHRoaW5rIHRoaXMgdGhyb3VnaC5cblxuVGhhdCB0aGVuIGJyaW5ncyB1cCBxdWVzdGlvbnMgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0cy4gV2hhdCBhYm91dCBgc21jX2lzbV9hdHRhY2hfZG1iYCBhbmQgYHNtY19pc21fZGV0YWNoX2RtYmA/IEFyZSB0aGV5IHNpbWlsYXJseSBkeW5hbWljPyBBcmUgdGhleSBhbHNvIHN1YmplY3QgdG8gdGhlIHNhbWUgZGVzaWduIGNvbnNpZGVyYXRpb25zIGJhc2VkIG9uIHRoZWlyIGxhY2sgb2Ygc3RhdGljIHN0YXR1cz8gV2hhdCBhcmUgdGhlIGNhbGxpbmcgYW5kIHVzYWdlIHBhdHRlcm5zPyBBcmUgd2UgZGVhbGluZyB3aXRoIGR5bmFtaWMgcmVnaXN0cmF0aW9uL2RlcmVnaXN0cmF0aW9uIG9mIG1lbW9yeSBiYXJyaWVycyBoZXJlPyBJZiBzbywgd2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvbiBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyBhbmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucz8gSSBuZWVkIHRvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFsbCB0aHJlZSBhbmQgaG93IHRoZXkncmUgaW50ZW5kZWQgdG8gZnVuY3Rpb24gYXMgYSB3aG9sZS4gVGltZSB0byBkaXZlIGRlZXBlciBhbmQgYW5hbHl6ZSB0aGUgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM0NDksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDoyNS41ODE2OTY4M1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjgzMTI4NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0yNTc3PWludCBzbWNkX2J1Zl9hdHRhY2goc3RydWN0IHNtY19zb2NrICpzbWMpXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMjU5My1cXHQgKi9cXG5uZXQvc21jL3NtY19jb3JlLmM6MjU5NDpcXHRyYyA9IHNtY19pc21fYXR0YWNoX2RtYihzbWNkLCBwZWVyX3Rva2VuLCBidWZfZGVzYyk7XFxubmV0L3NtYy9zbWNfY29yZS5jLTI1OTUtXFx0aWYgKHJjKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmM9MjYwPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKVxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjY5LVxcbm5ldC9zbWMvc21jX2lzbS5jOjI3MDppbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXFxubmV0L3NtYy9zbWNfaXNtLmMtMjcxLVxcdFxcdCAgICAgICBzdHJ1Y3Qgc21jX2J1Zl9kZXNjICpkbWJfZGVzYylcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTUzPWJvb2wgc21jX2lzbV9zdXBwb3J0X2RtYl9ub2NvcHkoc3RydWN0IHNtY2RfZGV2ICpzbWNkKTtcXG5uZXQvc21jL3NtY19pc20uaDo1NDppbnQgc21jX2lzbV9hdHRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4sXFxubmV0L3NtYy9zbWNfaXNtLmgtNTUtXFx0XFx0ICAgICAgIHN0cnVjdCBzbWNfYnVmX2Rlc2MgKmRtYl9kZXNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MjUuNjUwMDI3NDI4WiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU1MTgyNzI2NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipBbmFseXppbmcgYHNtY19pc21fZGV0YWNoX2RtYmAqKlxuXG5SaWdodCwgbGV0J3MgYnJlYWsgZG93biB0aGlzIGlkZWEuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSByZWNvZ25pemUgdGhhdCBgc21jX2lzbV9kZXRhY2hfZG1iYCBsaWtlbHkgaW5kaWNhdGVzIGEgc3BlY2lmaWMgc3lzdGVtIG1hbmFnZW1lbnQgY29udHJvbGxlciAoU01DKSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSwgcG90ZW50aWFsbHkgcmVsYXRlZCB0byBkZXRhY2hpbmcgb3IgZGlzY29ubmVjdGluZyBhIGRldmljZSwgd2l0aCBtZW1vcnkgYmFycmllciBzZW1hbnRpY3MgaW5kaWNhdGVkIGJ5IGBkbWJgLiBUaGUgdXNlIG9mIGBpc21gIGxpa2VseSBpbXBsaWVzIGEgbWVtb3J5IGlzb2xhdGlvbiBzdHJhdGVneSBpbnZvbHZlZCBpbiB0aGlzIHByb2NlZHVyZS4gVGhlIFwiZGV0YWNoXCIgcGFydCBzdWdnZXN0cyBzb21ldGhpbmcgaXMgYmVpbmcgcmVtb3ZlZCwgcGVyaGFwcyBhIHBlcmlwaGVyYWwsIG9yIHNvbWUgc2VjdXJlIGNvbnRleHQgaXMgYmVpbmcgZGVhY3RpdmF0ZWQuXG5cbkdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgU01DIGludGVyYWN0aW9ucywgSSdtIGFscmVhZHkgYW50aWNpcGF0aW5nIHRoZSBuZWVkIHRvIGRlbHZlIGludG8gdGhlIGhhcmR3YXJlIG1hbnVhbHMsIGZvY3VzaW5nIG9uIHRoZSBzcGVjaWZpYyBTTUMgaW1wbGVtZW50YXRpb24gaW4gcXVlc3Rpb24uIE15IG1haW4gY29uY2VybiBpcyBhYm91dCB0aGUgcG90ZW50aWFsIGZvciBkYXRhIHJhY2VzIG9yIGluY29uc2lzdGVudCBtZW1vcnkgdmlld3MgZHVyaW5nIHRoZSBkZXRhY2ggcHJvY2Vzcy4gVGhlIGBkbWJgIGluc3RydWN0aW9uIGlzIGNyaXRpY2FsIGhlcmU7IEkgbmVlZCB0byBxdWlja2x5IGRldGVybWluZSB0aGUgc2NvcGUgb2YgdGhlIGJhcnJpZXIg4oCTIGlzIGl0IGEgZnVsbCBzeXN0ZW0gYmFycmllciwgb3IgYSBtb3JlIHNjb3BlZCBvbmU/IFVuZGVyc3RhbmRpbmcgdGhlIGJhcnJpZXIncyB0eXBlIHdpbGwgaW5mb3JtIG15IGFuYWx5c2lzIG9mIGRhdGEgY29uc2lzdGVuY3kgYWNyb3NzIHZhcmlvdXMgcHJvY2Vzc29ycywgb3Igd2l0aGluIGEgc3BlY2lmaWMgc2VjdXJpdHkgY29udGV4dC5cblxuSSdtIHRoaW5raW5nIGFib3V0IHRoZSBoYXJkd2FyZSBjb250ZXh0IGhlcmUuIFdoYXQgYXJlIHRoZSBtZW1vcnkgcmVnaW9ucyBpbnZvbHZlZD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZWQgZGF0YSwgRE1BIHRyYW5zZmVycywgb3Igc2hhcmVkIG1lbW9yeT8gVGhlc2UgZmFjdG9ycyB3aWxsIGRyaXZlIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBgZG1iYCBhZmZlY3RzIHN5bmNocm9uaXphdGlvbi4gSSdtIGFsc28gY29uc2lkZXJpbmcgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMuIFdoYXQgaWYgdGhlIGRldGFjaCBmYWlscz8gRG9lcyB0aGUgc3lzdGVtIGdyYWNlZnVsbHkgcmVjb3Zlciwgb3IgZG8gd2UgcmlzayBtZW1vcnkgY29ycnVwdGlvbiBvciBzZWN1cml0eSB2dWxuZXJhYmlsaXRpZXM/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcmVsYXRlZCBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlcyB0byBlbnN1cmUgdGhlIFwiZGV0YWNoXCIgb3BlcmF0aW9uIGNvbXBsZXRlcyBzYWZlbHksIHBvdGVudGlhbGx5IHVzaW5nIHNlbWFwaG9yZXMsIG11dGV4ZXMgb3Igb3RoZXIgY29uY3VycmVuY3kgY29udHJvbCBtZWNoYW5pc21zLlxuXG5Gcm9tIGEgcHJhY3RpY2FsIHBlcnNwZWN0aXZlLCBJIG5lZWQgdG8ga25vdyBob3cgdGhpcyBpbnN0cnVjdGlvbiBpcyB0cmlnZ2VyZWQuIElzIGl0IHNvZnR3YXJlLWluaXRpYXRlZCwgb3IgZG9lcyBpdCBvY2N1ciBpbiByZXNwb25zZSB0byBzb21lIGhhcmR3YXJlIGV2ZW50PyBBbmQgbW9yZSBpbXBvcnRhbnRseSwgd2hhdCB0cmlnZ2VycyB0aGUgY29tbWFuZCBhbmQgd2hhdCBhcmUgdGhlIGVmZmVjdHMgb2YgdGhpcyBvcGVyYXRpb24sIGhvdyBpcyB0aGlzIGhhbmRsZWQgaW4gYSBzZWN1cmUgZW5jbGF2ZSAoaWYgcHJlc2VudCksIGFuZCB3aGF0IGFyZSB0aGUgYXNzb2NpYXRlZCBzZWN1cml0eSBpbXBsaWNhdGlvbnM/XG5cbkkgYWxzbyBuZWVkIHRvIGV4YW1pbmUgdGhlIHN1cnJvdW5kaW5nIGNvZGUgdG8gZGV0ZXJtaW5lIHRoZSBwdXJwb3NlIG9mIHRoZSBkZXRhY2hlZCBkZXZpY2UsIGFuZCB1bmRlcnN0YW5kIGFueSByZWxhdGVkIGRhdGEgc3RydWN0dXJlcyBvciBkZXZpY2UgZHJpdmVycyBpbnZvbHZlZCBpbiB0aGUgcHJvY2Vzcy4gQW55IHJlbGF0ZWQgY29kZSBpcyBjcml0aWNhbC4gSSdtIGV4cGVjdGluZyB0aGlzIHRvIGJlIGEgdGlnaHRseSBjb250cm9sbGVkIHNlcXVlbmNlIHRvIG1haW50YWluIHN5c3RlbSBpbnRlZ3JpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTM1LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MzEuMTY4MzA4MDA0WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozODU1NTg3MzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic21jX2lzbV9kZXRhY2hfZG1iXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9zbWMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9zbWMvc21jX2NvcmUuYz0xMjA4PXN0YXRpYyB2b2lkIHNtY2RfYnVmX2RldGFjaChzdHJ1Y3Qgc21jX2Nvbm5lY3Rpb24gKmNvbm4pXFxuLS1cXG5uZXQvc21jL3NtY19jb3JlLmMtMTIxNS1cXG5uZXQvc21jL3NtY19jb3JlLmM6MTIxNjpcXHRzbWNfaXNtX2RldGFjaF9kbWIoc21jZCwgcGVlcl90b2tlbik7XFxubmV0L3NtYy9zbWNfY29yZS5jLTEyMTctXFxuLS1cXG5uZXQvc21jL3NtY19pc20uYz0yNzA9aW50IHNtY19pc21fYXR0YWNoX2RtYihzdHJ1Y3Qgc21jZF9kZXYgKmRldiwgdTY0IHRva2VuLFxcbi0tXFxubmV0L3NtYy9zbWNfaXNtLmMtMjkyLVxcbm5ldC9zbWMvc21jX2lzbS5jOjI5MzppbnQgc21jX2lzbV9kZXRhY2hfZG1iKHN0cnVjdCBzbWNkX2RldiAqZGV2LCB1NjQgdG9rZW4pXFxubmV0L3NtYy9zbWNfaXNtLmMtMjk0LXtcXG4tLVxcbm5ldC9zbWMvc21jX2lzbS5oPTU0PWludCBzbWNfaXNtX2F0dGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbixcXG5uZXQvc21jL3NtY19pc20uaC01NS1cXHRcXHQgICAgICAgc3RydWN0IHNtY19idWZfZGVzYyAqZG1iX2Rlc2MpO1xcbm5ldC9zbWMvc21jX2lzbS5oOjU2OmludCBzbWNfaXNtX2RldGFjaF9kbWIoc3RydWN0IHNtY2RfZGV2ICpkZXYsIHU2NCB0b2tlbik7XFxubmV0L3NtYy9zbWNfaXNtLmgtNTctaW50IHNtY19pc21fc2lnbmFsX3NodXRkb3duKHN0cnVjdCBzbWNfbGlua19ncm91cCAqbGdyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6MzEuNTUzODc4NDU1WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU3NzQ4OTIxOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRm9jdXMgU3ltYm9sIGFuZCBDb25maWd1cmF0aW9uIFJldmlldyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgcmlnaHQgZm9jdXMgc3ltYm9scy4gSSdtIHRoaW5raW5nOlxuXG4qICAgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgXG4qICAgYGRpYnNfbG9fYXR0YWNoX2RtYmBcbiogICBgZGlic19sb19kZXRhY2hfZG1iYFxuKiAgIGBzbWNfaXNtX3VucmVnaXN0ZXJfZG1iYFxuKiAgIGBzbWNfaXNtX2F0dGFjaF9kbWJgXG4qICAgYHNtY19pc21fZGV0YWNoX2RtYmBcblxuTm93LCB0aGUgY29uZmlnIGNoZWNrLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMgZW5hYmxlZC4gTGV0J3Mgc2VlLi4uIGBESUJTYCwgYERJQlNfTE9gLCBhbmQgYFNNQ2AgYXJlIHRoZSBrZXkgb25lcyBoZXJlLiBXYWl0IGEgbWludXRlLCBgRElCU19MT2AgaXMgdGhlIG9uZSB0aGF0IHJlYWxseSBhY3RpdmF0ZXMgYGRpYnNfbG9vcGJhY2suY2AsIHJpZ2h0PyBMZXQncyB2ZXJpZnkgdGhhdCBgRElCU19MT2AgaXMgc3VmZmljaWVudC4gT2theSwgSSBzZWUgYERJQlNfTE9gIGRlcGVuZHMgb24gYERJQlNgLCBzbyBib3RoIG5lZWQgdG8gYmUgZW5hYmxlZC4gSSBrbm93IGBTTUNgIGlzIGEgY2xpZW50IG9mIGBESUJTYCwgc28gSSBuZWVkIGBTTUNgIGVuYWJsZWQgdG8gZXZlbiByZWFjaCB0aGlzIGNvZGUuIEkgbmVlZCB0byBjb25maXJtIGBTTUNgIGRlcGVuZHMgb24gYERJQlNgLiBZZXMsIEkgc2VlIHRoYXQuIEl0IGRlcGVuZHMgb24gYElORVQgXHUwMDI2XHUwMDI2IElORklOSUJBTkQgXHUwMDI2XHUwMDI2IERJQlNgLiBTbywgdGhhdCBjb25maXJtcyBpdDogYFNNQ2AsIGBESUJTYCwgYW5kIGBESUJTX0xPYCBhcmUgdGhlIHJlcXVpcmVkIGNvbmZpZ3MuXG5cbkp1c3QgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluLCBJJ2xsIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYERJQlNfTE9gIGlzIHRoZSBvbmx5IGNvbmZpZyBJIG5lZWQgZm9yIGBkaWJzX2xvb3BiYWNrLmNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA2MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDozNy4zMjg3NzQyOTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3MDkzMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRpYnNfbG9vcGJhY2sub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL2RpYnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvZGlicy9NYWtlZmlsZT03PW9iai0kKENPTkZJR19ESUJTKSArPSBkaWJzLm9cXG5kcml2ZXJzL2RpYnMvTWFrZWZpbGU6ODpkaWJzLSQoQ09ORklHX0RJQlNfTE8pICs9IGRpYnNfbG9vcGJhY2sub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yN1QxOTo1MDozNy40MTU4NzkzNTJaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIwODc4NTMwMjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgVGhpcyBQYXRjaCdzIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93biBzeXN0ZW1hdGljYWxseS4gRmlyc3QsIEkgc2VlIGBkaWJzLSQoQ09ORklHX0RJQlNfTE8pICs9IGRpYnNfbG9vcGJhY2sub2AuIFRoYXQgdGVsbHMgbWUgYGRpYnNfbG9vcGJhY2sub2AgZ2V0cyBidWlsdCBpbnRvIHRoZSBgZGlic2AgbW9kdWxlIG9ubHkgaWYgYENPTkZJR19ESUJTX0xPYCBpcyBlbmFibGVkLiBTbywgYERJQlNgIGFuZCBgRElCU19MT2AgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuXG5cbk5vdywgSSBuZWVkIHRvIGlkZW50aWZ5ICphbGwqIHRoZSByZWxldmFudCBjb25maWdzLiAgYFNNQ2AgZGVwZW5kcyBvbiBgSU5FVGAgYW5kIGBJTkZJTklCQU5EYC4gU28sIHRoZSBpbW1lZGlhdGUgZGVwZW5kZW5jaWVzIGFyZSBgSU5FVGAsIGBJTkZJTklCQU5EYCwgYERJQlNgLCBgRElCU19MT2AsIGFuZCBgU01DYC4gSG93ZXZlciwgZm9yIGZ1enppbmcsIEknbSBnb2luZyB0byBvbmx5IGxpc3QgdGhlIGRpcmVjdCBjb25maWdzIGFuZCBhbnkgXCJub24tc3RhbmRhcmRcIiBwYXJlbnRzLiBgSU5FVGAgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQgc3RhbmRhcmQsIGJ1dCBgSU5GSU5JQkFORGAgaXMgYSBtb3JlIHNwZWNpYWxpemVkIG9wdGlvbi4gVGhlcmVmb3JlLCB0aGUgZXNzZW50aWFsIGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYElORklOSUJBTkRgLCBgRElCU2AsIGBESUJTX0xPYCwgYW5kIGBTTUNgLlxuXG5OZXh0LCBJIG5lZWQgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIG5hdHVyZSBvZiB0aGUgcGF0Y2guIFRoZSBjb3JlIG9mIHRoaXMgcGF0Y2ggbW9kaWZpZXMgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgLCBgZGlic19sb19hdHRhY2hfZG1iYCwgYW5kIGBkaWJzX2xvX2RldGFjaF9kbWJgLiAgU3BlY2lmaWNhbGx5LCBJIHNlZSBhIGNoYW5nZSBpbiBsb2NraW5nLCBzaGlmdGluZyBmcm9tIGByZWFkX2xvY2tfYmhgIHRvIGB3cml0ZV9sb2NrX2JoYC4gIEZ1cnRoZXJtb3JlLCBpdCBzZWVtcyB0aGVyZSdzIGEgYnVnIGZpeCByZWxhdGVkIHRvIG5vZGUgcmVtb3ZhbCBmcm9tIGEgaGFzaCB0YWJsZSwgcG90ZW50aWFsbHkgYSByYWNlIGNvbmRpdGlvbiB3aXRoIHJlZmNvdW50aW5nLiBUaGlzIGlzIGNydWNpYWw6IHRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgdGhlIGJlaGF2aW9yIG9mIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIOKAkyBgZGlic19sb2Ag4oCTIGFuZCB0aGF0IGVtdWxhdGVkIGRldmljZSBpcyAqcmVhY2hhYmxlKiBieSBgU01DYCBzb2NrZXRzLiAgVGhpcyBtZWFucyBpdCdzIGZ1bGx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlLiBBYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRvIHN1bW1hcml6ZSwgSSdtIGNvbmNsdWRpbmcgdGhhdCB0aGlzIHBhdGNoIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGtleSBzeW1ib2xzIHRvIHRhcmdldCBhcmU6XG5cbiogICBgZGlic19sb191bnJlZ2lzdGVyX2RtYmBcbiogICBgZGlic19sb19hdHRhY2hfZG1iYFxuKiAgIGBkaWJzX2xvX2RldGFjaF9kbWJgXG4qICAgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgXG4qICAgYHNtY19pc21fYXR0YWNoX2RtYmBcbiogICBgc21jX2lzbV9kZXRhY2hfZG1iYFxuXG5BbmQgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmU6XG5cbiogICBgRElCU2BcbiogICBgRElCU19MT2BcbiogICBgU01DYFxuKiAgIGBJTkZJTklCQU5EYFxuXG5UaGUgcmF0aW9uYWxlIGlzIGNsZWFyOiB0aGlzIHBhdGNoIGludm9sdmVzIGxvY2tpbmcgYW5kIHJlZmVyZW5jZSBjb3VudGluZyBjaGFuZ2VzIGluIGEgc29mdHdhcmUtZW11bGF0ZWQgZHJpdmVyIChgZGlic19sb29wYmFjay5jYCkgdXRpbGl6ZWQgYnkgdGhlIGBTTUNgIHByb3RvY29sLiBUaGlzIG1ha2VzIGl0IGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIHBhcnRpY3VsYXJseSBzaW5jZSBpdCdzIGVhc2lseSB0ZXN0YWJsZSBpbiBlbXVsYXRlZCBlbnZpcm9ubWVudHMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgYW5kIHRoZWlyIFNNQyBjYWxsZXJzLlxuXG5PbmUgZmluYWwgY2hlY2s6IExldCBtZSBjb25maXJtIHRoYXQgYGRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJgIGlzIHN0YXRpYy4gWWVzLCBpdCdzIGRlY2xhcmVkIGFzIHN0YXRpYyBpbiBgZHJpdmVycy9kaWJzL2RpYnNfbG9vcGJhY2suY2AuIEV2ZW4gdGhvdWdoIGl0J3Mgc3RhdGljLCBTeXprYWxsZXIgY2FuIHN0aWxsIHRhcmdldCBpdCwgZXNwZWNpYWxseSBiZWNhdXNlIGl0J3MgYXNzaWduZWQgdG8gYSBmdW5jdGlvbiBwb2ludGVyIHdpdGhpbiBgZGlic19sb19vcHNgLiBBbHNvLCBpbmNsdWRpbmcgYHNtY19pc21fdW5yZWdpc3Rlcl9kbWJgIGFuZCB0aGUgb3RoZXIgU01DIHJlbGF0ZWQgZnVuY3Rpb25zIGlzIHNtYXJ0IGJlY2F1c2UgdGhleSBhcmUgZGlyZWN0IGNhbGxlcnMgb2YgdGhlIG1vZGlmaWVkIERJQlMgZnVuY3Rpb25zLlxuXG5Ob3csIEknbSByZWFkeSB0byBjYWxsIHNldC1yZXN1bHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTgwMiwiT3V0cHV0VG9rZW5zIjoyMTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjdUMTk6NTA6NDkuNTAzNzM1MTY3WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODI1Nzc0MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkRJQlNcIixcbiAgICBcIkRJQlNfTE9cIixcbiAgICBcIlNNQ1wiLFxuICAgIFwiSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRpYnNfbG9fdW5yZWdpc3Rlcl9kbWJcIixcbiAgICBcImRpYnNfbG9fYXR0YWNoX2RtYlwiLFxuICAgIFwiZGlic19sb19kZXRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2F0dGFjaF9kbWJcIixcbiAgICBcInNtY19pc21fZGV0YWNoX2RtYlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHJlZmVyZW5jZSBjb3VudGluZyBhbmQgbG9ja2luZyBsb2dpYyBpbiB0aGUgRElCUyBsb29wYmFjayBkcml2ZXIgKGRpYnNfbG9vcGJhY2suYykuIFRoaXMgaXMgYSBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2UgdXNlZCBieSB0aGUgU01DIChTaGFyZWQgTWVtb3J5IENvbW11bmljYXRpb25zKSBwcm90b2NvbCBmb3IgaW50cmEtT1MgY29tbXVuaWNhdGlvbi4gU2luY2UgaXQgaXMgc29mdHdhcmUtZW11bGF0ZWQsIGl0IGlzIGZ1bGx5IHJlYWNoYWJsZSBhbmQgdGVzdGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVS4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG1vZGlmaWVkIGF0dGFjaC9kZXRhY2gvdW5yZWdpc3RlciBETUIgZnVuY3Rpb25zIGFuZCB0aGVpciBTTUMgY2FsbGVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJESUJTXCIsXG4gICAgXCJESUJTX0xPXCIsXG4gICAgXCJTTUNcIixcbiAgICBcIklORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkaWJzX2xvX3VucmVnaXN0ZXJfZG1iXCIsXG4gICAgXCJkaWJzX2xvX2F0dGFjaF9kbWJcIixcbiAgICBcImRpYnNfbG9fZGV0YWNoX2RtYlwiLFxuICAgIFwic21jX2lzbV91bnJlZ2lzdGVyX2RtYlwiLFxuICAgIFwic21jX2lzbV9hdHRhY2hfZG1iXCIsXG4gICAgXCJzbWNfaXNtX2RldGFjaF9kbWJcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyByZWZlcmVuY2UgY291bnRpbmcgYW5kIGxvY2tpbmcgbG9naWMgaW4gdGhlIERJQlMgbG9vcGJhY2sgZHJpdmVyIChkaWJzX2xvb3BiYWNrLmMpLiBUaGlzIGlzIGEgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlIHVzZWQgYnkgdGhlIFNNQyAoU2hhcmVkIE1lbW9yeSBDb21tdW5pY2F0aW9ucykgcHJvdG9jb2wgZm9yIGludHJhLU9TIGNvbW11bmljYXRpb24uIFNpbmNlIGl0IGlzIHNvZnR3YXJlLWVtdWxhdGVkLCBpdCBpcyBmdWxseSByZWFjaGFibGUgYW5kIHRlc3RhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBtb2RpZmllZCBhdHRhY2gvZGV0YWNoL3VucmVnaXN0ZXIgRE1CIGZ1bmN0aW9ucyBhbmQgdGhlaXIgU01DIGNhbGxlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowkfx65[1] Phase: Succeeded StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-27 19:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-27 19:52:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2] Phase: Succeeded StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-27 19:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-27 19:52:40 +0000 UTC FinishedAt: 2026-07-27 19:52:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-2647186276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-27 19:52:50 +0000 UTC FinishedAt: 2026-07-27 20:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-27 19:52:50 +0000 UTC FinishedAt: 2026-07-27 20:35:29 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*681c8853-2128-4f55-a2f7-ffdfd8936661,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-2647186276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "64153c6f-0839-4cce-841b-60dcc2a41aa3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-3371465634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-27 19:52:50 +0000 UTC FinishedAt: 2026-07-27 20:35:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*681c8853-2128-4f55-a2f7-ffdfd8936661,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-2647186276/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "64153c6f-0839-4cce-841b-60dcc2a41aa3", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-3371465634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-27 20:35:29 +0000 UTC FinishedAt: 2026-07-27 20:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-27 20:35:29 +0000 UTC FinishedAt: 2026-07-27 20:35:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-27 20:35:29 +0000 UTC FinishedAt: 2026-07-27 20:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-27 20:35:29 +0000 UTC FinishedAt: 2026-07-27 20:35:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-4222931555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-27 20:35:50 +0000 UTC FinishedAt: 2026-07-27 20:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-27 20:35:50 +0000 UTC FinishedAt: 2026-07-27 20:37:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64153c6f-0839-4cce-841b-60dcc2a41aa3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-3371465634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-27 20:37:55 +0000 UTC FinishedAt: 2026-07-27 20:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-27 20:37:55 +0000 UTC FinishedAt: 2026-07-27 20:37:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-27 20:37:55 +0000 UTC FinishedAt: 2026-07-27 21:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-27 20:37:55 +0000 UTC FinishedAt: 2026-07-27 21:28:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*681c8853-2128-4f55-a2f7-ffdfd8936661,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-4222931555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4546a16d-509e-4d50-9043-cc854cc12d07", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-2311724823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-27 20:37:55 +0000 UTC FinishedAt: 2026-07-27 21:28:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*681c8853-2128-4f55-a2f7-ffdfd8936661,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-4222931555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "4546a16d-509e-4d50-9043-cc854cc12d07", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-2311724823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-27 21:28:46 +0000 UTC FinishedAt: 2026-07-27 21:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-27 21:28:46 +0000 UTC FinishedAt: 2026-07-27 21:28:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-27 21:28:46 +0000 UTC FinishedAt: 2026-07-27 21:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-27 21:28:46 +0000 UTC FinishedAt: 2026-07-27 21:30:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4546a16d-509e-4d50-9043-cc854cc12d07,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-2311724823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },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-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*64153c6f-0839-4cce-841b-60dcc2a41aa3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4546a16d-509e-4d50-9043-cc854cc12d07,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-3371465634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-2311724823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-27 21:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-27 21:30:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-1401227132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-27 21:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-27 21:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-27 21:30:48 +0000 UTC FinishedAt: 2026-07-27 21:30:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-27 21:31:09 +0000 UTC FinishedAt: 2026-07-28 00:33:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkfx65[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dibs_lo_unregister_dmb","dibs_lo_attach_dmb","dibs_lo_detach_dmb","smc_ism_unregister_dmb","smc_ism_attach_dmb","smc_ism_detach_dmb"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"53658c6f3682967a5e76ed4bc7462c4bdcddaec3","config_name":"upstream-apparmor-kasan.config","enable_configs":["DIBS","DIBS_LO","SMC","INFINIBAND"],"series_id":"40f780a3-575e-4062-91a3-3f9724d548e0","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-27 21:31:09 +0000 UTC FinishedAt: 2026-07-28 00:33:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*64153c6f-0839-4cce-841b-60dcc2a41aa3,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4546a16d-509e-4d50-9043-cc854cc12d07,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-3371465634/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-build-action-2311724823/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowkfx65/series-workflowkfx65-convert-artifact-1401227132/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}