Name: series-workflowxkzxk Phase: Succeeded StartedAt: 2026-07-24 22:40:19 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[0] Phase: Succeeded StartedAt: 2026-07-24 22:40:19 +0000 UTC FinishedAt: 2026-07-24 23:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[0].run-triage Phase: Succeeded StartedAt: 2026-07-24 22:40:19 +0000 UTC FinishedAt: 2026-07-24 23:07:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "cca2780b61947fd27ec621541edd0902e193a609", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "cca2780b61947fd27ec621541edd0902e193a609", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "a17edc2f-97a7-42c2-bb26-58458dae960a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_fill_forward_path", "nft_flow_route" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIzOjA0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4ZGIyNWI3OTU3M2UzYy4uMzBkYzc4YjRmMWEzODggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtOTAyLDYgJiM0Mzs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHU4XHRsM19wcm90bztcbiYjNDM7XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uZmVkMTAxZjU0YThhMzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNiAmIzQzOzc1MCwyMyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4mIzQzO1x0aW50IGs7XG4mIzQzO1xuJiM0MztcdGZvciAoayA9IHN0YWNrLVx1MDAzZW51bV9wYXRoczsgayBcdTAwM2U9IDA7IGstLSkge1xuJiM0MztcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4mIzQzO1x0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuJiM0MztcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4mIzQzO1x0XHRcdGRzdF9yZWxlYXNlKHBhdGgtXHUwMDNldHVuLmRzdCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NSwyOCAmIzQzOzc4MiwzOCBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4gXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4tXHRcdGlmICghcGF0aClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAoIXBhdGgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoIWN0eC5kZXYpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbi1cdGlmICghcGF0aClcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmICghcGF0aCkge1xuJiM0MztcdFx0cmV0ID0gLTE7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xuaW5kZXggZDFhYTA0OGE2MDk5Y2MuLjBhNGZhMTM1MWRkNzY4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNzAsMTAgJiM0MzszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRpcF9ydF9wdXQocnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwODMuLjMxMmRlNGE2ZTE2MGM3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xODY0LDEyICYjNDM7MTg2NCwxMiBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gdC1cdTAwM2VwYXJtcy5sYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y2ID0gdC1cdTAwM2VwYXJtcy5yYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICYjNDM7NDIsNyBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgJiM0Mzs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgaWQge1xuIFx0XHRfX3UxNlx0aWQ7XG4gXHRcdF9fYmUxNlx0cHJvdG87XG4gXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbiBcdHU4IG51bV9lbmNhcHM7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XG4mIzQzO1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcbiYjNDM7XG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdGNhc2UgREVWX1BBVEhfVkxBTjpcbiBcdFx0Y2FzZSBERVZfUEFUSF9QUFBPRTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4tXHRcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xMjMsMTUgJiM0MzsxMjUsMTYgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovXG4gXHRcdFx0aWYgKHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICYjNDM7MTU1LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0c3dpdGNoIChwYXRoLVx1MDAzZWJyaWRnZS52bGFuX21vZGUpIHtcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlaW5ncmVzc192bGFucyB8PSBCSVQoaW5mby1cdTAwM2VudW1fZW5jYXBzIC0gMSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2Fwcy0tO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTc2LDE2ICYjNDM7MTc5LDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdH1cbi1cdGluZm8tXHUwMDNlb3V0ZGV2ID0gaW5mby1cdTAwM2VpbmRldjtcbiBcbi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VpbmRldikpXG4mIzQzO1x0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4mIzQzO1x0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8tXHUwMDNlZGV2LCBmdCkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShpbmZvLVx1MDAzZXR1bl9kc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMDUsNDQgJiM0MzsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCAmIzQzOzIyNywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cdTAwM2VpZmluZGV4O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4mIzQzO1x0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBsb2dpYyBhbmQgaXRzIGltcGxlbWVudGF0aW9uIGluIElQL0lQdjYgdHVubmVscyAoYGlwaXBgLCBgaXA2X3R1bm5lbGApIHRvIHN0b3JlIGFuZCBtYW5hZ2UgYSBgZHN0X2VudHJ5YC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggKGBuZnRfZmxvd19yb3V0ZWApIHRvIHVzZSB0aGlzIGBkc3RfZW50cnlgIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5ldyByb3V0ZSBsb29rdXAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTJiNWJlM2Q0Yjk1NzVlZGFiNDljODI0ODBmYmY3MjhiZGVmNmJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjM6MDQ6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4ZGIyNWI3OTU3M2UzYy4uMzBkYzc4YjRmMWEzODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtOTAyLDYgJiM0Mzs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHsKIAkJCX07CiAKIAkJCXU4CWwzX3Byb3RvOwomIzQzOwkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAkJfSB0dW47CiAJCXN0cnVjdCB7CiAJCQllbnVtIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZmUuLmZlZDEwMWY1NGE4YTM0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzUwLDYgJiM0Mzs3NTAsMjMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIAlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWZvciAoayA9IHN0YWNrLSZndDtudW1fcGF0aHM7IGsgJmd0Oz0gMDsgay0tKSB7CiYjNDM7CQlwYXRoID0gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKJiM0MzsJCXN3aXRjaCAocGF0aC0mZ3Q7dHlwZSkgewomIzQzOwkJY2FzZSBERVZfUEFUSF9UVU46CiYjNDM7CQkJZHN0X3JlbGVhc2UocGF0aC0mZ3Q7dHVuLmRzdCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewpAQCAtNzY1LDI4ICYjNDM7NzgyLDM4IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAogCXdoaWxlIChjdHguZGV2ICZhbXA7JmFtcDsgY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7CiAJCWxhc3RfZGV2ID0gY3R4LmRldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7Ci0JCWlmICghcGF0aCkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmICghcGF0aCkgewomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KIAogCQltZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTsKIAkJcmV0ID0gY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBwYXRoKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCi0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7CiYjNDM7CQkJcmV0ID0gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQogCX0KIAogCWlmICghY3R4LmRldikKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIXBhdGgpIHsKJiM0MzsJCXJldCA9IC0xOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUOwogCXBhdGgtJmd0O2RldiA9IGN0eC5kZXY7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBkMWFhMDQ4YTYwOTljYy4uMGE0ZmExMzUxZGQ3NjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM3MCwxMCAmIzQzOzM3MCwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlwYXRoLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtJmd0O3NhZGRyOwogCXBhdGgtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gdGlwaC0mZ3Q7ZGFkZHI7CiAJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwlwYXRoLSZndDt0dW4uZHN0ID0gJmFtcDtydC0mZ3Q7ZHN0OwogCXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCiAJY3R4LSZndDtkZXYgPSBydC0mZ3Q7ZHN0LmRldjsKLQlpcF9ydF9wdXQocnQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwODMuLjMxMmRlNGE2ZTE2MGM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODY0LDEyICYjNDM7MTg2NCwxMiBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJcGF0aC0mZ3Q7dHVuLnNyY192NiA9IHQtJmd0O3Bhcm1zLmxhZGRyOwogCQlwYXRoLSZndDt0dW4uZHN0X3Y2ID0gdC0mZ3Q7cGFybXMucmFkZHI7CiAJCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCXBhdGgtJmd0O3R1bi5kc3QgPSBkc3Q7CiAJCXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCQljdHgtJmd0O2RldiA9IGRzdC0mZ3Q7ZGV2OwogCX0KIAogCWVyciA9IGRzdC0mZ3Q7ZXJyb3I7Ci0JZHN0X3JlbGVhc2UoZHN0KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxMS4uOWY2ZmMyOWM0ZTE2OTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtNDIsOCAmIzQzOzQyLDcgQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKQEAgLTc2LDE0ICYjNDM7NzUsMTQgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIH0KIAogc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZCB7CiAJCV9fdTE2CWlkOwogCQlfX2JlMTYJcHJvdG87CiAJfSBlbmNhcFtORl9GTE9XX1RBQkxFX0VOQ0FQX01BWF07CiAJdTggbnVtX2VuY2FwczsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7CiAJdTggbnVtX3R1bnM7CiAJdTggaW5ncmVzc192bGFuczsKIAl1OCBoX3NvdXJjZVtFVEhfQUxFTl07CkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewogCWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7CiB9OwogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpOwomIzQzOwogc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCSAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpCiYjNDM7CQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGk7CkBAIC0xMDksNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCWNhc2UgREVWX1BBVEhfVkxBTjoKIAkJY2FzZSBERVZfUEFUSF9QUFBPRToKIAkJY2FzZSBERVZfUEFUSF9UVU46Ci0JCQlpbmZvLSZndDtpbmRldiA9IHBhdGgtJmd0O2RldjsKJiM0MzsJCQlpbmZvLSZndDtkZXYgPSBwYXRoLSZndDtkZXY7CiAJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKIAkJCQltZW1jcHkoaW5mby0mZ3Q7aF9zb3VyY2UsIHBhdGgtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtMTIzLDE1ICYjNDM7MTI1LDE2IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCQkvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovCiAJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9UVU4pIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuX2RzdCA9IHBhdGgtJmd0O3R1bi5kc3Q7CiAJCQkJaW5mby0mZ3Q7bnVtX3R1bnMmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQogCQkJCQlwYXRoLSZndDtlbmNhcC5pZDsKQEAgLTE1MiwxMyAmIzQzOzE1NSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJc3dpdGNoIChwYXRoLSZndDticmlkZ2Uudmxhbl9tb2RlKSB7CiAJCQljYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgPT0gMCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7aW5ncmVzc192bGFucyB8PSBCSVQoaW5mby0mZ3Q7bnVtX2VuY2FwcyAtIDEpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzoKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPSBwYXRoLSZndDticmlkZ2Uudmxhbl9pZDsKIAkJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtJmd0O2JyaWRnZS52bGFuX3Byb3RvOwpAQCAtMTY2LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1VOVEFHOgogCQkJCWlmIChpbmZvLSZndDtudW1fZW5jYXBzID09IDApCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O251bV9lbmNhcHMtLTsKIAkJCQlicmVhazsKQEAgLTE3NiwxNiAmIzQzOzE3OSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCWluZm8tJmd0O291dGRldiA9IGluZm8tJmd0O2luZGV2OwogCi0JaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgJmFtcDsmYW1wOwotCSAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tJmd0O2luZGV2KSkKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKCZhbXA7ZnQtJmd0O2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby0mZ3Q7ZGV2KSkKIAkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCiYjNDM7CWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLSZndDtkZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKIAlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCiYjNDM7CQlkc3RfcmVsZWFzZShpbmZvLSZndDt0dW5fZHN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMDUsNDQgJiM0MzsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIGZvdW5kOwogfQogCi1zdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCi0JCQkJCXN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsICp0dW4sCi0JCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKLQkJCQkJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcikKLXsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpjdXJfZHN0ID0gcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0OwotCXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMOwotCXN0cnVjdCBmbG93aSBmbCA9IHt9OwotCi0Jc3dpdGNoIChuZnRfcGYocGt0KSkgewotCWNhc2UgTkZQUk9UT19JUFY0OgotCQlmbC51LmlwNC5kYWRkciA9IHR1bi0mZ3Q7ZHN0X3Y0LnNfYWRkcjsKLQkJZmwudS5pcDQuc2FkZHIgPSB0dW4tJmd0O3NyY192NC5zX2FkZHI7Ci0JCWZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS0mZ3Q7aWZpbmRleDsKLQkJZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC0mZ3Q7c2tiKSk7Ci0JCWZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7Ci0JCWZsLnUuaXA0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwotCQlicmVhazsKLQljYXNlIE5GUFJPVE9fSVBWNjoKLQkJZmwudS5pcDYuZGFkZHIgPSB0dW4tJmd0O2RzdF92NjsKLQkJZmwudS5pcDYuc2FkZHIgPSB0dW4tJmd0O3NyY192NjsKLQkJZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLSZndDtpZmluZGV4OwotCQlmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LSZndDtza2IpKTsKLQkJZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtJmd0O3NrYi0mZ3Q7bWFyazsKLQkJZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7Ci0JCWJyZWFrOwotCX0KLQotCW5mX3JvdXRlKG5mdF9uZXQocGt0KSwgJmFtcDt0dW5fZHN0LCAmYW1wO2ZsLCBmYWxzZSwgbmZ0X3BmKHBrdCkpOwotCWlmICghdHVuX2RzdCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0OwotCWRzdF9yZWxlYXNlKGN1cl9kc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKQEAgLTI1NSwyOCAmIzQzOzIyNywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dOwogCWludCBpOwogCi0JaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsICZhbXA7c3RhY2spICZsdDsgMCB8fAotCSAgICBuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCAmYW1wO2Z0LSZndDtkYXRhKSAmbHQ7IDApCi0JCXJldHVybiAtRU5PRU5UOwotCi0JaWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSkKJiM0MzsJaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CSAgICBuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCBmdCkgJmx0OyAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWlmIChpbmZvLm91dGRldikKLQkJcm91dGUtJmd0O3R1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJcm91dGUtJmd0O3R1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi0mZ3Q7aWZpbmRleDsKIAotCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi0mZ3Q7aWZpbmRleDsKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0uaWQgPSBpbmZvLmVuY2FwW2ldLmlkOwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0ucHJvdG8gPSBpbmZvLmVuY2FwW2ldLnByb3RvOwogCX0KIAotCWlmIChpbmZvLm51bV90dW5zICZhbXA7JmFtcDsKLQkgICAgIW5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUocGt0LCAmYW1wO2luZm8udHVuLCByb3V0ZSwgZGlyKSkgewomIzQzOwlpZiAoaW5mby5udW1fdHVucykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bzsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVuczsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdCk7CiYjNDM7CQlyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QgPSBpbmZvLnR1bl9kc3Q7CiAJfQogCiAJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV9lbmNhcHMgPSBpbmZvLm51bV9lbmNhcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBub24tdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZsb3cgb2ZmbG9hZGluZyBhbmQgdHVubmVscy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB1cGRhdGluZyBob3cgZm9yd2FyZCBwYXRocyBhcmUgY29uc3RydWN0ZWQsIHNwZWNpZmljYWxseSB0aGUgYG5ldF9kZXZpY2VfcGF0aGAgc3RydWN0dXJlLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RgIHRvIGBwYXRoLnR1bmAgYW5kIGFyZSBtYW5hZ2luZyBpdHMgbGlmZXRpbWUg4oCTIHJlbGVhc2luZyBpdCBvbiBlcnJvciB3aXRoIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gSSBzZWUgdGhleSBhcmUgbGV2ZXJhZ2luZyB0aGlzIHdpdGhpbiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHRvIGJ5cGFzcyBhIG5vdy1yZW1vdmVkIGBuZl9yb3V0ZWAgY2FsbCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGFsc28gbWVhbnMgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgbW9yZSBkZXRhaWxlZCBhbmFseXNpcyBhbmQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIGFyZSBpbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19yb3V0ZWAsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG5mdF9mbG93X3JvdXRlYCBpcyBleHBvcnRlZCwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCByZWFjaCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZGV2X2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIwMT1zdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIxODpzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTktXHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjQ9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDYtXHRpZiAocm91dGUtXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcdD09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDgtXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzEwLVx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzExOlx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxMi1cdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBORlQgRmxvdyBSb3V0ZSoqCgpPa2F5LCBzbyBgbmZ0X2Zsb3dfcm91dGVgIHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgTkZULXJlbGF0ZWQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGhlY2sgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGhvdyB0aGUgc3lzdGVtIGZ1bmN0aW9ucyBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdHJhY2UgdGhhdCBjYWxsIGdyYXBoLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nz1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjY0OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjUtXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24sIHNvIGl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgYG5mdF9mbG93X29mZmxvYWRgIGV4cHJlc3Npb24gd2l0aGluIG5ldGZpbHRlci4gSXQmIzM5O3MgdGhlIGVuZ2luZSB0aGF0IGZpZ3VyZXMgb3V0IGlmIHNvbWV0aGluZyBjYW4gYmUgb2ZmbG9hZGVkIGZvciBmbG93IHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGRvaW5nLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0PyBHaXZlbiBpdHMgcHVycG9zZSwgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0aGUgYWN0dWFsIGRhdGEgcGF0aCBoYW5kbGluZyB0byBzZWUgd2hlcmUgdGhlIGRlY2lzaW9ucyBhcmUgbWFkZS4gTGV0IG1lIGNoZWNrIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB0aGF0JiMzOTtzIGxpa2VseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gZXhwbG9yaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoaXMgd29ya3MuIEl0JiMzOTtzIHByb2JhYmx5IHdoZXJlIGl0IGZpZ3VyZXMgb3V0IHRoZSBuZXh0IGhvcCBhbmQgaWYgdGhlIHBhY2tldCBuZWVkcyB0byBiZSBzZW50IGZvciBmb3J3YXJkaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBvZmZsb2FkIGRlY2lzaW9uIGlzIGJlaW5nIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjg5LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEwNTpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzQyOD1pbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUyLVxubmV0L2NvcmUvZGV2LmM6NzUzOnN0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxubmV0L2NvcmUvZGV2LmMtNzU0LXtcbi0tXG5uZXQvY29yZS9kZXYuYy03NjktXG5uZXQvY29yZS9kZXYuYzo3NzA6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG5uZXQvY29yZS9kZXYuYy03NzEtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbi0tXG5uZXQvY29yZS9kZXYuYy04MTMtZXJyX291dDpcbm5ldC9jb3JlL2Rldi5jOjgxNDpcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbm5ldC9jb3JlL2Rldi5jLTgxNS1cbi0tXG5uZXQvY29yZS9kZXYuYy04MTctfVxubmV0L2NvcmUvZGV2LmM6ODE4OkVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7XG5uZXQvY29yZS9kZXYuYy04MTktXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTg5OnN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXHQ9IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVx0Lm5kb19zZXR1cF90Y1x0XHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNj1zdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDU6c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NzQ6XHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjE4PXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIzMDpcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMzEtXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBmdCkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9yd2FyZCBQYXRoIFVwZGF0ZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9yd2FyZGluZyBwYXRoczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIG1haW4gcGxheWVycyBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgZWl0aGVyIGEgbG93IGxldmVsIHJvdXRpbmcgY2hhbmdlLCBvciBhIG1vcmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIHByb2Nlc3NpbmcuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29yZSBmdW5jdGlvbnMsIGxldCBtZSB6ZXJvIGluIG9uIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBzdWdnZXN0IHR1bm5lbC1yZWxhdGVkIHBhdGggYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9yd2FyZGluZyBsb2dpYyBjaGFuZ2VzIHdpdGhpbiB0aGVzZSB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgd2lsbCBwbGF5IHdpdGggYW55IG90aGVyIHR1bm5lbCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgc3RhY2suIEl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGltcGFjdCBvbiBvdmVybGF5IGFuZCB1bmRlcmxheSByb3V0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYz0zNDE9aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zNTUtXG5uZXQvaXB2NC9pcGlwLmM6MzU2OnN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L2lwdjQvaXBpcC5jLTM1Ny1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0zODktXHQubmRvX3R1bm5lbF9jdGxcdD0gaXBpcF90dW5uZWxfY3RsLFxubmV0L2lwdjQvaXBpcC5jOjM5MDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0L2lwdjQvaXBpcC5jLTM5MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgY29yZSB0byB0aGUgSVB2NiB0dW5uZWwgZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZm9yd2FyZGluZyBwYXRoLiBJdOKAmXMgcmVzcG9uc2libGUgZm9yLCBwcmVzdW1hYmx5LCBjb25zdHJ1Y3Rpbmcgb3IgcG9wdWxhdGluZyB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgdG8gYWxsb3cgYW4gSVB2NiBwYWNrZXQgdG8gdHJhdmVyc2UgYSB0dW5uZWwuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hhdCBwaWVjZXMgdGhhdCBlbmNvbXBhc3NlczogcG90ZW50aWFsbHkgdGhlIG91dGVyIGhlYWRlciAodGhlIHR1bm5lbCBoZWFkZXIsIGxpa2VseSBJUHY2KSwgdGhlIGlubmVyIGhlYWRlciAodGhlIGVuY2Fwc3VsYXRlZCBJUHY2IHBhY2tldCksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFib3V0IHRoZSB0dW5uZWwgaXRzZWxmIChzb3VyY2UvZGVzdGluYXRpb24gZW5kcG9pbnRzLCB0dW5uZWwgSUQgaWYgYXBwbGljYWJsZSwgZXRjLiksIGFuZCBvZiBjb3Vyc2UsIGFueSBuZWNlc3Nhcnkgcm91dGluZyBpbmZvcm1hdGlvbiB0byBkaXJlY3QgdGhlIHBhY2tldCB0b3dhcmRzIGl0cyB1bHRpbWF0ZSBkZXN0aW5hdGlvbiB0aHJvdWdoIHRoZSB0dW5uZWwuCgpJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIElzIGl0IGNhbGxlZCBkaXJlY3RseSBieSB0aGUgSVB2NiBpbnB1dCBwYXRoPyBJcyBpdCBwYXJ0IG9mIHRoZSBvdXRwdXQgcGF0aD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cCBwcm9jZXNzPyBJJiMzOTttIHBpY3R1cmluZyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLi4uIGFuIGluY29taW5nIElQdjYgcGFja2V0IHRyaWdnZXJzIHRoZSB0dW5uZWwgZW50cnkgcG9pbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiDigJMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBpcyBpbnZva2VkIHRvIHByZXBhcmUgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uIHRocm91Z2ggdGhlIHR1bm5lbC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYXNwZWN0cz8gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgb2ZmbG9hZGluZyBjYXBhYmlsaXRpZXMgb3Igc2V0cyB1cCBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSBpbiB0aGUgZGF0YXBhdGguIEkmIzM5O2QgYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uczogYXJlIHRoZXJlIGFueSBjYWNoaW5nIG1lY2hhbmlzbXMsIHByZS1jb21wdXRhdGlvbiB0ZWNobmlxdWVzLCBvciBkYXRhIHN0cnVjdHVyZSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGhlcmUgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEFuZCB3aGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJcyB0aGVyZSBhbnkgZ3JhY2VmdWwgZGVncmFkYXRpb24gYnVpbHQtaW4gdG8gaGFuZGxlIHBvdGVudGlhbCB0dW5uZWwgcGF0aCBmYWlsdXJlcyBvciBtaXNjb25maWd1cmF0aW9ucz8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2Qgd2FudCB0byBpbnZlc3RpZ2F0ZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0xODQyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg0NDpzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg0LVx0Lm5kb19nZXRfaWZsaW5rID0gaXA2X3RubF9nZXRfaWZsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjI5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYm90aCBvZiB3aGljaCBhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBuZG9fZmlsbF9mb3J3YXJkX3BhdGhgLCB1c2VkIGZvciBpcGlwIGFuZCBpcDZfdHVubmVsIGRldmljZXMuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjYWxsZWQgZnJvbSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC4KClRoZSBrZXkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiwgdGhlbiwgYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGl0c2VsZiwgYW5kIGFsc28gYG5mdF9mbG93X3JvdXRlYC4KCkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgbmZ0X2Zsb3dfcm91dGVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBBaCB5ZXMsIGl0IGlzOiBgRVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO2AgRXhjZWxsZW50LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEZvciBgbmZ0X2Zsb3dfcm91dGVgLCBpdCYjMzk7cyBsb2NhdGVkIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhlIHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMgZnJvbSB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGVuc3VyaW5nIGEgcHJvcGVyIGZ1enplciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkVuYWJsaW5nIHRoZSBgbmZfZmxvd190YWJsZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWUsIGFuZCBJJiMzOTt2ZSBjaXJjbGVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBjb25uZWN0aW9uIHRyYWNraW5nLiBUbyBtYWtlIHRoaXMgdGhpbmcgcmVhbGx5IHNpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUgaXMgZW5hYmxlZC4gSXTigJlzIHByZXR0eSBvYnZpb3VzLCBidXQgeW91IGhhdmUgdG8gc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBXaXRob3V0IHRoYXQsIEkmIzM5O20gbm90IGdvaW5nIHRvIGJlIHNlZWluZyB0aGUgYWNjZWxlcmF0aW9uIEkmIzM5O20gaG9waW5nIGZvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQsIGlmIG5lZWRlZCwgZ2V0IHRoYXQgdHVybmVkIG9uIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBJdCBmZWVscyBsaWtlIGEgcHJlcmVxdWlzaXRlLCBhIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIE9uY2UgSSB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBlbmFibGVkLCB0aGVuIEkgY2FuIG1vdmUgdG8gdGhlIGFjdHVhbCBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfTkZfRkxPV19UQUJMRVxcKSBcXCYjNDM7PSBuZl9mbG93X3RhYmxlXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBMYW5kc2NhcGUgZm9yIG5mX2Zsb3dfdGFibGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBzdHJ1Y3R1cmUgb2YgYG5mX2Zsb3dfdGFibGVgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9uZXRmaWx0ZXIvYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcywgaW5jbHVzaW9uIG9mIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29tcGlsYXRpb24gc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfdGFibGVgLiBUaGUgYE1ha2VmaWxlYCB3aWxsIGxpa2VseSBzZXJ2ZSBhcyBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQgdG8gZmluZGluZyByZWxhdGVkIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBtYWdpYyBpcyBkZWZpbmVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVx0JiM0Mzs9IG5mdF9md2RfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHJlcXVpcmVtZW50cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgTmV0d29yayBGbG93IE9mZmxvYWRpbmcqKgoKUmlnaHQsIHNvIHRvIGV2ZW4gKmJlZ2luKiB3b3JraW5nIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmcgaW4gdGhpcyBjb250ZXh0LCB0aGUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBvcHRpb24gaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIFRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb25hbCBwaWVjZSwgdGhlIGJhc2ljIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUsIHdpdGhvdXQgd2hpY2ggd2UmIzM5O3JlIGRlYWQgaW4gdGhlIHdhdGVyLiBXZSBuZWVkIHRoZSBjb3JlIG1hY2hpbmVyeSB0byBtYW5hZ2UgdGhlc2UgZmxvd3MgaW4gdGhlIGZpcnN0IHBsYWNlLgoKQW5kIHRoZW4sIGxvb2tpbmcgZGVlcGVyIGludG8gaG93IHRoaXMgb2ZmbG9hZGluZyBpcyAqYWN0dWFsbHkqIGltcGxlbWVudGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuZXh0IGNyaXRpY2FsIGRlcGVuZGVuY3kuIFRoaXMgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggb2ZmbG9hZGluZyBmbG93cyB1c2luZyBgbmZ0YWJsZXNgLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlLCBpZiBJIHdhbnQgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbmFsaXR5ICh3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcm91dGluZyBiYXNlZCBvbiB0aGVzZSBvZmZsb2FkZWQgZmxvd3MpLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGVyZWZvcmUsIGlmIEkgd2FudCB0byB1c2UgdGhlIGZ1bmN0aW9uIGBuZnRfZmxvd19yb3V0ZWAsIHRoZW4gSSByZXF1aXJlIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIHNpbmNlIHRoZSB0d28gZnVuY3Rpb25zIGFyZSBzbyBjbG9zZWx5IGNvdXBsZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByYWN0aWNlIHdpdGggcmVnYXJkcyB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgTGludXggS2VybmVsLCBJIGFtIGNvbmZpZGVudCBJIHVuZGVyc3RhbmQgdGhlIHRob3VnaHQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNoZWNraW5nIFNwZWNpZmljIENvZGUgRmlsZXMgZm9yIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgaXNzdWUgbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIFRoZSBmaXJzdCB0d28gZmlsZXMgdGhhdCBqdW1wIG91dCB0byBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcGlwLmNgIGFuZCBgaXA2X3R1bm5lbC5jYC4gVGhlc2UgYm90aCBoYW5kbGUgY29yZSBJUC1pbi1JUCB0dW5uZWxpbmcgbWVjaGFuaXNtcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZywgaXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhlIGJ1ZyBsaWVzIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHR1bm5lbGluZyBsb2dpYyBvciwgcGVyaGFwcywgaG93IHRoZXNlIG1vZHVsZXMgaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvd3MsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBzdGFjayB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9NYWtlZmlsZT0xMz1tbHhzd19zcGVjdHJ1bS1vYmpzXHRcdDo9IHNwZWN0cnVtLm8gc3BlY3RydW1fYnVmZmVycy5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGUtMjItXHRcdFx0XHQgICBzcGVjdHJ1bV9mbG93ZXIubyBzcGVjdHJ1bV9jbnQubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGU6MjM6XHRcdFx0XHQgICBzcGVjdHJ1bV9maWQubyBzcGVjdHJ1bV9pcGlwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTI0LVx0XHRcdFx0ICAgc3BlY3RydW1fYWNsX2ZsZXhfYWN0aW9ucy5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOZXR3b3JrIElQSVAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgdGhlIHN5c3RlbSBoaW5nZXMgb24gaGF2aW5nIGBDT05GSUdfTkVUX0lQSVBgIGVuYWJsZWQuIFRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGRlYWxpbmcgd2l0aCBsZXZlcmFnZXMgSVAtaW4tSVAgdHVubmVsaW5nLiBUaGF0IGNvdWxkIG1lYW4gaXQmIzM5O3Mgc2V0dGluZyB1cCBzb21lIHNvcnQgb2YgdmlydHVhbCBuZXR3b3JrLCBtYXliZSBmb3IgZW5jYXBzdWxhdGlvbiBvciBmb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93ICp3aHkqIGl0JiMzOTtzIHJlcXVpcmVkLiBJcyBpdCBhIGhhcmQgZGVwZW5kZW5jeT8gSXMgaXQgcHJvdmlkaW5nIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBpcyBpdCBzaW1wbHkgYSBsZWdhY3kgY29tcG9uZW50IHRoYXQgaGFzIHRvIGJlIHByZXNlbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcHVycG9zZSBvZiBgQ09ORklHX05FVF9JUElQYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGhpbmdlcyBvbiBgQ09ORklHX0lQVjZfVFVOTkVMYCBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IHNldC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBCYXNlZCBvbiB3aGF0IEkgaGF2ZSBoZXJlIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGltcG9ydGFudCBhcyB3ZWxsOiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgLCBgQ09ORklHX05FVF9JUElQYCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IsIHNvIHRoZXkgbmVlZCB0byBiZSBrZXB0IGluIG1pbmQuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIGRvaW5nIGFuZCBob3cgdGhleSByZWxhdGUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzcwPWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTgxNy19XG5uZXQvY29yZS9kZXYuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbm5ldC9jb3JlL2Rldi5jLTgxOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlZlcmlmeWluZyBgbmZ0X2Zsb3dfcm91dGVgIEF2YWlsYWJpbGl0eSoqCgpZZXMsIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIG9yIHdoYXRldmVyIGl0IGlzLCBpcyBhY3R1YWxseSBleHBvcnRlZC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciB1c2UuIE5vIHBvaW50IHByb2NlZWRpbmcgaWYgSSYjMzk7bSB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBhY2Nlc3NpYmxlLiBHb3R0YSB2ZXJpZnkgdGhhdCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2ND1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjUwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBpbml0aWFsIHN0YXRlbWVudCBpcyBhY2N1cmF0ZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgcG9zc2libGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiBwbGF5IGhlcmUuCgpSaWdodCwgSSBzZWUgdGhhdCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGhhcyBzZXZlcmFsIHN0YXRpYyBjYWxsZWVzOiBgbmZ0X2Zsb3dfcm91dGVgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9wYXRoX2luZm9gLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIEJlY2F1c2UgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBoYXMgdGhvc2Ugc3RhdGljIGNhbGxlZXMsIEkgc2VlIHRoYXQgYG5mdF9mbG93X3JvdXRlYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGtpY2sgdGhpbmdzIG9mZiwgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBkZWVwZXIuCgpCdXQsIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgb25seSBjYWxsZWQgZnJvbSB3aGVyZSBJIHRoaW5rIGl0IGlzLiBObyBwb2ludCBpbiBhc3N1bWluZyBhbnl0aGluZyBoZXJlLiBJIHdpbGwgY2hlY2sgZm9yIG90aGVyIHVzZXMgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjg5LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEwNTpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzQyOD1pbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvY29yZS9kZXYuYz03NTM9c3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzY5LVxubmV0L2NvcmUvZGV2LmM6NzcwOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxubmV0L2NvcmUvZGV2LmMtNzcxLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTg5OnN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03My1vdXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0Olx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTc1LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjI5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMzA6XHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjMxLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIGZsb3cgcGF0aCwgYXMgSSB1bmRlcnN0YW5kIGl0LiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgYG5mdF9mbG93X3JvdXRlYCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIHRoZSB1bHRpbWF0ZSBjYWxsZXIsIGxlYWRpbmcgaW50byBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLCB0aGVuIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2hpY2ggaXMsIGluIGVzc2VuY2UsIHRoZSBmb2NhbCBwb2ludCBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLgoKSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhbHNvIGRpcmVjdGx5IGludm9rZWQgYnkgaGFyZHdhcmUgb2ZmbG9hZCBkcml2ZXJzIGxpa2UgYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AgYW5kIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgbXkgaW5pdGlhbCB0aG91Z2h0IC0gdGhhdCBmdXp6aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGlzIHRoZSByaWdodCBzdHJhdGVneSBmb3IgcHJvYmluZyB0aGlzIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3ZlcnMgYm90aCB0aGUgY29yZSBzb2Z0d2FyZSBwYXRoIGFuZCB0aGUgY3JpdGljYWwgaGFyZHdhcmUgb2ZmbG9hZCBpbnRlcmFjdGlvbnMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIGxpa2VseSBwYXRocy4gSSBzZWUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIGBDT05GSUdfTkVUX0lQSVBgLCBhbmQgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIGFyZSBhbGwgd29ydGggZXhhbWluaW5nIHRvIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgY29uZGl0aW9uYWwgY29kZSBwYXRocy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gRW5zdXJpbmcgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciB3aWxsIGJlIGltcG9ydGFudCB3aGVuIGRldmVsb3BpbmcgbXkgZnV6emluZyB0ZXN0IHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKkNvcmUgTmV0d29ya2luZyBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNsZWFybHkgcG9pbnRzIHRvIHRoZSBuZWNlc3NpdHkgb2YgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYC4gV2UgY2FuJiMzOTt0IHJlYWxseSBkbyBtdWNoIGFkdmFuY2VkIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBvciBtYW5hZ2VtZW50IHdpdGhvdXQgdGhlc2UuIEkmIzM5O20gdGhpbmtpbmcgb2YgY29ubmVjdGlvbiB0cmFja2luZyBmaXJzdDsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24uIFdpdGhvdXQgaXQsIHdlIGxvc2UgdGhlIGFiaWxpdHkgdG8gbWFpbnRhaW4gc3RhdGVmdWwgZmlyZXdhbGxpbmcsIE5BVCBmdW5jdGlvbmFsaXR5LCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGJlbmVmaXRzIG9mIGEgbW9yZSBzb3BoaXN0aWNhdGVkIG5ldHdvcmsgc2V0dXAuIFdlJiMzOTtkIGJhc2ljYWxseSBiZSBzdHVjayB3aXRoIGEgcGFja2V0LWJ5LXBhY2tldCB2aWV3LCBhbmQgZnJhbmtseSwgdGhhdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBjdXQgaXQgaW4gYW55IG5vbi10cml2aWFsIGVudmlyb25tZW50LiBUaGVuLCBgTkZfRkxPV19UQUJMRWAgaXMgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZSBhdCBzY2FsZS4gSXQgb2ZmZXJzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGFjY2VsZXJhdGVzIHByb2Nlc3NpbmcsIGFuZCBkcmFzdGljYWxseSByZWR1Y2VzIENQVSBvdmVyaGVhZC4gU28sIHllYWgsIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMg4oCTIHdlIG5lZWQgYm90aCBvZiB0aGVzZS4gT3RoZXJ3aXNlLCB3ZSYjMzk7cmUgYnVpbGRpbmcgb24gc2FuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgYW5kIGl0cyBSZWxhdGlvbnNoaXAgdG8gTkZfQ09OTlRSQUNLKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE5GX0ZMT1dfVEFCTEVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBgTkZfQ09OTlRSQUNLYC4gSSBtZWFuLCBJJiMzOTttIGFuYWx5emluZyB0aGlzIGRlcGVuZGVuY3kgYW5kIGl0JiMzOTtzIG9idmlvdXMuIGBORl9GTE9XX1RBQkxFYCBpcyBidWlsZGluZyB1cG9uIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gV2l0aG91dCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSBgTkZfQ09OTlRSQUNLYCwgYE5GX0ZMT1dfVEFCTEVgIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gSXQgcmVsaWVzIG9uIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgY29ubmVjdGlvbiBtZXRhZGF0YSB0aGF0IGBORl9DT05OVFJBQ0tgIG1hbmFnZXMuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzLCBtb2RpZmljYXRpb24gb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYE5GX0ZMT1dfVEFCTEVgIG11c3QgaW5oZXJlbnRseSBhY2NvdW50IGZvciBhbmQgdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgTkZfQ09OTlRSQUNLYCBvcGVyYXRlcy4gVGhleSYjMzk7cmUgaW5leHRyaWNhYmx5IGludGVydHdpbmVkLCBhbmQgYW55IGNoYW5nZXMgdG8gb25lIHdpbGwgdW5kb3VidGVkbHkgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdGhlci4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTmV0ZmlsdGVyJiMzOTtzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgbGlmZWJsb29kIG9mIExpbnV4IGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTttIGhvbWluZyBpbiBvbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhcm91bmQgbGluZSA3MTEuIFRoYXQgbGluZSwgZ2l2ZSBvciB0YWtlIGEgZmV3LCBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB0aGUgc2V0dGluZyBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlciBvciBtb2RpZnkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24sIHBvdGVudGlhbGx5IHNvbWUgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIGEgaGVscCB0ZXh0IHRoYXQmIzM5O3Mgd29ydGggYSBxdWljayBzY2FuLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmZWF0dXJlIGxpdmVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwuIEkmIzM5O20gYnJhY2luZyBteXNlbGYgZm9yIHRoZSB1c3VhbCBLY29uZmlnIHN5bnRheCDigJMgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSB0eXBlIGRlY2xhcmF0aW9uLCBtYXliZSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xlYXIsIGNvbmNpc2UgZG9jdW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRyZWFzdXJlcyBhd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxuIDcwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuIDcwNTpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXG4gNzA4Olx0XG4gNzA5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzEwOlx0XG4gNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgYXMgYSBzdW1tYXJ5IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmV0d29yayBGaWx0ZXIgTW9kdWxlIERlcGVuZGVuY2llcyAmYW1wOyBJbml0aWFsIEludmVzdGlnYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBzdG9jay4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AgYXJlIGdvaW5nIHRvIGJlIGFic29sdXRlbHkgZXNzZW50aWFsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0cmFmZmljIGluZ3Jlc3MgZmlsdGVyaW5nLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgb2YgdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHJlc3BlY3RpdmVseS4gQWxsIHByZXR0eSBmdW5kYW1lbnRhbCBpbiBtb3N0IG1vZGVybiBzZXR1cHMuCgpOb3csIGJlZm9yZSBkaWdnaW5nIGluIHRvbyBkZWVwbHksIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCB3ZSYjMzk7bGwgbmVlZCBgTkVUX0lQSVBgLiBXZSYjMzk7bGwga25vdyBwcmV0dHkgcXVpY2tseSBvbmUgd2F5IG9yIHRoZSBvdGhlciBpZiB0aGF0IG5lZWRzIHRvIGJlIGJyb3VnaHQgaW50byB0aGUgZXF1YXRpb24uIEl0JiMzOTtzIGEga2V5IG1vZHVsZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgd2UgbmVlZCB0byB0aGluayBhYm91dCBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZSBiZXR0ZXIsIGFuZCBJIHRoaW5rIEkmIzM5O2xsIGZpbmQgc29tZSBhbnN3ZXJzIHdpdGhpbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gbG9vayBhdCBhIHBhcnRpY3VsYXIgc2VjdGlvbiB3aXRoaW4gdGhpcyBmaWxlLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTYyLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCByZWxldmFudCBleHBlcnQgdG9waWMgYXJlYV0uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU1Olx0XHQgIG5ldCB2aWEgTkZTIGFuZCB5b3Ugd2FudCB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIGNvbXB1dGVyIHRvIGJlXG4gMTU2Olx0XHQgIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseSBhdCBib290IHRpbWUgdXNpbmcgdGhlIFJBUlAgcHJvdG9jb2wgKGFuXG4gMTU3Olx0XHQgIG9sZGVyIHByb3RvY29sIHdoaWNoIGlzIGJlaW5nIG9ic29sZXRlZCBieSBCT09UUCBhbmQgREhDUCksIHNheSBZXG4gMTU4Olx0XHQgIGhlcmUuIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byB1c2UgUkFSUCwgYSBSQVJQIHNlcnZlciBtdXN0IGJlXG4gMTU5Olx0XHQgIG9wZXJhdGluZyBvbiB5b3VyIG5ldHdvcmsuIFJlYWRcbiAxNjA6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnNyb290LnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAxNjE6XHRcbiAxNjI6XHRjb25maWcgTkVUX0lQSVBcbiAxNjM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiAxNjQ6XHRcdHNlbGVjdCBJTkVUX1RVTk5FTFxuIDE2NTpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxNjY6XHRcdGhlbHBcbiAxNjc6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAxNjg6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE2OTpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXG4gMTcwOlx0XHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxuIDE3MTpcdFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxuIDE3MjpcdFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxuIDE3MzpcdFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxuIDE3NDpcdFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzYxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIGZvciBJUHY2IFR1bm5lbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGl0IGNsZWFuIGFuZCBlZmZpY2llbnQuIE5vIG5lZWQgdG8gYnJpbmcgaW4gYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBwYWNrYWdlcyByaWdodCBub3c7IHRoYXQganVzdCBhZGRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIEkgd2FudCB0aGlzIGFzIHN0cmVhbWxpbmVkIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIGFzc2VzcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCYjMzk7cyBJUHY2IHR1bm5lbGluZyBzaXR1YXRpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBJUFY2X1RVTk5FTGAgc2V0dGluZy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyBpZiBhbiBJUHY2IHR1bm5lbCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBzdHVmZiBhbmQgSSB0aGluayBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTk5LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBob3BlZnVsbHksIGl0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCByaWdodD8gU28sIHRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBkZWNpc2lvbnMgcmVsYXRlZCB0byBJUHY2IHNob3VsZCBiZSBoYW5naW5nIG91dC4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGtub2JzIHdlIGhhdmUgdG8gdHdlYWsgaW4gdGhpcyBhcmVhLiBIb3BlZnVsbHksIGl0JiMzOTtzIGxhaWQgb3V0IGluIGEgY2xlYXIsIHNlbnNpYmxlIG1hbm5lciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcbiAxOTY6XHRjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuIDE5NzpcdFx0Ym9vbFxuIDE5ODpcdFxuIDE5OTpcdGNvbmZpZyBJUFY2X1RVTk5FTFxuIDIwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4gMjAxOlx0XHRzZWxlY3QgSU5FVDZfVFVOTkVMXG4gMjAyOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjAzOlx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMjA0Olx0XHRoZWxwXG4gMjA1Olx0XHQgIFN1cHBvcnQgZm9yIElQdjYtaW4tSVB2NiBhbmQgSVB2NC1pbi1JUHY2IHR1bm5lbHMgZGVzY3JpYmVkIGluXG4gMjA2Olx0XHQgIFJGQyAyNDczLlxuIDIwNzpcdFxuIDIwODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZyBJUFY2X0dSRVxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuIDIxMjpcdFx0c2VsZWN0IElQVjZfVFVOTkVMXG4gMjEzOlx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDIxNDpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmxvdyBPZmZsb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBmbG93IG9mZmxvYWRpbmcsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBldmVyeXRoaW5nIEkgbmVlZC4gTm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGdvb2Qg4oCTIGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBSaWdodCBub3csIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZXNlIGNvbmZpZ3MgaW4gcGFydGljdWxhcjogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgYmFzZSB0byBnZXQgc3RhcnRlZC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBORlRfRkxPV19PRkZMT0FEYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIEkgYWxzbyBuZWVkIHRvIGJyaW5nIGluIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZXBlbmRpbmcgb24gd2hhdCBJIGhhdmUgYXZhaWxhYmxlIGFuZCBpZiBpdCBpcyBuZWVkZWQgZm9yIG15IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBNeSB0aG91Z2h0cyBhcmUgZm9jdXNpbmcgYXJvdW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBkcml2ZXIsIHRoZSBjb3JlIGV4cHJlc3Npb24uIE1lYW53aGlsZSwgYE5GX0ZMT1dfVEFCTEVgIGlzIHRoZSBmdW5kYW1lbnRhbCBiYXNlLiBBbmQgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIHdoaWNoIEkgYmVsaWV2ZSBoYW5kbGVzIG1peGVkIElQdjQvSVB2NiBzY2VuYXJpb3MuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHBvc3NpYmlsaXR5IG9mIHNlcGFyYXRlIG1vZHVsZXMgbGlrZSBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZXNlIG1vZHVsZXMgdG8gZW5zdXJlIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lQViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBDaGVjay1JbioqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0IGFnYWluLCBlbnN1cmluZyBubyBzaWduaWZpY2FudCBjaGFuZ2VzIGhhdmUgc2xpcHBlZCBpbiB1bm5vdGljZWQgc2luY2UgdGhlIGxhc3Qgc3dlZXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBwZXJoYXBzIG5ldyBkZXBlbmRlbmNpZXMsIG9yIHJlZ3Jlc3Npb25zIGluIGV4aXN0aW5nIG9wdGlvbnMuIEdpdmVuIHRoZSBzY29wZSBvZiBuZXRmaWx0ZXIsIGFuZCB0aGUgaW50ZXJjb25uZWN0ZWRuZXNzIG9mIHZhcmlvdXMgc3ViLW1vZHVsZXMsIGEgZnJlc2ggbG9vayBpcyBhbHdheXMgd2FycmFudGVkLCBldmVuIGlmIEkgKnRoaW5rKiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgc3RhYmlsaXR5IGFuZCBhbnRpY2lwYXRpbmcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBLY29uZmlnIGlzIGtleSB0byBtYWludGFpbmluZyBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gRmlyc3QsIEkmIzM5O2xsIGV4cGxpY2l0bHkgaW5jbHVkZSBgTkZfRkxPV19UQUJMRV9JTkVUYCwganVzdCB0byBiZSBjZXJ0YWluLiBDYW4mIzM5O3QgaHVydCB0byBjb3ZlciBhbGwgYmFzZXMgYW5kIGVuc3VyZSB0aGF0IHRoZSBpbmV0IHRhYmxlIGlzIHRoZXJlLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gcmV2aWV3LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBwZXJ0aW5lbnQgY29uZmlncy4gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2g6CgoqICAgYE5GX0ZMT1dfVEFCTEVgIC0gVGhlIGJhc2UgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LCBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuCiogICBgTkZUX0ZMT1dfT0ZGTE9BRGAgLSBUaGlzIGlzIHRoZSBjZW50cmFsIHBpZWNlLCB0aGUgdGFyZ2V0IEkmIzM5O20gYWltaW5nIGZvci4KKiAgIGBORVRfSVBJUGAgLSBJcyB0aGlzIGdvaW5nIHRvIG1hdHRlcj8gQ291bGQgYmUgaWYgSSBoYXZlIGZsb3dzIGdvaW5nIHRvIG9yIGZyb20gYSB0dW5uZWwuCiogICBgSVBWNl9UVU5ORUxgIC0gU2FtZSB0aG91Z2h0IHByb2Nlc3MgYXMgdGhlIElQdjQgdHVubmVsLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgd2hlbiBjb25zaWRlcmluZyBteSBmbG93IHJ1bGVzLgoqICAgYE5FVEZJTFRFUl9JTkdSRVNTYCAtIEluZ3Jlc3MgZmlsdGVyaW5nIGlzIGltcG9ydGFudCwgc28gdGhpcyBzaG91bGQgYmUgZmluZS4KKiAgIGBORl9DT05OVFJBQ0tgIC0gQ29ubmVjdGlvbiB0cmFja2luZywgZXNzZW50aWFsIGZvciBhbnkgc3RhdGVmdWwgb3BlcmF0aW9ucyBhbmQgdG8gYXZvaWQgd2VpcmQgYmVoYXZpb3IuCiogICBgTkZfVEFCTEVTYCAtIFRoZSBmb3VuZGF0aW9uIGZvciBuZXRmaWx0ZXIgdGFibGVzLCBzbyBpdCYjMzk7cyBjcml0aWNhbC4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMuIE5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5ODpcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcbiA0OTk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuIDUwMDpcdFx0ZGVmYXVsdCBuXG4gNTAxOlx0XHRoZWxwXG4gNTAyOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgbWF0Y2hpbmcgb24gRENDUCBleHRlbnNpb24gaGVhZGVycy5cbiA1MDM6XHRcbiA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA1MTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gNTE1Olx0XHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxuIDUxNjpcdFx0aGVscFxuIDUxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjb25ubGltaXRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjY5CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lOiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcyB0byB1bmRlcnN0YW5kLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIFRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkLCBub3Qgc3RhdGljLCBpcyBpbXBvcnRhbnQsIGl0IG1ha2VzIHRoZW0gZWFzaWx5IHJlYWNoYWJsZS4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYSBmdW5kYW1lbnRhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIHdoaWxlIGBuZnRfZmxvd19yb3V0ZWAgc2l0cyBzcXVhcmVseSBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgc3BhY2UuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnOiBmYWlsaW5nIHRvIHJlbGVhc2UgdGhlIGBkc3RgIHdoZW4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgZW5jb3VudGVycyBhbiBpc3N1ZS4gVGhlbiB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsOiB0aGUgY29kZSB1cGRhdGVzIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgdG8gYXZvaWQgY2FsbGluZyBgbmZfcm91dGVgIGJ5IGxldmVyYWdpbmcgdGhlIGBkc3RgIGVudHJ5LiBUaGF0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB0b3VjaCBib3RoIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgdGhleSBpbnRlcmFjdCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUgd2l0aCBmdW5jdGlvbmFsIGNoYW5nZXMuCgpTbywgdG8gcHJlcGFyZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYG5mdF9mbG93X3JvdXRlYC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFRoaXMgc2hvdWxkIGdldCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUgY29tcGlsZWQgaW4uIFRoaXMgaW5jbHVkZXMgdGhlIElQL0lQdjYgdHVubmVsIGNvZGUgYW5kIHRoZSBuZXRmaWx0ZXIgb2ZmbG9hZCBwYXRoLiBUaGlzIHNob3VsZCBnZXQgbWUgYSBnb29kIGZ1enppbmcgc2V0dXAgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjQ1LjAwNTUzMTIzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkzNjkwNjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NDUuMDA1NTQxNzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MTcwMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMzowNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zMGRjNzhiNGYxYTM4OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC05MDIsNiArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XFxuIFxcdFxcdFxcdH07XFxuIFxcbiBcXHRcXHRcXHR1OFxcdGwzX3Byb3RvO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIFxcdFxcdH0gdHVuO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRlbnVtIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IGMxYzFiZTFhNjk2MmZlLi5mZWQxMDFmNTRhOGEzNCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw2ICs3NTAsMjMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4gXFx0cmV0dXJuIFxcdTAwMjZzdGFjay1cXHUwMDNlcGF0aFtrXTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4rXFx0aW50IGs7XFxuK1xcbitcXHRmb3IgKGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzOyBrIFxcdTAwM2U9IDA7IGstLSkge1xcbitcXHRcXHRwYXRoID0gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2tdO1xcbitcXHRcXHRzd2l0Y2ggKHBhdGgtXFx1MDAzZXR5cGUpIHtcXG4rXFx0XFx0Y2FzZSBERVZfUEFUSF9UVU46XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHBhdGgtXFx1MDAzZXR1bi5kc3QpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4ge1xcbkBAIC03NjUsMjggKzc4MiwzOCBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0d2hpbGUgKGN0eC5kZXYgXFx1MDAyNlxcdTAwMjYgY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuIFxcdFxcdGxhc3RfZGV2ID0gY3R4LmRldjtcXG4gXFx0XFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuLVxcdFxcdGlmICghcGF0aClcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoIXBhdGgpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuIFxcdFxcdHJldCA9IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBwYXRoKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC0xO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFjdHguZGV2KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4tXFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghcGF0aCkge1xcbitcXHRcXHRyZXQgPSAtMTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4gXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGQxYWEwNDhhNjA5OWNjLi4wYTRmYTEzNTFkZDc2OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcXG5AQCAtMzcwLDEwICszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbiBcXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFxuIFxcdGN0eC1cXHUwMDNlZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuLVxcdGlwX3J0X3B1dChydCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uMzEyZGU0YTZlMTYwYzcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE4NjQsMTIgKzE4NjQsMTIgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSB0LVxcdTAwM2VwYXJtcy5sYWRkcjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NiA9IHQtXFx1MDAzZXBhcm1zLnJhZGRyO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5kc3QgPSBkc3Q7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRjdHgtXFx1MDAzZWRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBkc3QtXFx1MDAzZWVycm9yO1xcbi1cXHRkc3RfcmVsZWFzZShkc3QpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IGlkIHtcXG4gXFx0XFx0X191MTZcXHRpZDtcXG4gXFx0XFx0X19iZTE2XFx0cHJvdG87XFxuIFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiBcXHR1OCBudW1fZW5jYXBzO1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XFxuK1xcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XFxuIFxcdHU4IG51bV90dW5zO1xcbiBcXHR1OCBpbmdyZXNzX3ZsYW5zO1xcbiBcXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XFxuQEAgLTkyLDkgKzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcXG4gfTtcXG4gXFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sXFxuLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCBpO1xcbkBAIC0xMDksNyArMTExLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1BQUE9FOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1RVTjpcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlaW5kZXYgPSBwYXRoLVxcdTAwM2VkZXY7XFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZWRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2VoX3NvdXJjZSkpXFxuIFxcdFxcdFxcdFxcdG1lbWNweShpbmZvLVxcdTAwM2VoX3NvdXJjZSwgcGF0aC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG5AQCAtMTIzLDE1ICsxMjUsMTYgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0LyogREVWX1BBVEhfVkxBTiwgREVWX1BBVEhfUFBQT0UgYW5kIERFVl9QQVRIX1RVTiAqL1xcbiBcXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV90dW5zKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZW5jYXBbaW5mby1cXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxcbiBcXHRcXHRcXHRcXHRcXHRwYXRoLVxcdTAwM2VlbmNhcC5pZDtcXG5AQCAtMTUyLDEzICsxNTUsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlKSB7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmdyZXNzX3ZsYW5zIHw9IEJJVChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbiBcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX2lkO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX3Byb3RvO1xcbkBAIC0xNjYsNyArMTY5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzLS07XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzYsMTYgKzE3OSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGluZm8tXFx1MDAzZW91dGRldiA9IGluZm8tXFx1MDAzZWluZGV2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cXHUwMDNlaW5kZXYpKVxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcbitcXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cXHUwMDNlZGV2LCBmdCkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRpZiAoaW5mby1cXHUwMDNlbnVtX3R1bnMpXFxuK1xcdFxcdGRzdF9yZWxlYXNlKGluZm8tXFx1MDAzZXR1bl9kc3QpO1xcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIwNSw0NCArMjE1LDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gZm91bmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi1cXHRcXHRcXHRcXHRcXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxcbi17XFxuLVxcdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3Q7XFxuLVxcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmwgPSB7fTtcXG4tXFxuLVxcdHN3aXRjaCAobmZ0X3BmKHBrdCkpIHtcXG4tXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuLVxcdFxcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVxcdTAwM2Vkc3RfdjQuc19hZGRyO1xcbi1cXHRcXHRmbC51LmlwNC5zYWRkciA9IHR1bi1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X21hcmsgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlbWFyaztcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4tXFx0XFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NjtcXG4tXFx0XFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NjtcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlbWFyaztcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFxcdTAwMjZ0dW5fZHN0LCBcXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XFxuLVxcdGlmICghdHVuX2RzdClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0O1xcbi1cXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5AQCAtMjU1LDI4ICsyMjcsMjUgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcXHUwMDI2c3RhY2ssIFxcdTAwMjZpbmZvLCBoYSwgXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXG4tXFx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcXG4rXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4rXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBmdCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuLVxcdGlmIChpbmZvLm91dGRldilcXG4tXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFxuLVxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8ubnVtX2VuY2FwczsgaSsrKSB7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLm51bV90dW5zIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShwa3QsIFxcdTAwMjZpbmZvLnR1biwgcm91dGUsIGRpcikpIHtcXG4rXFx0aWYgKGluZm8ubnVtX3R1bnMpIHtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuK1xcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcXG4gXFx0fVxcbiBcXG4gXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV9lbmNhcHMgPSBpbmZvLm51bV9lbmNhcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjQ2LjAyMzcyNzAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzkxODY5NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIzOjA0OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zMGRjNzhiNGYxYTM4OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC05MDIsNiArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0fTtcbiBcbiBcdFx0XHR1OFx0bDNfcHJvdG87XG4rXHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uZmVkMTAxZjU0YThhMzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNiArNzUwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbitcdGludCBrO1xuK1xuK1x0Zm9yIChrID0gc3RhY2stXHUwMDNlbnVtX3BhdGhzOyBrIFx1MDAzZT0gMDsgay0tKSB7XG4rXHRcdHBhdGggPSBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuK1x0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuK1x0XHRjYXNlIERFVl9QQVRIX1RVTjpcbitcdFx0XHRkc3RfcmVsZWFzZShwYXRoLVx1MDAzZXR1bi5kc3QpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NSwyOCArNzgyLDM4IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbiBcdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbi1cdFx0aWYgKCFwYXRoKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKCFwYXRoKSB7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuIFx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpIHtcbitcdFx0XHRyZXQgPSAtMTtcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmICghY3R4LmRldilcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4tXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmICghcGF0aCkge1xuK1x0XHRyZXQgPSAtMTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbitcbitcdHJldHVybiAtMTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGQxYWEwNDhhNjA5OWNjLi4wYTRmYTEzNTFkZDc2OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xuKysrIGIvbmV0L2lwdjQvaXBpcC5jXG5AQCAtMzcwLDEwICszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4rXHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbi1cdGlwX3J0X3B1dChydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uMzEyZGU0YTZlMTYwYzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NjQsMTIgKzE4NjQsMTIgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IHQtXHUwMDNlcGFybXMubGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IHQtXHUwMDNlcGFybXMucmFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4rc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBpZCB7XG4gXHRcdF9fdTE2XHRpZDtcbiBcdFx0X19iZTE2XHRwcm90bztcbiBcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIFx0dTggbnVtX2VuY2FwcztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHR1bjtcbitcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XG4gXHR1OCBudW1fdHVucztcbiBcdHU4IGluZ3Jlc3NfdmxhbnM7XG4gXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XG5AQCAtOTIsOSArOTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7XG4rXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbitcdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCBpO1xuQEAgLTEwOSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRjYXNlIERFVl9QQVRIX1ZMQU46XG4gXHRcdGNhc2UgREVWX1BBVEhfUFBQT0U6XG4gXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuLVx0XHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbitcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xMjMsMTUgKzEyNSwxNiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRcdC8qIERFVl9QQVRIX1ZMQU4sIERFVl9QQVRIX1BQUE9FIGFuZCBERVZfUEFUSF9UVU4gKi9cbiBcdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX1RVTikge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cdTAwM2V0dW4uc3JjX3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4ubDNfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5sM19wcm90bztcbitcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICsxNTUsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSkge1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWluZ3Jlc3NfdmxhbnMgfD0gQklUKGluZm8tXHUwMDNlbnVtX2VuY2FwcyAtIDEpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyArMTY5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV9lbmNhcHMtLTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTE3NiwxNiArMTc5LDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0fVxuLVx0aW5mby1cdTAwM2VvdXRkZXYgPSBpbmZvLVx1MDAzZWluZGV2O1xuIFxuLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVx1MDAzZWluZGV2KSlcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbitcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4rXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cdTAwM2VkZXYsIGZ0KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuIFx0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuK1x0XHRkc3RfcmVsZWFzZShpbmZvLVx1MDAzZXR1bl9kc3QpO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjA1LDQ0ICsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCArMjI3LDI1IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcbitcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuK1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5kZXYtXHUwMDNlaWZpbmRleDtcbitcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi1cdTAwM2VpZmluZGV4O1xuIFxuLVx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8ubnVtX2VuY2FwczsgaSsrKSB7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0ucHJvdG8gPSBpbmZvLmVuY2FwW2ldLnByb3RvO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8ubnVtX3R1bnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUocGt0LCBcdTAwMjZpbmZvLnR1biwgcm91dGUsIGRpcikpIHtcbitcdGlmIChpbmZvLm51bV90dW5zKSB7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5sM19wcm90byA9IGluZm8udHVuLmwzX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4rXHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbitcdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QgPSBpbmZvLnR1bl9kc3Q7XG4gXHR9XG4gXG4gXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fZW5jYXBzID0gaW5mby5udW1fZW5jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NDYuMDIzNzI5ODg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwODAxNjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIG5vbi10cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nIGFuZCB0dW5uZWxzLiBJdCBsb29rcyBsaWtlIGl0J3MgdXBkYXRpbmcgaG93IGZvcndhcmQgcGF0aHMgYXJlIGNvbnN0cnVjdGVkLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdHVyZS4gVGhleSd2ZSBhZGRlZCBhIGBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RgIHRvIGBwYXRoLnR1bmAgYW5kIGFyZSBtYW5hZ2luZyBpdHMgbGlmZXRpbWUg4oCTIHJlbGVhc2luZyBpdCBvbiBlcnJvciB3aXRoIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gSSBzZWUgdGhleSBhcmUgbGV2ZXJhZ2luZyB0aGlzIHdpdGhpbiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHRvIGJ5cGFzcyBhIG5vdy1yZW1vdmVkIGBuZl9yb3V0ZWAgY2FsbCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGFsc28gbWVhbnMgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBtb3JlIGRldGFpbGVkIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaXMgY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYCwgc28gdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfZmxvd19yb3V0ZWAgaXMgZXhwb3J0ZWQsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgcmVhY2ggd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NTEuNzMxNzQ4ODIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDM5OTI5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Rldl9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDE9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMTg6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2ND1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA2LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzA3OlxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTAtXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxMTpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTItXFx0XFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjU2LjU3NTc0NjUyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODQ4NTE1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBORlQgRmxvdyBSb3V0ZSoqXG5cbk9rYXksIHNvIGBuZnRfZmxvd19yb3V0ZWAgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBORlQtcmVsYXRlZCBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgaGVjayB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aGF0IGNhbGwgZ3JhcGguIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNDo1OC45NjA1OTk4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI3Mzk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9mbG93X3JvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjQ3PXN0cnVjdCBuZnRfcGt0aW5mbztcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTI0OS1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyNjQ6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjUtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMjAtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzIxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMC1cXHRcXHRnb3RvIGVycl9mbG93X3JvdXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTowMS41ODgwMDc0NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU1ODE3NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24sIHNvIGl0J3MgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgZXhwcmVzc2lvbiB3aXRoaW4gbmV0ZmlsdGVyLiBJdCdzIHRoZSBlbmdpbmUgdGhhdCBmaWd1cmVzIG91dCBpZiBzb21ldGhpbmcgY2FuIGJlIG9mZmxvYWRlZCBmb3IgZmxvdyBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBkb2luZy5cblxuTm93LCB3aGVyZSBkbyBJIHN0YXJ0PyBHaXZlbiBpdHMgcHVycG9zZSwgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0aGUgYWN0dWFsIGRhdGEgcGF0aCBoYW5kbGluZyB0byBzZWUgd2hlcmUgdGhlIGRlY2lzaW9ucyBhcmUgbWFkZS4gTGV0IG1lIGNoZWNrIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB0aGF0J3MgbGlrZWx5IHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBleHBsb3JpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhpcyB3b3Jrcy4gSXQncyBwcm9iYWJseSB3aGVyZSBpdCBmaWd1cmVzIG91dCB0aGUgbmV4dCBob3AgYW5kIGlmIHRoZSBwYWNrZXQgbmVlZHMgdG8gYmUgc2VudCBmb3IgZm9yd2FyZGluZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgb2ZmbG9hZCBkZWNpc2lvbiBpcyBiZWluZyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MDQuODQzODI4ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzgzMDIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yNzk9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI4OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMDU6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjg9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NzU2PXN0YXRpYyBpbnQgdmxhbl9kZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjc2MzpzdGF0aWMgaW50IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwOS1cXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IHZsYW5fZGV2X2dldF9pZmxpbmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSB2bGFuX2h3dHN0YW1wX2dldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc0Mz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzUyLVxcbm5ldC9jb3JlL2Rldi5jOjc1MzpzdGF0aWMgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG5uZXQvY29yZS9kZXYuYy03NTQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LVxcbm5ldC9jb3JlL2Rldi5jOjc3MDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTgxMy1lcnJfb3V0Olxcbm5ldC9jb3JlL2Rldi5jOjgxNDpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L2NvcmUvZGV2LmMtODE1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE3LX1cXG5uZXQvY29yZS9kZXYuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG5uZXQvY29yZS9kZXYuYy04MTktXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVxcdC5uZG9fc2V0dXBfdGNcXHRcXHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0OlxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjMwOlxcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMzEtXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBmdCkgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTowNy40NzE2NzEzMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcyNzA0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb3J3YXJkIFBhdGggVXBkYXRlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZvcndhcmRpbmcgcGF0aHM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBtYWluIHBsYXllcnMgYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGVpdGhlciBhIGxvdyBsZXZlbCByb3V0aW5nIGNoYW5nZSwgb3IgYSBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBwcm9jZXNzaW5nLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29yZSBmdW5jdGlvbnMsIGxldCBtZSB6ZXJvIGluIG9uIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBzdWdnZXN0IHR1bm5lbC1yZWxhdGVkIHBhdGggYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmb3J3YXJkaW5nIGxvZ2ljIGNoYW5nZXMgd2l0aGluIHRoZXNlIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIHBsYXkgd2l0aCBhbnkgb3RoZXIgdHVubmVsIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzdGFjay4gSXQncyBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGltcGFjdCBvbiBvdmVybGF5IGFuZCB1bmRlcmxheSByb3V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjExLjg0NDM3OTM1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3Njk3MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz0zNDE9aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM1NS1cXG5uZXQvaXB2NC9pcGlwLmM6MzU2OnN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC9pcHY0L2lwaXAuYy0zNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zODktXFx0Lm5kb190dW5uZWxfY3RsXFx0PSBpcGlwX3R1bm5lbF9jdGwsXFxubmV0L2lwdjQvaXBpcC5jOjM5MDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvaXB2NC9pcGlwLmMtMzkxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjE0LjMyMTM2NDA1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2MjczNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBjb3JlIHRvIHRoZSBJUHY2IHR1bm5lbCBmdW5jdGlvbmFsaXR5IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBmb3J3YXJkaW5nIHBhdGguIEl04oCZcyByZXNwb25zaWJsZSBmb3IsIHByZXN1bWFibHksIGNvbnN0cnVjdGluZyBvciBwb3B1bGF0aW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25maWd1cmF0aW9ucyB0byBhbGxvdyBhbiBJUHY2IHBhY2tldCB0byB0cmF2ZXJzZSBhIHR1bm5lbC4gSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IHBpZWNlcyB0aGF0IGVuY29tcGFzc2VzOiBwb3RlbnRpYWxseSB0aGUgb3V0ZXIgaGVhZGVyICh0aGUgdHVubmVsIGhlYWRlciwgbGlrZWx5IElQdjYpLCB0aGUgaW5uZXIgaGVhZGVyICh0aGUgZW5jYXBzdWxhdGVkIElQdjYgcGFja2V0KSwgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEgYWJvdXQgdGhlIHR1bm5lbCBpdHNlbGYgKHNvdXJjZS9kZXN0aW5hdGlvbiBlbmRwb2ludHMsIHR1bm5lbCBJRCBpZiBhcHBsaWNhYmxlLCBldGMuKSwgYW5kIG9mIGNvdXJzZSwgYW55IG5lY2Vzc2FyeSByb3V0aW5nIGluZm9ybWF0aW9uIHRvIGRpcmVjdCB0aGUgcGFja2V0IHRvd2FyZHMgaXRzIHVsdGltYXRlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhlIHR1bm5lbC5cblxuSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIElQdjYgaW5wdXQgcGF0aD8gSXMgaXQgcGFydCBvZiB0aGUgb3V0cHV0IHBhdGg/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBsb29rdXAgcHJvY2Vzcz8gSSdtIHBpY3R1cmluZyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLi4uIGFuIGluY29taW5nIElQdjYgcGFja2V0IHRyaWdnZXJzIHRoZSB0dW5uZWwgZW50cnkgcG9pbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiDigJMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBpcyBpbnZva2VkIHRvIHByZXBhcmUgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uIHRocm91Z2ggdGhlIHR1bm5lbC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYXNwZWN0cz8gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBvZmZsb2FkaW5nIGNhcGFiaWxpdGllcyBvciBzZXRzIHVwIGluc3RydWN0aW9ucyB0aGF0IGNhbiBiZSBkb25lIGluIHRoZSBkYXRhcGF0aC4gSSdkIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnM6IGFyZSB0aGVyZSBhbnkgY2FjaGluZyBtZWNoYW5pc21zLCBwcmUtY29tcHV0YXRpb24gdGVjaG5pcXVlcywgb3IgZGF0YSBzdHJ1Y3R1cmUgb3B0aW1pemF0aW9ucyBlbXBsb3llZCBoZXJlIHRvIG1pbmltaXplIG92ZXJoZWFkPyBBbmQgd2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgYW55IGdyYWNlZnVsIGRlZ3JhZGF0aW9uIGJ1aWx0LWluIHRvIGhhbmRsZSBwb3RlbnRpYWwgdHVubmVsIHBhdGggZmFpbHVyZXMgb3IgbWlzY29uZmlndXJhdGlvbnM/IFRoYXQncyB3aGF0IEknZCB3YW50IHRvIGludmVzdGlnYXRlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MTguMTQ3NjQwNzIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE4NDE0MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4NDI9RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9lbmNhcF9zZXR1cCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NDQ6c3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg4NC1cXHQubmRvX2dldF9pZmxpbmsgPSBpcDZfdG5sX2dldF9pZmxpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjAuNjY2MDYwNDk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDEwNDc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYm90aCBvZiB3aGljaCBhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBuZG9fZmlsbF9mb3J3YXJkX3BhdGhgLCB1c2VkIGZvciBpcGlwIGFuZCBpcDZfdHVubmVsIGRldmljZXMuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjYWxsZWQgZnJvbSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLCB0aGVuLCBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXRzZWxmLCBhbmQgYWxzbyBgbmZ0X2Zsb3dfcm91dGVgLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYG5mdF9mbG93X3JvdXRlYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gQWggeWVzLCBpdCBpczogYEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtgIEV4Y2VsbGVudCwgdGhhdCBtZWFucyBpdCdzIGFjY2Vzc2libGUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGBuZnRfZmxvd19yb3V0ZWAsIGl0J3MgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZSByZWxldmFudCBjb25maWcgZGVwZW5kZW5jaWVzIGZyb20gdGhlcmUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBhIHByb3BlciBmdXp6ZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjUuODY3MTExOTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMxODk2ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfcGF0aC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjguNzk5MDE5OTE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjI1MTY5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRW5hYmxpbmcgdGhlIGBuZl9mbG93X3RhYmxlYCoqXG5cblJpZ2h0LCBzbyBJJ20gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWUsIGFuZCBJJ3ZlIGNpcmNsZWQgYmFjayB0byB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRvIG1ha2UgdGhpcyB0aGluZyByZWFsbHkgc2luZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZSBpcyBlbmFibGVkLiBJdOKAmXMgcHJldHR5IG9idmlvdXMsIGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIFdpdGhvdXQgdGhhdCwgSSdtIG5vdCBnb2luZyB0byBiZSBzZWVpbmcgdGhlIGFjY2VsZXJhdGlvbiBJJ20gaG9waW5nIGZvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQsIGlmIG5lZWRlZCwgZ2V0IHRoYXQgdHVybmVkIG9uIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBJdCBmZWVscyBsaWtlIGEgcHJlcmVxdWlzaXRlLCBhIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIE9uY2UgSSB2ZXJpZnkgdGhhdCBpdCdzIGVuYWJsZWQsIHRoZW4gSSBjYW4gbW92ZSB0byB0aGUgYWN0dWFsIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MzIuMTYxNTQwNDkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3MTk3OTMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19ORl9GTE9XX1RBQkxFXFxcXCkgXFxcXCs9IG5mX2Zsb3dfdGFibGVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjM1LjA2ODc0NzgzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc0ODU0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSBmb3IgbmZfZmxvd190YWJsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBzdHJ1Y3R1cmUgb2YgYG5mX2Zsb3dfdGFibGVgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9uZXRmaWx0ZXIvYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcywgaW5jbHVzaW9uIG9mIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29tcGlsYXRpb24gc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfdGFibGVgLiBUaGUgYE1ha2VmaWxlYCB3aWxsIGxpa2VseSBzZXJ2ZSBhcyBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQgdG8gZmluZGluZyByZWxhdGVkIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRoZXkncmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG1hZ2ljIGlzIGRlZmluZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDI2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MzkuMjQzNjA2MDExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQwMzg0OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQzLW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjQxLjk4NDAwMjMyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY2NDQwNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgcmVxdWlyZW1lbnRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIE5ldHdvcmsgRmxvdyBPZmZsb2FkaW5nKipcblxuUmlnaHQsIHNvIHRvIGV2ZW4gKmJlZ2luKiB3b3JraW5nIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmcgaW4gdGhpcyBjb250ZXh0LCB0aGUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBvcHRpb24gaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIFRoYXQncyB0aGUgZm91bmRhdGlvbmFsIHBpZWNlLCB0aGUgYmFzaWMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZSwgd2l0aG91dCB3aGljaCB3ZSdyZSBkZWFkIGluIHRoZSB3YXRlci4gV2UgbmVlZCB0aGUgY29yZSBtYWNoaW5lcnkgdG8gbWFuYWdlIHRoZXNlIGZsb3dzIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuQW5kIHRoZW4sIGxvb2tpbmcgZGVlcGVyIGludG8gaG93IHRoaXMgb2ZmbG9hZGluZyBpcyAqYWN0dWFsbHkqIGltcGxlbWVudGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuZXh0IGNyaXRpY2FsIGRlcGVuZGVuY3kuIFRoaXMgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggb2ZmbG9hZGluZyBmbG93cyB1c2luZyBgbmZ0YWJsZXNgLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlLCBpZiBJIHdhbnQgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbmFsaXR5ICh3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcm91dGluZyBiYXNlZCBvbiB0aGVzZSBvZmZsb2FkZWQgZmxvd3MpLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGVyZWZvcmUsIGlmIEkgd2FudCB0byB1c2UgdGhlIGZ1bmN0aW9uIGBuZnRfZmxvd19yb3V0ZWAsIHRoZW4gSSByZXF1aXJlIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIHNpbmNlIHRoZSB0d28gZnVuY3Rpb25zIGFyZSBzbyBjbG9zZWx5IGNvdXBsZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByYWN0aWNlIHdpdGggcmVnYXJkcyB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgTGludXggS2VybmVsLCBJIGFtIGNvbmZpZGVudCBJIHVuZGVyc3RhbmQgdGhlIHRob3VnaHQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo0NS40NTA0NDU2MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTQ1MzY0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo0OC4zMDQ5ODgxMTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDk2MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipDaGVja2luZyBTcGVjaWZpYyBDb2RlIEZpbGVzIGZvciBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgaXNzdWUgbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIFRoZSBmaXJzdCB0d28gZmlsZXMgdGhhdCBqdW1wIG91dCB0byBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcGlwLmNgIGFuZCBgaXA2X3R1bm5lbC5jYC4gVGhlc2UgYm90aCBoYW5kbGUgY29yZSBJUC1pbi1JUCB0dW5uZWxpbmcgbWVjaGFuaXNtcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLCBpdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoZSBidWcgbGllcyBzb21ld2hlcmUgd2l0aGluIHRoZSB0dW5uZWxpbmcgbG9naWMgb3IsIHBlcmhhcHMsIGhvdyB0aGVzZSBtb2R1bGVzIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvd3MsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBzdGFjayB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6NTEuMzk5OTUzNTA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE5ODczNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGU9MTM9bWx4c3dfc3BlY3RydW0tb2Jqc1xcdFxcdDo9IHNwZWN0cnVtLm8gc3BlY3RydW1fYnVmZmVycy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTIyLVxcdFxcdFxcdFxcdCAgIHNwZWN0cnVtX2Zsb3dlci5vIHNwZWN0cnVtX2NudC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9NYWtlZmlsZToyMzpcXHRcXHRcXHRcXHQgICBzcGVjdHJ1bV9maWQubyBzcGVjdHJ1bV9pcGlwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTI0LVxcdFxcdFxcdFxcdCAgIHNwZWN0cnVtX2FjbF9mbGV4X2FjdGlvbnMubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgKz0gaXBtcl9iYXNlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI2LWdyZS15IDo9IGdyZV9kZW11eC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjU0LjMxOTg0MjIzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI5OTAyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBJUElQIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGUgc3lzdGVtIGhpbmdlcyBvbiBoYXZpbmcgYENPTkZJR19ORVRfSVBJUGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBkZWFsaW5nIHdpdGggbGV2ZXJhZ2VzIElQLWluLUlQIHR1bm5lbGluZy4gVGhhdCBjb3VsZCBtZWFuIGl0J3Mgc2V0dGluZyB1cCBzb21lIHNvcnQgb2YgdmlydHVhbCBuZXR3b3JrLCBtYXliZSBmb3IgZW5jYXBzdWxhdGlvbiBvciBmb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgKndoeSogaXQncyByZXF1aXJlZC4gSXMgaXQgYSBoYXJkIGRlcGVuZGVuY3k/IElzIGl0IHByb3ZpZGluZyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gT3IgaXMgaXQgc2ltcGx5IGEgbGVnYWN5IGNvbXBvbmVudCB0aGF0IGhhcyB0byBiZSBwcmVzZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHB1cnBvc2Ugb2YgYENPTkZJR19ORVRfSVBJUGAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo1Ni45NDk3NDcyODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDIyMzY4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo1OS43OTE5OTA2NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDE0MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW52ZXN0aWdhdGlvbiBoaW5nZXMgb24gYENPTkZJR19JUFY2X1RVTk5FTGAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IHNldC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJIGhhdmUgaGVyZSBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBpbXBvcnRhbnQgYXMgd2VsbDogYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCwgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLCBzbyB0aGV5IG5lZWQgdG8gYmUga2VwdCBpbiBtaW5kLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIGRvaW5nIGFuZCBob3cgdGhleSByZWxhdGUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIHVzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjowMy4xOTYxMzQ4MTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODQwODIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRldl9maWxsX2ZvcndhcmRfcGF0aFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03NzA9aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy04MTctfVxcbm5ldC9jb3JlL2Rldi5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6MDYuMTgwMjIzNTk0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MDk1MzE4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVmVyaWZ5aW5nIGBuZnRfZmxvd19yb3V0ZWAgQXZhaWxhYmlsaXR5KipcblxuWWVzLCB0aGF0J3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbiwgb3Igd2hhdGV2ZXIgaXQgaXMsIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBpdCdzIGF2YWlsYWJsZSBmb3IgdXNlLiBObyBwb2ludCBwcm9jZWVkaW5nIGlmIEknbSB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IGlzbid0IGFjY2Vzc2libGUuIEdvdHRhIHZlcmlmeSB0aGF0IGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjA4Ljc4OTc1Nzk4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDMzMzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwobmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjQ9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMjE6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoxMS42MDQwOTc2MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDMyNjAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGluaXRpYWwgc3RhdGVtZW50IGlzIGFjY3VyYXRlLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW50byB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUuIExldCdzIHNlZS4uLiBJJ3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiBwbGF5IGhlcmUuXG5cblJpZ2h0LCBJIHNlZSB0aGF0IGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaGFzIHNldmVyYWwgc3RhdGljIGNhbGxlZXM6IGBuZnRfZmxvd19yb3V0ZWAsIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gQmVjYXVzZSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGhhcyB0aG9zZSBzdGF0aWMgY2FsbGVlcywgSSBzZWUgdGhhdCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQga2ljayB0aGluZ3Mgb2ZmLCBhbmQgZnJvbSB0aGVyZSB3ZSBkaXZlIGRlZXBlci5cblxuQnV0LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIG9ubHkgY2FsbGVkIGZyb20gd2hlcmUgSSB0aGluayBpdCBpcy4gTm8gcG9pbnQgaW4gYXNzdW1pbmcgYW55dGhpbmcgaGVyZS4gSSB3aWxsIGNoZWNrIGZvciBvdGhlciB1c2VzIGFuZCBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjUwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjE1Ljc2ODQyNjk5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE4NzczODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9maWxsX2ZvcndhcmRfcGF0aFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yODktXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MjkwOlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFxcdTAwMjZzdGFjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz05Mj1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MTA1OlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFxcdTAwMjZzdGFjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNDI4PWludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQzMC1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LVxcbm5ldC9jb3JlL2Rldi5jOjc3MDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzMtb3V0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NzQ6XFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03NS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMzA6XFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMS1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjE4Ljc4NzIwOTY5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODEyOTE1NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIGZsb3cgcGF0aCwgYXMgSSB1bmRlcnN0YW5kIGl0LiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgYG5mdF9mbG93X3JvdXRlYCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIHVsdGltYXRlIGNhbGxlciwgbGVhZGluZyBpbnRvIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAsIHRoZW4gYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB3aGljaCBpcywgaW4gZXNzZW5jZSwgdGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgZW50aXJlIHByb2Nlc3MuXG5cbkl0J3MgZ29vZCB0byBzZWUgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhbHNvIGRpcmVjdGx5IGludm9rZWQgYnkgaGFyZHdhcmUgb2ZmbG9hZCBkcml2ZXJzIGxpa2UgYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AgYW5kIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgbXkgaW5pdGlhbCB0aG91Z2h0IC0gdGhhdCBmdXp6aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGlzIHRoZSByaWdodCBzdHJhdGVneSBmb3IgcHJvYmluZyB0aGlzIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3ZlcnMgYm90aCB0aGUgY29yZSBzb2Z0d2FyZSBwYXRoIGFuZCB0aGUgY3JpdGljYWwgaGFyZHdhcmUgb2ZmbG9hZCBpbnRlcmFjdGlvbnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGNvdmVyZWQgYWxsIHRoZSBsaWtlbHkgcGF0aHMuIEkgc2VlIGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIHdoaWNoIGlzIGV4cGVjdGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgLCBgQ09ORklHX05FVF9JUElQYCwgYW5kIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVzZSBhcmUgYWxsIHdvcnRoIGV4YW1pbmluZyB0byBzZWUgaWYgdGhleSBpbnRyb2R1Y2UgYW55IGNvbmRpdGlvbmFsIGNvZGUgcGF0aHMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gRW5zdXJpbmcgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciB3aWxsIGJlIGltcG9ydGFudCB3aGVuIGRldmVsb3BpbmcgbXkgZnV6emluZyB0ZXN0IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjIzLjYwMDEyOTQxNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjg2MjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoyNi4xMDY5OTk2NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODc1MDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gbmFycmF0aXZlOlxuXG4qKkNvcmUgTmV0d29ya2luZyBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjbGVhcmx5IHBvaW50cyB0byB0aGUgbmVjZXNzaXR5IG9mIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIFdlIGNhbid0IHJlYWxseSBkbyBtdWNoIGFkdmFuY2VkIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBvciBtYW5hZ2VtZW50IHdpdGhvdXQgdGhlc2UuIEknbSB0aGlua2luZyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGZpcnN0OyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBXaXRob3V0IGl0LCB3ZSBsb3NlIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHN0YXRlZnVsIGZpcmV3YWxsaW5nLCBOQVQgZnVuY3Rpb25hbGl0eSwgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBiZW5lZml0cyBvZiBhIG1vcmUgc29waGlzdGljYXRlZCBuZXR3b3JrIHNldHVwLiBXZSdkIGJhc2ljYWxseSBiZSBzdHVjayB3aXRoIGEgcGFja2V0LWJ5LXBhY2tldCB2aWV3LCBhbmQgZnJhbmtseSwgdGhhdCdzIGp1c3Qgbm90IGdvaW5nIHRvIGN1dCBpdCBpbiBhbnkgbm9uLXRyaXZpYWwgZW52aXJvbm1lbnQuIFRoZW4sIGBORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGF0IHNjYWxlLiBJdCBvZmZlcnMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcywgYWNjZWxlcmF0ZXMgcHJvY2Vzc2luZywgYW5kIGRyYXN0aWNhbGx5IHJlZHVjZXMgQ1BVIG92ZXJoZWFkLiBTbywgeWVhaCwgSSdtIGFscmVhZHkgc2VlaW5nIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIOKAkyB3ZSBuZWVkIGJvdGggb2YgdGhlc2UuIE90aGVyd2lzZSwgd2UncmUgYnVpbGRpbmcgb24gc2FuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoyOS40MDU3NTMwNDJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTAyMTUwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozMi4wOTU5NzgxNjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NDQ2NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIGFuZCBpdHMgUmVsYXRpb25zaGlwIHRvIE5GX0NPTk5UUkFDSyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgTkZfRkxPV19UQUJMRWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGV4aXN0ZW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBhcmUgZnVuZGFtZW50YWxseSBsaW5rZWQgdG8gYE5GX0NPTk5UUkFDS2AuIEkgbWVhbiwgSSdtIGFuYWx5emluZyB0aGlzIGRlcGVuZGVuY3kgYW5kIGl0J3Mgb2J2aW91cy4gYE5GX0ZMT1dfVEFCTEVgIGlzIGJ1aWxkaW5nIHVwb24gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBXaXRob3V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHByb3ZpZGVkIGJ5IGBORl9DT05OVFJBQ0tgLCBgTkZfRkxPV19UQUJMRWAgd291bGRuJ3QgYmUgYWJsZSB0byBkbyBhbnl0aGluZyB1c2VmdWwuIEl0IHJlbGllcyBvbiB0aGUgc3RhdGUgaW5mb3JtYXRpb24gYW5kIGNvbm5lY3Rpb24gbWV0YWRhdGEgdGhhdCBgTkZfQ09OTlRSQUNLYCBtYW5hZ2VzLiBUaGVyZWZvcmUsIGFueSBhbmFseXNpcywgbW9kaWZpY2F0aW9uIG9yIGRlc2lnbiBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBtdXN0IGluaGVyZW50bHkgYWNjb3VudCBmb3IgYW5kIHRob3JvdWdobHkgdW5kZXJzdGFuZCBob3cgYE5GX0NPTk5UUkFDS2Agb3BlcmF0ZXMuIFRoZXkncmUgaW5leHRyaWNhYmx5IGludGVydHdpbmVkLCBhbmQgYW55IGNoYW5nZXMgdG8gb25lIHdpbGwgdW5kb3VidGVkbHkgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdGhlci4gSXQncyBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozNS43NDA0NDc5MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDU2MDMwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEUkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDM9Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozOC42NDYwNTk0OThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MDE2NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBOZXRmaWx0ZXIncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgTGludXggY29uZmlndXJhdGlvbiwgYW5kIEknbSBob21pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzExLiBUaGF0IGxpbmUsIGdpdmUgb3IgdGFrZSBhIGZldywgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNldHRpbmcgSSdtIHRyeWluZyB0byBkZWNpcGhlciBvciBtb2RpZnkuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgc29tZSBkZXBlbmRlbmNpZXMsIG1heWJlIGV2ZW4gYSBoZWxwIHRleHQgdGhhdCdzIHdvcnRoIGEgcXVpY2sgc2Nhbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZmVhdHVyZSBsaXZlcywgYW5kIHVuZGVyc3RhbmRpbmcgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLiBJJ20gYnJhY2luZyBteXNlbGYgZm9yIHRoZSB1c3VhbCBLY29uZmlnIHN5bnRheCDigJMgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSB0eXBlIGRlY2xhcmF0aW9uLCBtYXliZSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xlYXIsIGNvbmNpc2UgZG9jdW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdHJlYXN1cmVzIGF3YWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMxOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQyLjAwNjIyOTc4M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4gNzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbiA3MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQyLjAwNjQwNDg5M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxODMxNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBwcmVsaW1pbmFyeSB0aG91Z2h0cywgZXhwcmVzc2VkIGFzIGEgc3VtbWFyeSBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmV0d29yayBGaWx0ZXIgTW9kdWxlIERlcGVuZGVuY2llcyBcdTAwMjYgSW5pdGlhbCBJbnZlc3RpZ2F0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIHN0b2NrLiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIEknbSB3b3JraW5nIHdpdGgsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AgYXJlIGdvaW5nIHRvIGJlIGFic29sdXRlbHkgZXNzZW50aWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IHRyYWZmaWMgaW5ncmVzcyBmaWx0ZXJpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBvZiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgcmVzcGVjdGl2ZWx5LiBBbGwgcHJldHR5IGZ1bmRhbWVudGFsIGluIG1vc3QgbW9kZXJuIHNldHVwcy5cblxuTm93LCBiZWZvcmUgZGlnZ2luZyBpbiB0b28gZGVlcGx5LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCB3ZSdsbCBuZWVkIGBORVRfSVBJUGAuIFdlJ2xsIGtub3cgcHJldHR5IHF1aWNrbHkgb25lIHdheSBvciB0aGUgb3RoZXIgaWYgdGhhdCBuZWVkcyB0byBiZSBicm91Z2h0IGludG8gdGhlIGVxdWF0aW9uLiBJdCdzIGEga2V5IG1vZHVsZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgd2UgbmVlZCB0byB0aGluayBhYm91dCBhbGwgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQ1LjA4ODI0MDkzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5ODcyMDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQSVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNDk9Y29uZmlnIElQX1BOUF9SQVJQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE2Mjpjb25maWcgTkVUX0lQSVBcXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6NDcuNTg2OTcwMDM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjk5ODg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC9pcHY0L0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmV0dGVyLCBhbmQgSSB0aGluayBJJ2xsIGZpbmQgc29tZSBhbnN3ZXJzIHdpdGhpbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIHdvcmtpbmcgb24sIEkgbmVlZCB0byBsb29rIGF0IGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiB0aGlzIGZpbGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE2Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCByZWxldmFudCBleHBlcnQgdG9waWMgYXJlYV0uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjUwLjY1Njk2MTY3OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTU6XFx0XFx0ICBuZXQgdmlhIE5GUyBhbmQgeW91IHdhbnQgdGhlIElQIGFkZHJlc3Mgb2YgeW91ciBjb21wdXRlciB0byBiZVxcbiAxNTY6XFx0XFx0ICBkaXNjb3ZlcmVkIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCB0aW1lIHVzaW5nIHRoZSBSQVJQIHByb3RvY29sIChhblxcbiAxNTc6XFx0XFx0ICBvbGRlciBwcm90b2NvbCB3aGljaCBpcyBiZWluZyBvYnNvbGV0ZWQgYnkgQk9PVFAgYW5kIERIQ1ApLCBzYXkgWVxcbiAxNTg6XFx0XFx0ICBoZXJlLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gdXNlIFJBUlAsIGEgUkFSUCBzZXJ2ZXIgbXVzdCBiZVxcbiAxNTk6XFx0XFx0ICBvcGVyYXRpbmcgb24geW91ciBuZXR3b3JrLiBSZWFkXFxuIDE2MDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbmZzL25mc3Jvb3QucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMTYxOlxcdFxcbiAxNjI6XFx0Y29uZmlnIE5FVF9JUElQXFxuIDE2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG4gMTY0OlxcdFxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbiAxNjU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTY4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNjk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDE3MDpcXHRcXHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxcbiAxNzE6XFx0XFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxcbiAxNzI6XFx0XFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxcbiAxNzM6XFx0XFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxcbiAxNzQ6XFx0XFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjUwLjY1NzA3MDUyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2MDc0Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgZm9yIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBrZWVwIGl0IGNsZWFuIGFuZCBlZmZpY2llbnQuIE5vIG5lZWQgdG8gYnJpbmcgaW4gYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBwYWNrYWdlcyByaWdodCBub3c7IHRoYXQganVzdCBhZGRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIEkgd2FudCB0aGlzIGFzIHN0cmVhbWxpbmVkIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIGFzc2VzcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIElQdjYgdHVubmVsaW5nIHNpdHVhdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYElQVjZfVFVOTkVMYCBzZXR0aW5nLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGFuIElQdjYgdHVubmVsIGlzIGFscmVhZHkgY29uZmlndXJlZCwgb3IgYXQgbGVhc3QgaWYgaXQncyBleHBsaWNpdGx5IGVuYWJsZWQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1My43NzMxNDc1MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDY4MzAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1Ni4yMTk5ODM0ODZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MjkyODI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBzdHVmZiBhbmQgSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxOTkuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGhvcGVmdWxseSwgaXQncyB3aGVyZSB0aGUgY29yZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgcmlnaHQ/IFNvLCB0aGlzIGlzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3RpbmcgZGVjaXNpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgaGFuZ2luZyBvdXQuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBrbm9icyB3ZSBoYXZlIHRvIHR3ZWFrIGluIHRoaXMgYXJlYS4gSG9wZWZ1bGx5LCBpdCdzIGxhaWQgb3V0IGluIGEgY2xlYXIsIHNlbnNpYmxlIG1hbm5lciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1OS4wMTI5MTQ2MThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG4gMTk3OlxcdFxcdGJvb2xcXG4gMTk4OlxcdFxcbiAxOTk6XFx0Y29uZmlnIElQVjZfVFVOTkVMXFxuIDIwMDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbiAyMDE6XFx0XFx0c2VsZWN0IElORVQ2X1RVTk5FTFxcbiAyMDI6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyMDM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMDQ6XFx0XFx0aGVscFxcbiAyMDU6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIGRlc2NyaWJlZCBpblxcbiAyMDY6XFx0XFx0ICBSRkMgMjQ3My5cXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRjb25maWcgSVBWNl9HUkVcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbiAyMTI6XFx0XFx0c2VsZWN0IElQVjZfVFVOTkVMXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6NTkuMDEzMDE4NjQ5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTI4NzE4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmxvdyBPZmZsb2FkaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQuIE5vIHNwZWNpYWwgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBnb29kIOKAkyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gUmlnaHQgbm93LCBJJ20gd29ya2luZyB3aXRoIHRoZXNlIGNvbmZpZ3MgaW4gcGFydGljdWxhcjogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgYmFzZSB0byBnZXQgc3RhcnRlZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYE5GVF9GTE9XX09GRkxPQURgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLiBJJ20gd29uZGVyaW5nIGlmIEkgYWxzbyBuZWVkIHRvIGJyaW5nIGluIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZXBlbmRpbmcgb24gd2hhdCBJIGhhdmUgYXZhaWxhYmxlIGFuZCBpZiBpdCBpcyBuZWVkZWQgZm9yIG15IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBNeSB0aG91Z2h0cyBhcmUgZm9jdXNpbmcgYXJvdW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEl0J3MgY2xlYXIgdGhhdCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgdGhlIGRyaXZlciwgdGhlIGNvcmUgZXhwcmVzc2lvbi4gTWVhbndoaWxlLCBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIGZ1bmRhbWVudGFsIGJhc2UuIEFuZCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBgTkZfRkxPV19UQUJMRV9JTkVUYCwgd2hpY2ggSSBiZWxpZXZlIGhhbmRsZXMgbWl4ZWQgSVB2NC9JUHY2IHNjZW5hcmlvcy4gVGhlcmUncyBhbHNvIHRoZSBwb3NzaWJpbGl0eSBvZiBzZXBhcmF0ZSBtb2R1bGVzIGxpa2UgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgLCB3aGljaCBjb3VsZCBiZSByZWxldmFudCBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBzeXN0ZW0uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBtb2R1bGVzIHRvIGVuc3VyZSBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIG5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA3OjAzLjU2NTg5MjkyMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODg3MTE2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSVBWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNzowNi4xMTQ3NzY2NDZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4OTc3NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBDaGVjay1JbioqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdCBhZ2FpbiwgZW5zdXJpbmcgbm8gc2lnbmlmaWNhbnQgY2hhbmdlcyBoYXZlIHNsaXBwZWQgaW4gdW5ub3RpY2VkIHNpbmNlIHRoZSBsYXN0IHN3ZWVwLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgSSdtIGZhbWlsaWFyIHdpdGgsIHBlcmhhcHMgbmV3IGRlcGVuZGVuY2llcywgb3IgcmVncmVzc2lvbnMgaW4gZXhpc3Rpbmcgb3B0aW9ucy4gR2l2ZW4gdGhlIHNjb3BlIG9mIG5ldGZpbHRlciwgYW5kIHRoZSBpbnRlcmNvbm5lY3RlZG5lc3Mgb2YgdmFyaW91cyBzdWItbW9kdWxlcywgYSBmcmVzaCBsb29rIGlzIGFsd2F5cyB3YXJyYW50ZWQsIGV2ZW4gaWYgSSAqdGhpbmsqIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSXTigJlzIGFib3V0IGVuc3VyaW5nIHN0YWJpbGl0eSBhbmQgYW50aWNpcGF0aW5nIGFueSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0IGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgS2NvbmZpZyBpcyBrZXkgdG8gbWFpbnRhaW5pbmcgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA3OjA5LjEwNDU1NzExWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc2MTU2MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTEuODgwNzE5NjMzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzM0NjA1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gRmlyc3QsIEknbGwgZXhwbGljaXRseSBpbmNsdWRlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIENhbid0IGh1cnQgdG8gY292ZXIgYWxsIGJhc2VzIGFuZCBlbnN1cmUgdGhhdCB0aGUgaW5ldCB0YWJsZSBpcyB0aGVyZS5cblxuTm93LCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBjb25maWd1cmF0aW9ucyB0byByZXZpZXcsIEknbGwgZ28gdGhyb3VnaCB0aGUgcGVydGluZW50IGNvbmZpZ3MuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoOlxuXG4qICAgYE5GX0ZMT1dfVEFCTEVgIC0gVGhlIGJhc2UgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LCBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuXG4qICAgYE5GVF9GTE9XX09GRkxPQURgIC0gVGhpcyBpcyB0aGUgY2VudHJhbCBwaWVjZSwgdGhlIHRhcmdldCBJJ20gYWltaW5nIGZvci5cbiogICBgTkVUX0lQSVBgIC0gSXMgdGhpcyBnb2luZyB0byBtYXR0ZXI/IENvdWxkIGJlIGlmIEkgaGF2ZSBmbG93cyBnb2luZyB0byBvciBmcm9tIGEgdHVubmVsLlxuKiAgIGBJUFY2X1RVTk5FTGAgLSBTYW1lIHRob3VnaHQgcHJvY2VzcyBhcyB0aGUgSVB2NCB0dW5uZWwuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIHdoZW4gY29uc2lkZXJpbmcgbXkgZmxvdyBydWxlcy5cbiogICBgTkVURklMVEVSX0lOR1JFU1NgIC0gSW5ncmVzcyBmaWx0ZXJpbmcgaXMgaW1wb3J0YW50LCBzbyB0aGlzIHNob3VsZCBiZSBmaW5lLlxuKiAgIGBORl9DT05OVFJBQ0tgIC0gQ29ubmVjdGlvbiB0cmFja2luZywgZXNzZW50aWFsIGZvciBhbnkgc3RhdGVmdWwgb3BlcmF0aW9ucyBhbmQgdG8gYXZvaWQgd2VpcmQgYmVoYXZpb3IuXG4qICAgYE5GX1RBQkxFU2AgLSBUaGUgZm91bmRhdGlvbiBmb3IgbmV0ZmlsdGVyIHRhYmxlcywgc28gaXQncyBjcml0aWNhbC5cblxuSSdsbCBhbHNvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBgTkZUX0ZMT1dfT0ZGTE9BRGAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIE5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0OTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTYuMTU0MTgzODk2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk4OlxcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4gNDk5OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgZXh0aGRyIERDQ1Agc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuIDUwMDpcXHRcXHRkZWZhdWx0IG5cXG4gNTAxOlxcdFxcdGhlbHBcXG4gNTAyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBtYXRjaGluZyBvbiBEQ0NQIGV4dGVuc2lvbiBoZWFkZXJzLlxcbiA1MDM6XFx0XFxuIDUwNDpcXHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbiA1MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbiA1MDY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4gNTA3OlxcdFxcdGhlbHBcXG4gNTA4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImZsb3dfb2ZmbG9hZFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXFxuIDUwOTpcXHRcXHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXFxuIDUxMDpcXHRcXG4gNTExOlxcdGNvbmZpZyBORlRfQ09OTkxJTUlUXFxuIDUxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcbiA1MTM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNTE0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDUxNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxcbiA1MTY6XFx0XFx0aGVscFxcbiA1MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiY29ubmxpbWl0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTYuMTU0MzUwMTc1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjU1NTUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWU6IGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIHRvIHVuZGVyc3RhbmQuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZSBleHBvcnRlZCwgbm90IHN0YXRpYywgaXMgaW1wb3J0YW50LCBpdCBtYWtlcyB0aGVtIGVhc2lseSByZWFjaGFibGUuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGEgZnVuZGFtZW50YWwgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCB3aGlsZSBgbmZ0X2Zsb3dfcm91dGVgIHNpdHMgc3F1YXJlbHkgaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHNwYWNlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnOiBmYWlsaW5nIHRvIHJlbGVhc2UgdGhlIGBkc3RgIHdoZW4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgZW5jb3VudGVycyBhbiBpc3N1ZS4gVGhlbiB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsOiB0aGUgY29kZSB1cGRhdGVzIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgdG8gYXZvaWQgY2FsbGluZyBgbmZfcm91dGVgIGJ5IGxldmVyYWdpbmcgdGhlIGBkc3RgIGVudHJ5LiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgdG91Y2ggYm90aCBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IHRoZXkgaW50ZXJhY3QsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlIHdpdGggZnVuY3Rpb25hbCBjaGFuZ2VzLlxuXG5TbywgdG8gcHJlcGFyZSwgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gVGhpcyBzaG91bGQgZ2V0IHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZSBjb21waWxlZCBpbi4gVGhpcyBpbmNsdWRlcyB0aGUgSVAvSVB2NiB0dW5uZWwgY29kZSBhbmQgdGhlIG5ldGZpbHRlciBvZmZsb2FkIHBhdGguIFRoaXMgc2hvdWxkIGdldCBtZSBhIGdvb2QgZnV6emluZyBzZXR1cCB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI2OSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNzoyMy43Nzk5MDg2MzFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MTA1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-24 22:40:19 +0000 UTC FinishedAt: 2026-07-24 23:07:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "cca2780b61947fd27ec621541edd0902e193a609", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "cca2780b61947fd27ec621541edd0902e193a609", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "NET_IPIP", "IPV6_TUNNEL", "NETFILTER_INGRESS", "NF_CONNTRACK", "NF_TABLES" ], "series_id": "a17edc2f-97a7-42c2-bb26-58458dae960a" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "dev_fill_forward_path", "nft_flow_route" ], "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+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIzOjA0OjQyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5pbmRleCA4ZGIyNWI3OTU3M2UzYy4uMzBkYzc4YjRmMWEzODggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXG5AQCAtOTAyLDYgJiM0Mzs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHtcbiBcdFx0XHR9O1xuIFxuIFx0XHRcdHU4XHRsM19wcm90bztcbiYjNDM7XHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uZmVkMTAxZjU0YThhMzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNiAmIzQzOzc1MCwyMyBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4mIzQzO1x0aW50IGs7XG4mIzQzO1xuJiM0MztcdGZvciAoayA9IHN0YWNrLVx1MDAzZW51bV9wYXRoczsgayBcdTAwM2U9IDA7IGstLSkge1xuJiM0MztcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4mIzQzO1x0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuJiM0MztcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4mIzQzO1x0XHRcdGRzdF9yZWxlYXNlKHBhdGgtXHUwMDNldHVuLmRzdCk7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0ZGVmYXVsdDpcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NSwyOCAmIzQzOzc4MiwzOCBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdHdoaWxlIChjdHguZGV2IFx1MDAyNlx1MDAyNiBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XG4gXHRcdGxhc3RfZGV2ID0gY3R4LmRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4tXHRcdGlmICghcGF0aClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAoIXBhdGgpIHtcbiYjNDM7XHRcdFx0cmV0ID0gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiYjNDM7XHRcdH1cbiBcbiBcdFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XG4gXHRcdHJldCA9IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCBwYXRoKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMClcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7XG4mIzQzO1x0XHRcdHJldCA9IC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRpZiAoIWN0eC5kZXYpXG4tXHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbi1cdGlmICghcGF0aClcbi1cdFx0cmV0dXJuIC0xO1xuJiM0MztcdGlmICghcGF0aCkge1xuJiM0MztcdFx0cmV0ID0gLTE7XG4mIzQzO1x0XHRnb3RvIGVycl9vdXQ7XG4mIzQzO1x0fVxuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4gXG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiAwO1xuJiM0MztlcnJfb3V0OlxuJiM0MztcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC0xO1xuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xuaW5kZXggZDFhYTA0OGE2MDk5Y2MuLjBhNGZhMTM1MWRkNzY4IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjQvaXBpcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmNcbkBAIC0zNzAsMTAgJiM0MzszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4mIzQzO1x0cGF0aC1cdTAwM2V0dW4uZHN0ID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuIFx0cGF0aC1cdTAwM2VkZXYgPSBjdHgtXHUwMDNlZGV2O1xuIFxuIFx0Y3R4LVx1MDAzZWRldiA9IHJ0LVx1MDAzZWRzdC5kZXY7XG4tXHRpcF9ydF9wdXQocnQpO1xuIFxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L2lwNl90dW5uZWwuYyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuaW5kZXggYmY4ZTQwYWY2MGIwODMuLjMxMmRlNGE2ZTE2MGM3IDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbkBAIC0xODY0LDEyICYjNDM7MTg2NCwxMiBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiBcdFx0cGF0aC1cdTAwM2V0dW4uc3JjX3Y2ID0gdC1cdTAwM2VwYXJtcy5sYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4uZHN0X3Y2ID0gdC1cdTAwM2VwYXJtcy5yYWRkcjtcbiBcdFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XG4mIzQzO1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICYjNDM7NDIsNyBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbi1cdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbiBcdFx0XHRcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG5AQCAtNzYsMTQgJiM0Mzs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuJiM0MztcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXY7XG4gXHRzdHJ1Y3QgaWQge1xuIFx0XHRfX3UxNlx0aWQ7XG4gXHRcdF9fYmUxNlx0cHJvdG87XG4gXHR9IGVuY2FwW05GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYXTtcbiBcdHU4IG51bV9lbmNhcHM7XG4gXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XG4mIzQzO1x0c3RydWN0IGRzdF9lbnRyeSAqdHVuX2RzdDtcbiBcdHU4IG51bV90dW5zO1xuIFx0dTggaW5ncmVzc192bGFucztcbiBcdHU4IGhfc291cmNlW0VUSF9BTEVOXTtcbkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcbiYjNDM7XG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgaTtcbkBAIC0xMDksNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdGNhc2UgREVWX1BBVEhfVkxBTjpcbiBcdFx0Y2FzZSBERVZfUEFUSF9QUFBPRTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4tXHRcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xMjMsMTUgJiM0MzsxMjUsMTYgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovXG4gXHRcdFx0aWYgKHBhdGgtXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVx1MDAzZXR1bi5zcmNfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5kc3RfdjYgPSBwYXRoLVx1MDAzZXR1bi5kc3RfdjY7XG4gXHRcdFx0XHRpbmZvLVx1MDAzZXR1bi5sM19wcm90byA9IHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvO1xuJiM0MztcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMmIzQzOyYjNDM7O1xuIFx0XHRcdH0gZWxzZSB7XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICYjNDM7MTU1LDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0c3dpdGNoIChwYXRoLVx1MDAzZWJyaWRnZS52bGFuX21vZGUpIHtcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlaW5ncmVzc192bGFucyB8PSBCSVQoaW5mby1cdTAwM2VudW1fZW5jYXBzIC0gMSk7XG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4mIzQzO1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyAmIzQzOzE2OSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0XHRicmVhaztcbiBcdFx0XHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUc6XG4gXHRcdFx0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzID09IDApXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbiYjNDM7XHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2Fwcy0tO1xuIFx0XHRcdFx0YnJlYWs7XG5AQCAtMTc2LDE2ICYjNDM7MTc5LDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuJiM0MztcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXHRcdH1cbiBcdH1cbi1cdGluZm8tXHUwMDNlb3V0ZGV2ID0gaW5mby1cdTAwM2VpbmRldjtcbiBcbi1cdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChmbG93dGFibGUpIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cdTAwM2VpbmRldikpXG4mIzQzO1x0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4mIzQzO1x0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8tXHUwMDNlZGV2LCBmdCkpXG4mIzQzO1x0XHRyZXR1cm4gLTE7XG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4mIzQzO2Vycl9vdXQ6XG4mIzQzO1x0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4mIzQzO1x0XHRkc3RfcmVsZWFzZShpbmZvLVx1MDAzZXR1bl9kc3QpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gLTE7XG4gfVxuIFxuIHN0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbkBAIC0yMDUsNDQgJiM0MzsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCAmIzQzOzIyNywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XG4gXHRpbnQgaTtcbiBcbi1cdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbi1cdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcdTAwMjZzdGFjaywgXHUwMDI2aW5mbywgaGEsIFx1MDAyNmZ0LVx1MDAzZWRhdGEpIFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gLUVOT0VOVDtcbi1cbi1cdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4mIzQzO1x0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8uZGV2LVx1MDAzZWlmaW5kZXg7XG4gXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cdTAwM2VpZmluZGV4O1xuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykge1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLnByb3RvID0gaW5mby5lbmNhcFtpXS5wcm90bztcbiBcdH1cbiBcbi1cdGlmIChpbmZvLm51bV90dW5zIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKHBrdCwgXHUwMDI2aW5mby50dW4sIHJvdXRlLCBkaXIpKSB7XG4mIzQzO1x0aWYgKGluZm8ubnVtX3R1bnMpIHtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmRzdF92NiA9IGluZm8udHVuLnNyY192NjtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVucztcbiYjNDM7XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbiYjNDM7XHRcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0ID0gaW5mby50dW5fZHN0O1xuIFx0fVxuIFxuIFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4ubnVtX2VuY2FwcyA9IGluZm8ubnVtX2VuY2FwcztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TkZfRkxPV19UQUJMRSYjMzQ7LAogICAgJiMzNDtORlRfRkxPV19PRkZMT0FEJiMzNDssCiAgICAmIzM0O05FVF9JUElQJiMzNDssCiAgICAmIzM0O0lQVjZfVFVOTkVMJiMzNDssCiAgICAmIzM0O05FVEZJTFRFUl9JTkdSRVNTJiMzNDssCiAgICAmIzM0O05GX0NPTk5UUkFDSyYjMzQ7LAogICAgJiMzNDtORl9UQUJMRVMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbmV0d29ya2luZyBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBsb2dpYyBhbmQgaXRzIGltcGxlbWVudGF0aW9uIGluIElQL0lQdjYgdHVubmVscyAoYGlwaXBgLCBgaXA2X3R1bm5lbGApIHRvIHN0b3JlIGFuZCBtYW5hZ2UgYSBgZHN0X2VudHJ5YC4gSXQgYWxzbyB1cGRhdGVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBvZmZsb2FkIHBhdGggKGBuZnRfZmxvd19yb3V0ZWApIHRvIHVzZSB0aGlzIGBkc3RfZW50cnlgIGluc3RlYWQgb2YgcGVyZm9ybWluZyBhIG5ldyByb3V0ZSBsb29rdXAuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gcmVhY2hhYmxlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBlOTJiNWJlM2Q0Yjk1NzVlZGFiNDljODI0ODBmYmY3MjhiZGVmNmJjCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBKdWwgMjQgMjM6MDQ6NDIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaAppbmRleCA4ZGIyNWI3OTU3M2UzYy4uMzBkYzc4YjRmMWEzODggMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaApAQCAtOTAyLDYgJiM0Mzs5MDIsNyBAQCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoIHsKIAkJCX07CiAKIAkJCXU4CWwzX3Byb3RvOwomIzQzOwkJCXN0cnVjdCBkc3RfZW50cnkgKmRzdDsKIAkJfSB0dW47CiAJCXN0cnVjdCB7CiAJCQllbnVtIHsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggYzFjMWJlMWE2OTYyZmUuLmZlZDEwMWY1NGE4YTM0IDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzUwLDYgJiM0Mzs3NTAsMjMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIAlyZXR1cm4gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKJiM0MzsJaW50IGs7CiYjNDM7CiYjNDM7CWZvciAoayA9IHN0YWNrLSZndDtudW1fcGF0aHM7IGsgJmd0Oz0gMDsgay0tKSB7CiYjNDM7CQlwYXRoID0gJmFtcDtzdGFjay0mZ3Q7cGF0aFtrXTsKJiM0MzsJCXN3aXRjaCAocGF0aC0mZ3Q7dHlwZSkgewomIzQzOwkJY2FzZSBERVZfUEFUSF9UVU46CiYjNDM7CQkJZHN0X3JlbGVhc2UocGF0aC0mZ3Q7dHVuLmRzdCk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQlkZWZhdWx0OgomIzQzOwkJCWJyZWFrOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7fQomIzQzOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQogewpAQCAtNzY1LDI4ICYjNDM7NzgyLDM4IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAogCXdoaWxlIChjdHguZGV2ICZhbXA7JmFtcDsgY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7CiAJCWxhc3RfZGV2ID0gY3R4LmRldjsKIAkJcGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7Ci0JCWlmICghcGF0aCkKLQkJCXJldHVybiAtMTsKJiM0MzsJCWlmICghcGF0aCkgewomIzQzOwkJCXJldCA9IC0xOwomIzQzOwkJCWdvdG8gZXJyX291dDsKJiM0MzsJCX0KIAogCQltZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTsKIAkJcmV0ID0gY3R4LmRldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBwYXRoKTsKIAkJaWYgKHJldCAmbHQ7IDApCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCi0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCi0JCQlyZXR1cm4gLTE7CiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7CiYjNDM7CQkJcmV0ID0gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwomIzQzOwkJfQogCX0KIAogCWlmICghY3R4LmRldikKLQkJcmV0dXJuIHJldDsKJiM0MzsJCWdvdG8gZXJyX291dDsKIAogCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwotCWlmICghcGF0aCkKLQkJcmV0dXJuIC0xOwomIzQzOwlpZiAoIXBhdGgpIHsKJiM0MzsJCXJldCA9IC0xOwomIzQzOwkJZ290byBlcnJfb3V0OwomIzQzOwl9CiAJcGF0aC0mZ3Q7dHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUOwogCXBhdGgtJmd0O2RldiA9IGN0eC5kZXY7CiAKLQlyZXR1cm4gcmV0OwomIzQzOwlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7CiYjNDM7CiYjNDM7CXJldHVybiAtMTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7CiAKZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuYwppbmRleCBkMWFhMDQ4YTYwOTljYy4uMGE0ZmExMzUxZGQ3NjggMTAwNjQ0Ci0tLSBhL25ldC9pcHY0L2lwaXAuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2NC9pcGlwLmMKQEAgLTM3MCwxMCAmIzQzOzM3MCwxMCBAQCBzdGF0aWMgaW50IGlwaXBfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAlwYXRoLSZndDt0dW4uc3JjX3Y0LnNfYWRkciA9IHRpcGgtJmd0O3NhZGRyOwogCXBhdGgtJmd0O3R1bi5kc3RfdjQuc19hZGRyID0gdGlwaC0mZ3Q7ZGFkZHI7CiAJcGF0aC0mZ3Q7dHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUElQOwomIzQzOwlwYXRoLSZndDt0dW4uZHN0ID0gJmFtcDtydC0mZ3Q7ZHN0OwogCXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCiAJY3R4LSZndDtkZXYgPSBydC0mZ3Q7ZHN0LmRldjsKLQlpcF9ydF9wdXQocnQpOwogCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKaW5kZXggYmY4ZTQwYWY2MGIwODMuLjMxMmRlNGE2ZTE2MGM3IDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jCkBAIC0xODY0LDEyICYjNDM7MTg2NCwxMiBAQCBzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwKIAkJcGF0aC0mZ3Q7dHVuLnNyY192NiA9IHQtJmd0O3Bhcm1zLmxhZGRyOwogCQlwYXRoLSZndDt0dW4uZHN0X3Y2ID0gdC0mZ3Q7cGFybXMucmFkZHI7CiAJCXBhdGgtJmd0O3R1bi5sM19wcm90byA9IElQUFJPVE9fSVBWNjsKJiM0MzsJCXBhdGgtJmd0O3R1bi5kc3QgPSBkc3Q7CiAJCXBhdGgtJmd0O2RldiA9IGN0eC0mZ3Q7ZGV2OwogCQljdHgtJmd0O2RldiA9IGRzdC0mZ3Q7ZGV2OwogCX0KIAogCWVyciA9IGRzdC0mZ3Q7ZXJyb3I7Ci0JZHN0X3JlbGVhc2UoZHN0KTsKIAogCXJldHVybiBlcnI7CiB9CmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxMS4uOWY2ZmMyOWM0ZTE2OTUgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtNDIsOCAmIzQzOzQyLDcgQEAgc3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCXJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLAomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsCiAJCQkJICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsCiAJCQkJICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKQEAgLTc2LDE0ICYjNDM7NzUsMTQgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIH0KIAogc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewotCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjsKLQljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2OwomIzQzOwljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwogCXN0cnVjdCBpZCB7CiAJCV9fdTE2CWlkOwogCQlfX2JlMTYJcHJvdG87CiAJfSBlbmNhcFtORl9GTE9XX1RBQkxFX0VOQ0FQX01BWF07CiAJdTggbnVtX2VuY2FwczsKIAlzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7CiAJdTggbnVtX3R1bnM7CiAJdTggaW5ncmVzc192bGFuczsKIAl1OCBoX3NvdXJjZVtFVEhfQUxFTl07CkBAIC05Miw5ICYjNDM7OTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gewogCWVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7CiB9OwogCiYjNDM7c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpOwomIzQzOwogc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCSAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sCi0JCQkgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpCiYjNDM7CQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQogewogCWNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7CiAJaW50IGk7CkBAIC0xMDksNyAmIzQzOzExMSw3IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCWNhc2UgREVWX1BBVEhfVkxBTjoKIAkJY2FzZSBERVZfUEFUSF9QUFBPRToKIAkJY2FzZSBERVZfUEFUSF9UVU46Ci0JCQlpbmZvLSZndDtpbmRldiA9IHBhdGgtJmd0O2RldjsKJiM0MzsJCQlpbmZvLSZndDtkZXYgPSBwYXRoLSZndDtkZXY7CiAJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKIAkJCQltZW1jcHkoaW5mby0mZ3Q7aF9zb3VyY2UsIHBhdGgtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtMTIzLDE1ICYjNDM7MTI1LDE2IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCQkvKiBERVZfUEFUSF9WTEFOLCBERVZfUEFUSF9QUFBPRSBhbmQgREVWX1BBVEhfVFVOICovCiAJCQlpZiAocGF0aC0mZ3Q7dHlwZSA9PSBERVZfUEFUSF9UVU4pIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O3R1bi5zcmNfdjYgPSBwYXRoLSZndDt0dW4uc3JjX3Y2OwogCQkJCWluZm8tJmd0O3R1bi5kc3RfdjYgPSBwYXRoLSZndDt0dW4uZHN0X3Y2OwogCQkJCWluZm8tJmd0O3R1bi5sM19wcm90byA9IHBhdGgtJmd0O3R1bi5sM19wcm90bzsKJiM0MzsJCQkJaW5mby0mZ3Q7dHVuX2RzdCA9IHBhdGgtJmd0O3R1bi5kc3Q7CiAJCQkJaW5mby0mZ3Q7bnVtX3R1bnMmIzQzOyYjNDM7OwogCQkJfSBlbHNlIHsKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQogCQkJCQlwYXRoLSZndDtlbmNhcC5pZDsKQEAgLTE1MiwxMyAmIzQzOzE1NSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJc3dpdGNoIChwYXRoLSZndDticmlkZ2Uudmxhbl9tb2RlKSB7CiAJCQljYXNlIERFVl9QQVRIX0JSX1ZMQU5fVU5UQUdfSFc6CiAJCQkJaWYgKGluZm8tJmd0O251bV9lbmNhcHMgPT0gMCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7aW5ncmVzc192bGFucyB8PSBCSVQoaW5mby0mZ3Q7bnVtX2VuY2FwcyAtIDEpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzoKIAkJCQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkKLQkJCQkJcmV0dXJuIC0xOwomIzQzOwkJCQkJZ290byBlcnJfb3V0OwogCiAJCQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPSBwYXRoLSZndDticmlkZ2Uudmxhbl9pZDsKIAkJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtJmd0O2JyaWRnZS52bGFuX3Byb3RvOwpAQCAtMTY2LDcgJiM0MzsxNjksNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJCWJyZWFrOwogCQkJY2FzZSBERVZfUEFUSF9CUl9WTEFOX1VOVEFHOgogCQkJCWlmIChpbmZvLSZndDtudW1fZW5jYXBzID09IDApCi0JCQkJCXJldHVybiAtMTsKJiM0MzsJCQkJCWdvdG8gZXJyX291dDsKIAogCQkJCWluZm8tJmd0O251bV9lbmNhcHMtLTsKIAkJCQlicmVhazsKQEAgLTE3NiwxNiAmIzQzOzE3OSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLAogCQkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLTE7CiYjNDM7CQkJZ290byBlcnJfb3V0OwogCQl9CiAJfQotCWluZm8tJmd0O291dGRldiA9IGluZm8tJmd0O2luZGV2OwogCi0JaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgJmFtcDsmYW1wOwotCSAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tJmd0O2luZGV2KSkKJiM0MzsJaWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKCZhbXA7ZnQtJmd0O2RhdGEpICZhbXA7JmFtcDsKJiM0MzsJICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby0mZ3Q7ZGV2KSkKIAkJaW5mby0mZ3Q7eG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUOwogCiYjNDM7CWlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLSZndDtkZXYsIGZ0KSkKJiM0MzsJCXJldHVybiAtMTsKJiM0MzsKIAlyZXR1cm4gMDsKJiM0MztlcnJfb3V0OgomIzQzOwlpZiAoaW5mby0mZ3Q7bnVtX3R1bnMpCiYjNDM7CQlkc3RfcmVsZWFzZShpbmZvLSZndDt0dW5fZHN0KTsKJiM0MzsKJiM0MzsJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCkBAIC0yMDUsNDQgJiM0MzsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJcmV0dXJuIGZvdW5kOwogfQogCi1zdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCi0JCQkJCXN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsICp0dW4sCi0JCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKLQkJCQkJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcikKLXsKLQlzdHJ1Y3QgZHN0X2VudHJ5ICpjdXJfZHN0ID0gcm91dGUtJmd0O3R1cGxlW2Rpcl0uZHN0OwotCXN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMOwotCXN0cnVjdCBmbG93aSBmbCA9IHt9OwotCi0Jc3dpdGNoIChuZnRfcGYocGt0KSkgewotCWNhc2UgTkZQUk9UT19JUFY0OgotCQlmbC51LmlwNC5kYWRkciA9IHR1bi0mZ3Q7ZHN0X3Y0LnNfYWRkcjsKLQkJZmwudS5pcDQuc2FkZHIgPSB0dW4tJmd0O3NyY192NC5zX2FkZHI7Ci0JCWZsLnUuaXA0LmZsb3dpNF9paWYgPSBuZnRfaW4ocGt0KS0mZ3Q7aWZpbmRleDsKLQkJZmwudS5pcDQuZmxvd2k0X2RzY3AgPSBpcDRoX2RzY3AoaXBfaGRyKHBrdC0mZ3Q7c2tiKSk7Ci0JCWZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LSZndDtza2ItJmd0O21hcms7Ci0JCWZsLnUuaXA0LmZsb3dpNF9mbGFncyA9IEZMT1dJX0ZMQUdfQU5ZU1JDOwotCQlicmVhazsKLQljYXNlIE5GUFJPVE9fSVBWNjoKLQkJZmwudS5pcDYuZGFkZHIgPSB0dW4tJmd0O2RzdF92NjsKLQkJZmwudS5pcDYuc2FkZHIgPSB0dW4tJmd0O3NyY192NjsKLQkJZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLSZndDtpZmluZGV4OwotCQlmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LSZndDtza2IpKTsKLQkJZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtJmd0O3NrYi0mZ3Q7bWFyazsKLQkJZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7Ci0JCWJyZWFrOwotCX0KLQotCW5mX3JvdXRlKG5mdF9uZXQocGt0KSwgJmFtcDt0dW5fZHN0LCAmYW1wO2ZsLCBmYWxzZSwgbmZ0X3BmKHBrdCkpOwotCWlmICghdHVuX2RzdCkKLQkJcmV0dXJuIC1FTk9FTlQ7Ci0KLQlyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0OwotCWRzdF9yZWxlYXNlKGN1cl9kc3QpOwotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJCQkJc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQkJCWNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKQEAgLTI1NSwyOCAmIzQzOzIyNywyNSBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogCXVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dOwogCWludCBpOwogCi0JaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsICZhbXA7c3RhY2spICZsdDsgMCB8fAotCSAgICBuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCAmYW1wO2Z0LSZndDtkYXRhKSAmbHQ7IDApCi0JCXJldHVybiAtRU5PRU5UOwotCi0JaWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSkKJiM0MzsJaWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8CiYjNDM7CSAgICBuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCBmdCkgJmx0OyAwKQogCQlyZXR1cm4gLUVOT0VOVDsKIAotCWlmIChpbmZvLm91dGRldikKLQkJcm91dGUtJmd0O3R1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmRldi0mZ3Q7aWZpbmRleDsKJiM0MzsJcm91dGUtJmd0O3R1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi0mZ3Q7aWZpbmRleDsKIAotCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi0mZ3Q7aWZpbmRleDsKIAlmb3IgKGkgPSAwOyBpICZsdDsgaW5mby5udW1fZW5jYXBzOyBpJiM0MzsmIzQzOykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0uaWQgPSBpbmZvLmVuY2FwW2ldLmlkOwogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0ucHJvdG8gPSBpbmZvLmVuY2FwW2ldLnByb3RvOwogCX0KIAotCWlmIChpbmZvLm51bV90dW5zICZhbXA7JmFtcDsKLQkgICAgIW5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUocGt0LCAmYW1wO2luZm8udHVuLCByb3V0ZSwgZGlyKSkgewomIzQzOwlpZiAoaW5mby5udW1fdHVucykgewogCQlyb3V0ZS0mZ3Q7dHVwbGVbIWRpcl0uaW4udHVuLnNyY192NiA9IGluZm8udHVuLmRzdF92NjsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7CiAJCXJvdXRlLSZndDt0dXBsZVshZGlyXS5pbi50dW4ubDNfcHJvdG8gPSBpbmZvLnR1bi5sM19wcm90bzsKIAkJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV90dW5zID0gaW5mby5udW1fdHVuczsKJiM0MzsJCWRzdF9yZWxlYXNlKHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdCk7CiYjNDM7CQlyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QgPSBpbmZvLnR1bl9kc3Q7CiAJfQogCiAJcm91dGUtJmd0O3R1cGxlWyFkaXJdLmluLm51bV9lbmNhcHMgPSBpbmZvLm51bV9lbmNhcHM7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxODgKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAzMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXR3b3JraW5nIFN1YnN5c3RlbSBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQmIzM5O3MgYSBub24tdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSB3aXRoaW4gdGhlIGNvcmUgbmV0d29ya2luZyBzdWJzeXN0ZW0sIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGZsb3cgb2ZmbG9hZGluZyBhbmQgdHVubmVscy4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyB1cGRhdGluZyBob3cgZm9yd2FyZCBwYXRocyBhcmUgY29uc3RydWN0ZWQsIHNwZWNpZmljYWxseSB0aGUgYG5ldF9kZXZpY2VfcGF0aGAgc3RydWN0dXJlLiBUaGV5JiMzOTt2ZSBhZGRlZCBhIGBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RgIHRvIGBwYXRoLnR1bmAgYW5kIGFyZSBtYW5hZ2luZyBpdHMgbGlmZXRpbWUg4oCTIHJlbGVhc2luZyBpdCBvbiBlcnJvciB3aXRoIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gSSBzZWUgdGhleSBhcmUgbGV2ZXJhZ2luZyB0aGlzIHdpdGhpbiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHRvIGJ5cGFzcyBhIG5vdy1yZW1vdmVkIGBuZl9yb3V0ZWAgY2FsbCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGFsc28gbWVhbnMgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gcGlucG9pbnQgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBmb3IgbW9yZSBkZXRhaWxlZCBhbmFseXNpcyBhbmQgcG90ZW50aWFsIGZ1enppbmcgdGFyZ2V0cy4gSSBzZWUgdGhlIGRpcmVjdCBtb2RpZmljYXRpb25zIGFyZSBpbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwaXBfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19yb3V0ZWAsIHNvIHRoYXQgc2VlbXMgbGlrZSBhIGtleSBmdW5jdGlvbiB0byBleHBsb3JlLiBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYG5mdF9mbG93X3JvdXRlYCBpcyBleHBvcnRlZCwgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBpdHMgb3ZlcmFsbCByZWFjaCB3aXRoaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIHNlZSBpZiBpdCYjMzk7cyBhIGdsb2JhbCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZGV2X2ZvcndhcmRfcGF0aCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIwMT1zdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTctXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIxODpzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTktXHRcdFx0XHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjQ9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDYtXHRpZiAocm91dGUtXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcdD09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMDc6XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMDgtXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzEwLVx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzExOlx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMxMi1cdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI1NwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIHRoZSBvbmUgdGhpbmtpbmcgaXQ6CgoqKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBORlQgRmxvdyBSb3V0ZSoqCgpPa2F5LCBzbyBgbmZ0X2Zsb3dfcm91dGVgIHNlZW1zIGxpa2UgdGhlIGNlbnRyYWwgZW50cnkgcG9pbnQgZm9yIHRoaXMgd2hvbGUgTkZULXJlbGF0ZWQgcHJvY2Vzcy4gTXkgaW1tZWRpYXRlIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGhlY2sgdGhpcyB0aGluZyBpcyBhY3R1YWxseSAqY2FsbGVkKiBmcm9tLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHN0YWNrIGlzIGNydWNpYWwgZm9yIGdyYXNwaW5nIGhvdyB0aGUgc3lzdGVtIGZ1bmN0aW9ucyBhbmQsIG1vcmUgaW1wb3J0YW50bHksIGZvciBpZGVudGlmeWluZyBwb3RlbnRpYWwgcG9pbnRzIG9mIGZhaWx1cmUgb3IgYXJlYXMgZm9yIG9wdGltaXphdGlvbi4gVGltZSB0byBmaXJlIHVwIHRoZSB0b29scyBhbmQgdHJhY2UgdGhhdCBjYWxsIGdyYXBoLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nz1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ5LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTI2My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjY0OmludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjUtXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9NTA9c3RhdGljIHZvaWQgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsKGNvbnN0IHN0cnVjdCBuZnRfZXhwciAqZXhwcixcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXHRkaXIgPSBDVElORk8yRElSKGN0aW5mbyk7XG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXHUwMDI2cm91dGUsIGRpciwgcHJpdi1cdTAwM2VmbG93dGFibGUpIFx1MDAzYyAwKVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTEwLVx0XHRnb3RvIGVycl9mbG93X3JvdXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc4OTUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiA1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gYG5mdF9mbG93X29mZmxvYWRfZXZhbGAqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24sIHNvIGl0JiMzOTtzIHRoZSBjb3JlIGxvZ2ljIGZvciB0aGUgYG5mdF9mbG93X29mZmxvYWRgIGV4cHJlc3Npb24gd2l0aGluIG5ldGZpbHRlci4gSXQmIzM5O3MgdGhlIGVuZ2luZSB0aGF0IGZpZ3VyZXMgb3V0IGlmIHNvbWV0aGluZyBjYW4gYmUgb2ZmbG9hZGVkIGZvciBmbG93IHByb2Nlc3NpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXRzIGRvaW5nLgoKTm93LCB3aGVyZSBkbyBJIHN0YXJ0PyBHaXZlbiBpdHMgcHVycG9zZSwgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0aGUgYWN0dWFsIGRhdGEgcGF0aCBoYW5kbGluZyB0byBzZWUgd2hlcmUgdGhlIGRlY2lzaW9ucyBhcmUgbWFkZS4gTGV0IG1lIGNoZWNrIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB0aGF0JiMzOTtzIGxpa2VseSB0aGUgcmlnaHQgcGxhY2UgdG8gYmVnaW4gZXhwbG9yaW5nIHRoZSBtZWNoYW5pY3Mgb2YgaG93IHRoaXMgd29ya3MuIEl0JiMzOTtzIHByb2JhYmx5IHdoZXJlIGl0IGZpZ3VyZXMgb3V0IHRoZSBuZXh0IGhvcCBhbmQgaWYgdGhlIHBhY2tldCBuZWVkcyB0byBiZSBzZW50IGZvciBmb3J3YXJkaW5nLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaG93IHRoZSBvZmZsb2FkIGRlY2lzaW9uIGlzIGJlaW5nIG1hZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjg5LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEwNTpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzQyOD1pbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jLTExMDktXHQubmRvX2dldF9pZmxpbmtcdFx0PSB2bGFuX2Rldl9nZXRfaWZsaW5rLFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGhcdD0gdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVx0Lm5kb19od3RzdGFtcF9nZXRcdD0gdmxhbl9od3RzdGFtcF9nZXQsXG4tLVxubmV0L2NvcmUvZGV2LmM9NzQzPXN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzUyLVxubmV0L2NvcmUvZGV2LmM6NzUzOnN0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxubmV0L2NvcmUvZGV2LmMtNzU0LXtcbi0tXG5uZXQvY29yZS9kZXYuYy03NjktXG5uZXQvY29yZS9kZXYuYzo3NzA6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXG5uZXQvY29yZS9kZXYuYy03NzEtXHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbi0tXG5uZXQvY29yZS9kZXYuYy04MTMtZXJyX291dDpcbm5ldC9jb3JlL2Rldi5jOjgxNDpcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbm5ldC9jb3JlL2Rldi5jLTgxNS1cbi0tXG5uZXQvY29yZS9kZXYuYy04MTctfVxubmV0L2NvcmUvZGV2LmM6ODE4OkVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7XG5uZXQvY29yZS9kZXYuYy04MTktXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTg5OnN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTEwNDc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfZGF0YWlmXzgwMjNfb3BzID0ge1xuLS1cbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXHQubmRvX3NldF9tYWNfYWRkcmVzc1x0PSBpZWVlODAyMTFfY2hhbmdlX21hYyxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXHQ9IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgsXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVx0Lm5kb19zZXR1cF90Y1x0XHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zNj1zdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDU6c3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NzQ6XHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MjE4PXN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjktXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjIzMDpcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMzEtXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBmdCkgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyMgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDEwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgRm9yd2FyZCBQYXRoIFVwZGF0ZXMqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBhIGZldyBrZXkgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gZm9yd2FyZGluZyBwYXRoczogYGRldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhlIG1haW4gcGxheWVycyBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAsIHdoaWNoIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgaXQgc3VnZ2VzdHMgZWl0aGVyIGEgbG93IGxldmVsIHJvdXRpbmcgY2hhbmdlLCBvciBhIG1vcmUgZGlyZWN0IGludGVyYWN0aW9uIHdpdGggdGhlIE5ldGZpbHRlciBmbG93IHRhYmxlIHByb2Nlc3NpbmcuCgpCZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29yZSBmdW5jdGlvbnMsIGxldCBtZSB6ZXJvIGluIG9uIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBzdWdnZXN0IHR1bm5lbC1yZWxhdGVkIHBhdGggYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgZm9yd2FyZGluZyBsb2dpYyBjaGFuZ2VzIHdpdGhpbiB0aGVzZSB0dW5uZWwgaW50ZXJmYWNlcyBhbmQgaG93IHRoZXNlIG1vZGlmaWNhdGlvbnMgd2lsbCBwbGF5IHdpdGggYW55IG90aGVyIHR1bm5lbCBwcm9jZXNzaW5nIHdpdGhpbiB0aGUgc3RhY2suIEl0JiMzOTtzIGltcG9ydGFudCB0byBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGltcGFjdCBvbiBvdmVybGF5IGFuZCB1bmRlcmxheSByb3V0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lwaXAuYz0zNDE9aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxuLS1cbm5ldC9pcHY0L2lwaXAuYy0zNTUtXG5uZXQvaXB2NC9pcGlwLmM6MzU2OnN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L2lwdjQvaXBpcC5jLTM1Ny1cdFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvaXB2NC9pcGlwLmM9MzgxPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXBpcF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY0L2lwaXAuYy0zODktXHQubmRvX3R1bm5lbF9jdGxcdD0gaXBpcF90dW5uZWxfY3RsLFxubmV0L2lwdjQvaXBpcC5jOjM5MDpcdC5uZG9fZmlsbF9mb3J3YXJkX3BhdGggPSBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoLFxubmV0L2lwdjQvaXBpcC5jLTM5MS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDU0MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQuCgoqKkFuYWx5emluZyB0aGUgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIEZ1bmN0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIGZ1bmN0aW9uLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIHRoaXMgaXMgY29yZSB0byB0aGUgSVB2NiB0dW5uZWwgZnVuY3Rpb25hbGl0eSDigJMgc3BlY2lmaWNhbGx5LCB0aGUgZm9yd2FyZGluZyBwYXRoLiBJdOKAmXMgcmVzcG9uc2libGUgZm9yLCBwcmVzdW1hYmx5LCBjb25zdHJ1Y3Rpbmcgb3IgcG9wdWxhdGluZyB0aGUgbmVjZXNzYXJ5IGRhdGEgc3RydWN0dXJlcyBhbmQgY29uZmlndXJhdGlvbnMgdG8gYWxsb3cgYW4gSVB2NiBwYWNrZXQgdG8gdHJhdmVyc2UgYSB0dW5uZWwuIEkgaW1tZWRpYXRlbHkgc3RhcnQgdGhpbmtpbmcgYWJvdXQgd2hhdCBwaWVjZXMgdGhhdCBlbmNvbXBhc3NlczogcG90ZW50aWFsbHkgdGhlIG91dGVyIGhlYWRlciAodGhlIHR1bm5lbCBoZWFkZXIsIGxpa2VseSBJUHY2KSwgdGhlIGlubmVyIGhlYWRlciAodGhlIGVuY2Fwc3VsYXRlZCBJUHY2IHBhY2tldCksIGFueSBhc3NvY2lhdGVkIG1ldGFkYXRhIGFib3V0IHRoZSB0dW5uZWwgaXRzZWxmIChzb3VyY2UvZGVzdGluYXRpb24gZW5kcG9pbnRzLCB0dW5uZWwgSUQgaWYgYXBwbGljYWJsZSwgZXRjLiksIGFuZCBvZiBjb3Vyc2UsIGFueSBuZWNlc3Nhcnkgcm91dGluZyBpbmZvcm1hdGlvbiB0byBkaXJlY3QgdGhlIHBhY2tldCB0b3dhcmRzIGl0cyB1bHRpbWF0ZSBkZXN0aW5hdGlvbiB0aHJvdWdoIHRoZSB0dW5uZWwuCgpJIG5lZWQgdG8gZGVsdmUgaW50byBob3cgdGhpcyBmdW5jdGlvbiBpbnRlcmZhY2VzIHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIG5ldHdvcmsgc3RhY2suIElzIGl0IGNhbGxlZCBkaXJlY3RseSBieSB0aGUgSVB2NiBpbnB1dCBwYXRoPyBJcyBpdCBwYXJ0IG9mIHRoZSBvdXRwdXQgcGF0aD8gRG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSByb3V0aW5nIHRhYmxlIGxvb2t1cCBwcm9jZXNzPyBJJiMzOTttIHBpY3R1cmluZyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLi4uIGFuIGluY29taW5nIElQdjYgcGFja2V0IHRyaWdnZXJzIHRoZSB0dW5uZWwgZW50cnkgcG9pbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiDigJMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBpcyBpbnZva2VkIHRvIHByZXBhcmUgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uIHRocm91Z2ggdGhlIHR1bm5lbC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYXNwZWN0cz8gSSYjMzk7bSB3b25kZXJpbmcgaWYgdGhpcyBmdW5jdGlvbiBwZXJmb3JtcyBhbnkgb2ZmbG9hZGluZyBjYXBhYmlsaXRpZXMgb3Igc2V0cyB1cCBpbnN0cnVjdGlvbnMgdGhhdCBjYW4gYmUgZG9uZSBpbiB0aGUgZGF0YXBhdGguIEkmIzM5O2QgYmUgbG9va2luZyBmb3Igb3B0aW1pemF0aW9uczogYXJlIHRoZXJlIGFueSBjYWNoaW5nIG1lY2hhbmlzbXMsIHByZS1jb21wdXRhdGlvbiB0ZWNobmlxdWVzLCBvciBkYXRhIHN0cnVjdHVyZSBvcHRpbWl6YXRpb25zIGVtcGxveWVkIGhlcmUgdG8gbWluaW1pemUgb3ZlcmhlYWQ/IEFuZCB3aGF0IGFib3V0IGVycm9yIGhhbmRsaW5nPyBJcyB0aGVyZSBhbnkgZ3JhY2VmdWwgZGVncmFkYXRpb24gYnVpbHQtaW4gdG8gaGFuZGxlIHBvdGVudGlhbCB0dW5uZWwgcGF0aCBmYWlsdXJlcyBvciBtaXNjb25maWd1cmF0aW9ucz8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2Qgd2FudCB0byBpbnZlc3RpZ2F0ZSBuZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY2L2lwNl90dW5uZWwuYz0xODQyPUVYUE9SVF9TWU1CT0xfR1BMKGlwNl90bmxfZW5jYXBfc2V0dXApO1xubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDMtXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmM6MTg0NDpzdGF0aWMgaW50IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODQ1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYz0xODc3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaXA2X3RubF9uZXRkZXZfb3BzID0ge1xuLS1cbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg0LVx0Lm5kb19nZXRfaWZsaW5rID0gaXA2X3RubF9nZXRfaWZsaW5rLFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aCxcbm5ldC9pcHY2L2lwNl90dW5uZWwuYy0xODg2LX07XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMjI5CgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMTY2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgVGFyZ2V0IElkZW50aWZpY2F0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYm90aCBvZiB3aGljaCBhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBuZG9fZmlsbF9mb3J3YXJkX3BhdGhgLCB1c2VkIGZvciBpcGlwIGFuZCBpcDZfdHVubmVsIGRldmljZXMuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjYWxsZWQgZnJvbSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC4KClRoZSBrZXkgZW50cnkgcG9pbnRzIHRvIGZvY3VzIG15IGZ1enppbmcgZWZmb3J0cyBvbiwgdGhlbiwgYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGl0c2VsZiwgYW5kIGFsc28gYG5mdF9mbG93X3JvdXRlYC4KCkxldCBtZSBxdWlja2x5IGNvbmZpcm0gdGhhdCBgbmZ0X2Zsb3dfcm91dGVgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBBaCB5ZXMsIGl0IGlzOiBgRVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO2AgRXhjZWxsZW50LCB0aGF0IG1lYW5zIGl0JiMzOTtzIGFjY2Vzc2libGUuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIEZvciBgbmZ0X2Zsb3dfcm91dGVgLCBpdCYjMzk7cyBsb2NhdGVkIGluIGBuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jYCwgc28gSSBzaG91bGQgYmUgYWJsZSB0byBnZXQgdGhlIHJlbGV2YW50IGNvbmZpZyBkZXBlbmRlbmNpZXMgZnJvbSB0aGVyZS4gVGhpcyBpcyBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgZm9yIGVuc3VyaW5nIGEgcHJvcGVyIGZ1enplciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZl9mbG93X3RhYmxlX3BhdGgubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcdFx0Oj0gbmZfZmxvd190YWJsZV9jb3JlLm8gbmZfZmxvd190YWJsZV9pcC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjE0NDpcdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cdFx0XHRcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NjUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkVuYWJsaW5nIHRoZSBgbmZfZmxvd190YWJsZWAqKgoKUmlnaHQsIHNvIEkmIzM5O20gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWUsIGFuZCBJJiMzOTt2ZSBjaXJjbGVkIGJhY2sgdG8gdGhlIGZ1bmRhbWVudGFsIGJ1aWxkaW5nIGJsb2NrcyBvZiBjb25uZWN0aW9uIHRyYWNraW5nLiBUbyBtYWtlIHRoaXMgdGhpbmcgcmVhbGx5IHNpbmcsIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhlIGBuZl9mbG93X3RhYmxlYCBtb2R1bGUgaXMgZW5hYmxlZC4gSXTigJlzIHByZXR0eSBvYnZpb3VzLCBidXQgeW91IGhhdmUgdG8gc3RhcnQgd2l0aCB0aGUgYmFzaWNzLiBXaXRob3V0IHRoYXQsIEkmIzM5O20gbm90IGdvaW5nIHRvIGJlIHNlZWluZyB0aGUgYWNjZWxlcmF0aW9uIEkmIzM5O20gaG9waW5nIGZvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQsIGlmIG5lZWRlZCwgZ2V0IHRoYXQgdHVybmVkIG9uIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBJdCBmZWVscyBsaWtlIGEgcHJlcmVxdWlzaXRlLCBhIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIE9uY2UgSSB2ZXJpZnkgdGhhdCBpdCYjMzk7cyBlbmFibGVkLCB0aGVuIEkgY2FuIG1vdmUgdG8gdGhlIGFjdHVhbCBwcm9ibGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O29iai1cXCRcXChDT05GSUdfTkZfRkxPV19UQUJMRVxcKSBcXCYjNDM7PSBuZl9mbG93X3RhYmxlXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDI2CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKk5hdmlnYXRpbmcgdGhlIE5ldGZpbHRlciBMYW5kc2NhcGUgZm9yIG5mX2Zsb3dfdGFibGUqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBzdHJ1Y3R1cmUgb2YgYG5mX2Zsb3dfdGFibGVgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9uZXRmaWx0ZXIvYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcywgaW5jbHVzaW9uIG9mIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29tcGlsYXRpb24gc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfdGFibGVgLiBUaGUgYE1ha2VmaWxlYCB3aWxsIGxpa2VseSBzZXJ2ZSBhcyBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQgdG8gZmluZGluZyByZWxhdGVkIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRoZXkmIzM5O3JlIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIHdoZXJlIHRoZSBjb21waWxhdGlvbiBtYWdpYyBpcyBkZWZpbmVkLCBzbyBpdCYjMzk7cyBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZfZmxvd190YWJsZVxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVx0JiM0Mzs9IG5mdF9md2RfbmV0ZGV2Lm9cbi0tXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0MS0jIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmVcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVx0JiM0Mzs9IG5mX2Zsb3dfdGFibGUub1xubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xNDMtbmZfZmxvd190YWJsZS1vYmpzXHRcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjM3NgoJCQkJCQkJb3V0cHV0OiAyMgoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHJlcXVpcmVtZW50cywgY29uc2lkZXJpbmcgbXkgZXhwZXJ0aXNlOgoKKipNeSBMaW5lIG9mIFJlYXNvbmluZyBmb3IgTmV0d29yayBGbG93IE9mZmxvYWRpbmcqKgoKUmlnaHQsIHNvIHRvIGV2ZW4gKmJlZ2luKiB3b3JraW5nIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmcgaW4gdGhpcyBjb250ZXh0LCB0aGUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBvcHRpb24gaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIFRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb25hbCBwaWVjZSwgdGhlIGJhc2ljIGZsb3cgdGFibGUgaW5mcmFzdHJ1Y3R1cmUsIHdpdGhvdXQgd2hpY2ggd2UmIzM5O3JlIGRlYWQgaW4gdGhlIHdhdGVyLiBXZSBuZWVkIHRoZSBjb3JlIG1hY2hpbmVyeSB0byBtYW5hZ2UgdGhlc2UgZmxvd3MgaW4gdGhlIGZpcnN0IHBsYWNlLgoKQW5kIHRoZW4sIGxvb2tpbmcgZGVlcGVyIGludG8gaG93IHRoaXMgb2ZmbG9hZGluZyBpcyAqYWN0dWFsbHkqIGltcGxlbWVudGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuZXh0IGNyaXRpY2FsIGRlcGVuZGVuY3kuIFRoaXMgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggb2ZmbG9hZGluZyBmbG93cyB1c2luZyBgbmZ0YWJsZXNgLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlLCBpZiBJIHdhbnQgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbmFsaXR5ICh3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcm91dGluZyBiYXNlZCBvbiB0aGVzZSBvZmZsb2FkZWQgZmxvd3MpLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGVyZWZvcmUsIGlmIEkgd2FudCB0byB1c2UgdGhlIGZ1bmN0aW9uIGBuZnRfZmxvd19yb3V0ZWAsIHRoZW4gSSByZXF1aXJlIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIHNpbmNlIHRoZSB0d28gZnVuY3Rpb25zIGFyZSBzbyBjbG9zZWx5IGNvdXBsZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByYWN0aWNlIHdpdGggcmVnYXJkcyB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgTGludXggS2VybmVsLCBJIGFtIGNvbmZpZGVudCBJIHVuZGVyc3RhbmQgdGhlIHRob3VnaHQgcHJvY2Vzcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZFxcLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgwNAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoZSBtYXR0ZXI6CgoqKkNoZWNraW5nIFNwZWNpZmljIENvZGUgRmlsZXMgZm9yIEludmVzdGlnYXRpb24qKgoKUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgaXNzdWUgbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIFRoZSBmaXJzdCB0d28gZmlsZXMgdGhhdCBqdW1wIG91dCB0byBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcGlwLmNgIGFuZCBgaXA2X3R1bm5lbC5jYC4gVGhlc2UgYm90aCBoYW5kbGUgY29yZSBJUC1pbi1JUCB0dW5uZWxpbmcgbWVjaGFuaXNtcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEkmIzM5O20gaW52ZXN0aWdhdGluZywgaXQmIzM5O3MgaGlnaGx5IHByb2JhYmxlIHRoYXQgdGhlIGJ1ZyBsaWVzIHNvbWV3aGVyZSB3aXRoaW4gdGhlIHR1bm5lbGluZyBsb2dpYyBvciwgcGVyaGFwcywgaG93IHRoZXNlIG1vZHVsZXMgaW50ZXJhY3QuIEkmIzM5O2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvd3MsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBzdGFjayB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcGlwXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9NYWtlZmlsZT0xMz1tbHhzd19zcGVjdHJ1bS1vYmpzXHRcdDo9IHNwZWN0cnVtLm8gc3BlY3RydW1fYnVmZmVycy5vIFxcXG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGUtMjItXHRcdFx0XHQgICBzcGVjdHJ1bV9mbG93ZXIubyBzcGVjdHJ1bV9jbnQubyBcXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGU6MjM6XHRcdFx0XHQgICBzcGVjdHJ1bV9maWQubyBzcGVjdHJ1bV9pcGlwLm8gXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTI0LVx0XHRcdFx0ICAgc3BlY3RydW1fYWNsX2ZsZXhfYWN0aW9ucy5vIFxcXG4tLVxubmV0L2lwdjQvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0lQX01ST1VURV9DT01NT04pICYjNDM7PSBpcG1yX2Jhc2Uub1xubmV0L2lwdjQvTWFrZWZpbGU6MjU6b2JqLSQoQ09ORklHX05FVF9JUElQKSAmIzQzOz0gaXBpcC5vXG5uZXQvaXB2NC9NYWtlZmlsZS0yNi1ncmUteSA6PSBncmVfZGVtdXgub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI0OAoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOZXR3b3JrIElQSVAgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBhbmQgdGhlIHN5c3RlbSBoaW5nZXMgb24gaGF2aW5nIGBDT05GSUdfTkVUX0lQSVBgIGVuYWJsZWQuIFRoYXQgc2VlbXMgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZC4gVGhpcyBzdWdnZXN0cyB0aGUgZnVuY3Rpb25hbGl0eSBJJiMzOTttIGRlYWxpbmcgd2l0aCBsZXZlcmFnZXMgSVAtaW4tSVAgdHVubmVsaW5nLiBUaGF0IGNvdWxkIG1lYW4gaXQmIzM5O3Mgc2V0dGluZyB1cCBzb21lIHNvcnQgb2YgdmlydHVhbCBuZXR3b3JrLCBtYXliZSBmb3IgZW5jYXBzdWxhdGlvbiBvciBmb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEkmIzM5O2QgaW1tZWRpYXRlbHkgd2FudCB0byBrbm93ICp3aHkqIGl0JiMzOTtzIHJlcXVpcmVkLiBJcyBpdCBhIGhhcmQgZGVwZW5kZW5jeT8gSXMgaXQgcHJvdmlkaW5nIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBPciBpcyBpdCBzaW1wbHkgYSBsZWdhY3kgY29tcG9uZW50IHRoYXQgaGFzIHRvIGJlIHByZXNlbnQ/IFVuZGVyc3RhbmRpbmcgdGhlIHByZWNpc2UgcHVycG9zZSBvZiBgQ09ORklHX05FVF9JUElQYCBpcyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAsIGJlZm9yZSBJIGRpZyBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpcDZfdHVubmVsXFwubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICYjNDM7PSBzaXQub1xubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSAmIzQzOz0gaXA2X3R1bm5lbC5vXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICYjNDM7PSBpcDZfZ3JlLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MzkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZSBpbnZlc3RpZ2F0aW9uIGhpbmdlcyBvbiBgQ09ORklHX0lQVjZfVFVOTkVMYCBiZWluZyBlbmFibGVkLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IHNldC4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlndXJhdGlvbnMgdGhhdCBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kLiBCYXNlZCBvbiB3aGF0IEkgaGF2ZSBoZXJlIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIGltcG9ydGFudCBhcyB3ZWxsOiBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgLCBgQ09ORklHX05FVF9JUElQYCwgYW5kIG9mIGNvdXJzZSwgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIG1pZ2h0IGluZmx1ZW5jZSB0aGUgYmVoYXZpb3IsIHNvIHRoZXkgbmVlZCB0byBiZSBrZXB0IGluIG1pbmQuCgpUaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIGRvaW5nIGFuZCBob3cgdGhleSByZWxhdGUuCgpMZXQgbWUganVzdCBkb3VibGUtY2hlY2sgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGNhbiB1c2UgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChkZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2NvcmUvZGV2LmM9NzcwPWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLS1cbm5ldC9jb3JlL2Rldi5jLTgxNy19XG5uZXQvY29yZS9kZXYuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbm5ldC9jb3JlL2Rldi5jLTgxOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5ODgKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKlZlcmlmeWluZyBgbmZ0X2Zsb3dfcm91dGVgIEF2YWlsYWJpbGl0eSoqCgpZZXMsIHRoYXQmIzM5O3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCYjMzk7cyBqdXN0IG1ha2UgYWJzb2x1dGVseSBzdXJlIHRoYXQgdGhlIGBuZnRfZmxvd19yb3V0ZWAgZnVuY3Rpb24sIG9yIHdoYXRldmVyIGl0IGlzLCBpcyBhY3R1YWxseSBleHBvcnRlZC4gR290dGEgZG91YmxlLWNoZWNrIHRoYXQgaXQmIzM5O3MgYXZhaWxhYmxlIGZvciB1c2UuIE5vIHBvaW50IHByb2NlZWRpbmcgaWYgSSYjMzk7bSB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IGlzbiYjMzk7dCBhY2Nlc3NpYmxlLiBHb3R0YSB2ZXJpZnkgdGhhdCBmaXJzdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTF9HUExcXChuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2ND1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMyMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjUwCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMTU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRW50cnkgUG9pbnRzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IHRoZSBpbml0aWFsIHN0YXRlbWVudCBpcyBhY2N1cmF0ZS4gTm93LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBhbGwgcG9zc2libGUgZW50cnkgcG9pbnRzIGludG8gdGhpcyBzZWN0aW9uIG9mIHRoZSBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiBwbGF5IGhlcmUuCgpSaWdodCwgSSBzZWUgdGhhdCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGhhcyBzZXZlcmFsIHN0YXRpYyBjYWxsZWVzOiBgbmZ0X2Zsb3dfcm91dGVgLCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2VgLCBgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2Rldl9wYXRoX2luZm9gLiBUaGF0IG5hcnJvd3MgdGhpbmdzIGRvd24uIEJlY2F1c2UgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYCBoYXMgdGhvc2Ugc3RhdGljIGNhbGxlZXMsIEkgc2VlIHRoYXQgYG5mdF9mbG93X3JvdXRlYCBhbmQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYXJlIHRoZSBtYWluIGVudHJ5IHBvaW50cywgdGhlIGZ1bmN0aW9ucyB0aGF0IGtpY2sgdGhpbmdzIG9mZiwgYW5kIGZyb20gdGhlcmUgd2UgZGl2ZSBkZWVwZXIuCgpCdXQsIGJlZm9yZSBJIG1vdmUgb24sIEkgd2FudCB0byBjb25maXJtIHRoYXQgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgb25seSBjYWxsZWQgZnJvbSB3aGVyZSBJIHRoaW5rIGl0IGlzLiBObyBwb2ludCBpbiBhc3N1bWluZyBhbnl0aGluZyBoZXJlLiBJIHdpbGwgY2hlY2sgZm9yIG90aGVyIHVzZXMgYW5kIHNlZSB3aGF0IEkgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXFwoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmMtMjg5LVx0cmN1X3JlYWRfbG9jaygpO1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XHRlcnIgPSBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBhZGRyLCBcdTAwMjZzdGFjayk7XG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cdHJjdV9yZWFkX2xvY2soKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jOjEwNTpcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFx1MDAyNnN0YWNrKTtcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNi1cdHJjdV9yZWFkX3VubG9jaygpO1xuLS1cbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmg9MzQyOD1pbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuLS1cbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbi0tXG5uZXQvODAyMXEvdmxhbl9kZXYuYy03NjItXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcbi0tXG5uZXQvY29yZS9kZXYuYz03NTM9c3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L2NvcmUvZGV2LmMtNzY5LVxubmV0L2NvcmUvZGV2LmM6NzcwOmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxubmV0L2NvcmUvZGV2LmMtNzcxLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmM9OTc5PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX21vbml0b3JpZl9vcHMgPSB7XG4tLVxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxubmV0L21hYzgwMjExL2lmYWNlLmM6OTg5OnN0YXRpYyBpbnQgaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTQ2LVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03My1vdXQ6XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0Olx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTc1LX1cbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjI5LVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMzA6XHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChkc3QsIGN0LCBkaXIsIGhhLCBcdTAwMjZzdGFjaykgXHUwMDNjIDAgfHxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjMxLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDIwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmaWx0ZXIgRmxvdyBQYXRoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIGZsb3cgcGF0aCwgYXMgSSB1bmRlcnN0YW5kIGl0LiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgYG5mdF9mbG93X3JvdXRlYCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIHRoZSB1bHRpbWF0ZSBjYWxsZXIsIGxlYWRpbmcgaW50byBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLCB0aGVuIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgd2hpY2ggaXMsIGluIGVzc2VuY2UsIHRoZSBmb2NhbCBwb2ludCBvZiB0aGlzIGVudGlyZSBwcm9jZXNzLgoKSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhbHNvIGRpcmVjdGx5IGludm9rZWQgYnkgaGFyZHdhcmUgb2ZmbG9hZCBkcml2ZXJzIGxpa2UgYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AgYW5kIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgbXkgaW5pdGlhbCB0aG91Z2h0IC0gdGhhdCBmdXp6aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGlzIHRoZSByaWdodCBzdHJhdGVneSBmb3IgcHJvYmluZyB0aGlzIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3ZlcnMgYm90aCB0aGUgY29yZSBzb2Z0d2FyZSBwYXRoIGFuZCB0aGUgY3JpdGljYWwgaGFyZHdhcmUgb2ZmbG9hZCBpbnRlcmFjdGlvbnMuCgpOb3csIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgY292ZXJlZCBhbGwgdGhlIGxpa2VseSBwYXRocy4gSSBzZWUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgd2hpY2ggaXMgZXhwZWN0ZWQsIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIGBDT05GSUdfTkVUX0lQSVBgLCBhbmQgYENPTkZJR19JUFY2X1RVTk5FTGAuIFRoZXNlIGFyZSBhbGwgd29ydGggZXhhbWluaW5nIHRvIHNlZSBpZiB0aGV5IGludHJvZHVjZSBhbnkgY29uZGl0aW9uYWwgY29kZSBwYXRocy4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gRW5zdXJpbmcgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciB3aWxsIGJlIGltcG9ydGFudCB3aGVuIGRldmVsb3BpbmcgbXkgZnV6emluZyB0ZXN0IHBsYW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyBhIGZpcnN0LXBlcnNvbiBuYXJyYXRpdmU6CgoqKkNvcmUgTmV0d29ya2luZyBSZXF1aXJlbWVudHMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGNsZWFybHkgcG9pbnRzIHRvIHRoZSBuZWNlc3NpdHkgb2YgYE5GX0NPTk5UUkFDS2AgYW5kIGBORl9GTE9XX1RBQkxFYC4gV2UgY2FuJiMzOTt0IHJlYWxseSBkbyBtdWNoIGFkdmFuY2VkIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBvciBtYW5hZ2VtZW50IHdpdGhvdXQgdGhlc2UuIEkmIzM5O20gdGhpbmtpbmcgb2YgY29ubmVjdGlvbiB0cmFja2luZyBmaXJzdDsgaXQmIzM5O3MgdGhlIGZvdW5kYXRpb24uIFdpdGhvdXQgaXQsIHdlIGxvc2UgdGhlIGFiaWxpdHkgdG8gbWFpbnRhaW4gc3RhdGVmdWwgZmlyZXdhbGxpbmcsIE5BVCBmdW5jdGlvbmFsaXR5LCBhbmQgYWxsIHRoZSBhc3NvY2lhdGVkIGJlbmVmaXRzIG9mIGEgbW9yZSBzb3BoaXN0aWNhdGVkIG5ldHdvcmsgc2V0dXAuIFdlJiMzOTtkIGJhc2ljYWxseSBiZSBzdHVjayB3aXRoIGEgcGFja2V0LWJ5LXBhY2tldCB2aWV3LCBhbmQgZnJhbmtseSwgdGhhdCYjMzk7cyBqdXN0IG5vdCBnb2luZyB0byBjdXQgaXQgaW4gYW55IG5vbi10cml2aWFsIGVudmlyb25tZW50LiBUaGVuLCBgTkZfRkxPV19UQUJMRWAgaXMgZXNzZW50aWFsIGZvciBwZXJmb3JtYW5jZSBhdCBzY2FsZS4gSXQgb2ZmZXJzIGhhcmR3YXJlIGZsb3cgb2ZmbG9hZCBjYXBhYmlsaXRpZXMsIGFjY2VsZXJhdGVzIHByb2Nlc3NpbmcsIGFuZCBkcmFzdGljYWxseSByZWR1Y2VzIENQVSBvdmVyaGVhZC4gU28sIHllYWgsIEkmIzM5O20gYWxyZWFkeSBzZWVpbmcgdGhlIHByYWN0aWNhbCBpbXBsaWNhdGlvbnMg4oCTIHdlIG5lZWQgYm90aCBvZiB0aGVzZS4gT3RoZXJ3aXNlLCB3ZSYjMzk7cmUgYnVpbGRpbmcgb24gc2FuZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY5ODUKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKk5GX0ZMT1dfVEFCTEUgYW5kIGl0cyBSZWxhdGlvbnNoaXAgdG8gTkZfQ09OTlRSQUNLKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgYE5GX0ZMT1dfVEFCTEVgLiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgdGhhdCBpdHMgZXhpc3RlbmNlIGFuZCBmdW5jdGlvbmFsaXR5IGFyZSBmdW5kYW1lbnRhbGx5IGxpbmtlZCB0byBgTkZfQ09OTlRSQUNLYC4gSSBtZWFuLCBJJiMzOTttIGFuYWx5emluZyB0aGlzIGRlcGVuZGVuY3kgYW5kIGl0JiMzOTtzIG9idmlvdXMuIGBORl9GTE9XX1RBQkxFYCBpcyBidWlsZGluZyB1cG9uIHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGZyYW1ld29yay4gV2l0aG91dCB0aGUgY29ubmVjdGlvbiB0cmFja2luZyBpbmZyYXN0cnVjdHVyZSBwcm92aWRlZCBieSBgTkZfQ09OTlRSQUNLYCwgYE5GX0ZMT1dfVEFCTEVgIHdvdWxkbiYjMzk7dCBiZSBhYmxlIHRvIGRvIGFueXRoaW5nIHVzZWZ1bC4gSXQgcmVsaWVzIG9uIHRoZSBzdGF0ZSBpbmZvcm1hdGlvbiBhbmQgY29ubmVjdGlvbiBtZXRhZGF0YSB0aGF0IGBORl9DT05OVFJBQ0tgIG1hbmFnZXMuIFRoZXJlZm9yZSwgYW55IGFuYWx5c2lzLCBtb2RpZmljYXRpb24gb3IgZGVzaWduIGNvbnNpZGVyYXRpb25zIHJlbGF0ZWQgdG8gYE5GX0ZMT1dfVEFCTEVgIG11c3QgaW5oZXJlbnRseSBhY2NvdW50IGZvciBhbmQgdGhvcm91Z2hseSB1bmRlcnN0YW5kIGhvdyBgTkZfQ09OTlRSQUNLYCBvcGVyYXRlcy4gVGhleSYjMzk7cmUgaW5leHRyaWNhYmx5IGludGVydHdpbmVkLCBhbmQgYW55IGNoYW5nZXMgdG8gb25lIHdpbGwgdW5kb3VidGVkbHkgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdGhlci4gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBhcmNoaXRlY3R1cmFsIGRlcGVuZGVuY3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWc9NzAzPWNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzMxOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gTmV0ZmlsdGVyJiMzOTtzIENvbmZpZ3VyYXRpb24qKgoKT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSYjMzk7bSBoZWFkaW5nIGRpcmVjdGx5IHRvIHRoZSBzb3VyY2UuIFRoZSBLY29uZmlnIGZpbGVzIGFyZSB0aGUgbGlmZWJsb29kIG9mIExpbnV4IGNvbmZpZ3VyYXRpb24sIGFuZCBJJiMzOTttIGhvbWluZyBpbiBvbiBgbmV0L25ldGZpbHRlci9LY29uZmlnYCBhcm91bmQgbGluZSA3MTEuIFRoYXQgbGluZSwgZ2l2ZSBvciB0YWtlIGEgZmV3LCBsaWtlbHkgaG9sZHMgdGhlIGtleSB0byB0aGUgc2V0dGluZyBJJiMzOTttIHRyeWluZyB0byBkZWNpcGhlciBvciBtb2RpZnkuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIGRlZmluaXRpb24sIHBvdGVudGlhbGx5IHNvbWUgZGVwZW5kZW5jaWVzLCBtYXliZSBldmVuIGEgaGVscCB0ZXh0IHRoYXQmIzM5O3Mgd29ydGggYSBxdWljayBzY2FuLiBUaGlzIGlzIHdoZXJlIHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBmZWF0dXJlIGxpdmVzLCBhbmQgdW5kZXJzdGFuZGluZyB0aGlzIHNlY3Rpb24gaXMgY3JpdGljYWwuIEkmIzM5O20gYnJhY2luZyBteXNlbGYgZm9yIHRoZSB1c3VhbCBLY29uZmlnIHN5bnRheCDigJMgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSB0eXBlIGRlY2xhcmF0aW9uLCBtYXliZSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xlYXIsIGNvbmNpc2UgZG9jdW1lbnRhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0IHRyZWFzdXJlcyBhd2FpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDcwMDpcdFxuIDcwMTpcdGVuZGlmICMgTkZfVEFCTEVTXG4gNzAyOlx0XG4gNzAzOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxuIDcwNDpcdFx0dHJpc3RhdGUgXCYjMzQ7TmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVwmIzM0O1xuIDcwNTpcdFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXG4gNzA2Olx0XHRoZWxwXG4gNzA3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXG4gNzA4Olx0XG4gNzA5Olx0XHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXG4gNzEwOlx0XG4gNzExOlx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbiA3MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuIDcxMzpcdFx0ZGVwZW5kcyBvbiBORVRGSUxURVJfSU5HUkVTU1xuIDcxNDpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA3MTU6XHRcdGRlcGVuZHMgb24gTkZfVEFCTEVTXG4gNzE2Olx0XHRoZWxwXG4gNzE3Olx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgY29yZSBpbmZyYXN0cnVjdHVyZS5cbiA3MTg6XHRcbiA3MTk6XHRcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc4NjEKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHByZWxpbWluYXJ5IHRob3VnaHRzLCBleHByZXNzZWQgYXMgYSBzdW1tYXJ5IGluIHRoZSBmaXJzdCBwZXJzb24sIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqTmV0d29yayBGaWx0ZXIgTW9kdWxlIERlcGVuZGVuY2llcyAmYW1wOyBJbml0aWFsIEludmVzdGlnYXRpb25zKioKClJpZ2h0LCBsZXQmIzM5O3MgdGFrZSBzdG9jay4gR2l2ZW4gdGhlIGFyY2hpdGVjdHVyZSBJJiMzOTttIHdvcmtpbmcgd2l0aCwgSSYjMzk7bSBwcmV0dHkgY2VydGFpbiB0aGF0IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AgYXJlIGdvaW5nIHRvIGJlIGFic29sdXRlbHkgZXNzZW50aWFsLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0cmFmZmljIGluZ3Jlc3MgZmlsdGVyaW5nLCBjb25uZWN0aW9uIHRyYWNraW5nLCBhbmQgdGhlIHVuZGVybHlpbmcgaW5mcmFzdHJ1Y3R1cmUgb2YgdGhlIG5ldGZpbHRlciBzdWJzeXN0ZW0sIHJlc3BlY3RpdmVseS4gQWxsIHByZXR0eSBmdW5kYW1lbnRhbCBpbiBtb3N0IG1vZGVybiBzZXR1cHMuCgpOb3csIGJlZm9yZSBkaWdnaW5nIGluIHRvbyBkZWVwbHksIGxldCYjMzk7cyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCB3ZSYjMzk7bGwgbmVlZCBgTkVUX0lQSVBgLiBXZSYjMzk7bGwga25vdyBwcmV0dHkgcXVpY2tseSBvbmUgd2F5IG9yIHRoZSBvdGhlciBpZiB0aGF0IG5lZWRzIHRvIGJlIGJyb3VnaHQgaW50byB0aGUgZXF1YXRpb24uIEl0JiMzOTtzIGEga2V5IG1vZHVsZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgd2UgbmVlZCB0byB0aGluayBhYm91dCBhbGwgb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5FVF9JUElQJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L0tjb25maWc9MTQ5PWNvbmZpZyBJUF9QTlBfUkFSUFxuLS1cbm5ldC9pcHY0L0tjb25maWctMTYxLVxubmV0L2lwdjQvS2NvbmZpZzoxNjI6Y29uZmlnIE5FVF9JUElQXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgxOTAKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRpdmluZyBpbnRvIGBuZXQvaXB2NC9LY29uZmlnYCoqCgpPa2F5LCB0aW1lIHRvIGdldCBzcGVjaWZpYy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBrZXJuZWwgY29uZmlndXJhdGlvbiBzcGFjZSBiZXR0ZXIsIGFuZCBJIHRoaW5rIEkmIzM5O2xsIGZpbmQgc29tZSBhbnN3ZXJzIHdpdGhpbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSYjMzk7bSB3b3JraW5nIG9uLCBJIG5lZWQgdG8gbG9vayBhdCBhIHBhcnRpY3VsYXIgc2VjdGlvbiB3aXRoaW4gdGhpcyBmaWxlLiBMZXQmIzM5O3Mgc3RhcnQgYXJvdW5kIGxpbmUgMTYyLiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCByZWxldmFudCBleHBlcnQgdG9waWMgYXJlYV0uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2lwdjQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE1NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTU1Olx0XHQgIG5ldCB2aWEgTkZTIGFuZCB5b3Ugd2FudCB0aGUgSVAgYWRkcmVzcyBvZiB5b3VyIGNvbXB1dGVyIHRvIGJlXG4gMTU2Olx0XHQgIGRpc2NvdmVyZWQgYXV0b21hdGljYWxseSBhdCBib290IHRpbWUgdXNpbmcgdGhlIFJBUlAgcHJvdG9jb2wgKGFuXG4gMTU3Olx0XHQgIG9sZGVyIHByb3RvY29sIHdoaWNoIGlzIGJlaW5nIG9ic29sZXRlZCBieSBCT09UUCBhbmQgREhDUCksIHNheSBZXG4gMTU4Olx0XHQgIGhlcmUuIE5vdGUgdGhhdCBpZiB5b3Ugd2FudCB0byB1c2UgUkFSUCwgYSBSQVJQIHNlcnZlciBtdXN0IGJlXG4gMTU5Olx0XHQgIG9wZXJhdGluZyBvbiB5b3VyIG5ldHdvcmsuIFJlYWRcbiAxNjA6XHRcdCAgXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL25mcy9uZnNyb290LnJzdFx1MDAzZSBmb3IgZGV0YWlscy5cbiAxNjE6XHRcbiAxNjI6XHRjb25maWcgTkVUX0lQSVBcbiAxNjM6XHRcdHRyaXN0YXRlIFwmIzM0O0lQOiB0dW5uZWxpbmdcJiMzNDtcbiAxNjQ6XHRcdHNlbGVjdCBJTkVUX1RVTk5FTFxuIDE2NTpcdFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcbiAxNjY6XHRcdGhlbHBcbiAxNjc6XHRcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cbiAxNjg6XHRcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxuIDE2OTpcdFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXG4gMTcwOlx0XHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxuIDE3MTpcdFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxuIDE3MjpcdFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxuIDE3MzpcdFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxuIDE3NDpcdFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NzYxCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6CgoqKkNoZWNraW5nIGZvciBJUHY2IFR1bm5lbCBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBrZWVwIGl0IGNsZWFuIGFuZCBlZmZpY2llbnQuIE5vIG5lZWQgdG8gYnJpbmcgaW4gYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBwYWNrYWdlcyByaWdodCBub3c7IHRoYXQganVzdCBhZGRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIEkgd2FudCB0aGlzIGFzIHN0cmVhbWxpbmVkIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIGFzc2VzcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCYjMzk7cyBJUHY2IHR1bm5lbGluZyBzaXR1YXRpb24uIFRoZSBmaXJzdCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2hlY2sgdGhlIGBJUFY2X1RVTk5FTGAgc2V0dGluZy4gVGhpcyBzZWVtcyBsaWtlIHRoZSBvYnZpb3VzIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga25vdyBpZiBhbiBJUHY2IHR1bm5lbCBpcyBhbHJlYWR5IGNvbmZpZ3VyZWQsIG9yIGF0IGxlYXN0IGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZW5hYmxlZC4gVGhhdCYjMzk7cyB0aGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBJUFY2X1RVTk5FTCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnPTE5Nj1jb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuLS1cbm5ldC9pcHY2L0tjb25maWctMTk4LVxubmV0L2lwdjYvS2NvbmZpZzoxOTk6Y29uZmlnIElQVjZfVFVOTkVMXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cdHRyaXN0YXRlIFwmIzM0O0lQdjY6IElQLWluLUlQdjYgdHVubmVsIChSRkMyNDczKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA0NgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIHRoZSBJUHY2IENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBzdHVmZiBhbmQgSSB0aGluayBJJiMzOTtsbCBzdGFydCBieSBmb2N1c2luZyBvbiBgbmV0L2lwdjYvS2NvbmZpZ2AuIFNwZWNpZmljYWxseSwgYXJvdW5kIGxpbmUgMTk5LiBUaGF0IHNlZW1zIGxpa2UgYSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luLCBob3BlZnVsbHksIGl0JiMzOTtzIHdoZXJlIHRoZSBjb3JlIElQdjYgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBkZWZpbmVkLiBUaGlzIGBLY29uZmlnYCBmaWxlIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCByaWdodD8gU28sIHRoaXMgaXMgd2hlcmUgYWxsIHRoZSBpbnRlcmVzdGluZyBkZWNpc2lvbnMgcmVsYXRlZCB0byBJUHY2IHNob3VsZCBiZSBoYW5naW5nIG91dC4gVGltZSB0byBzZWUgd2hhdCBraW5kIG9mIGtub2JzIHdlIGhhdmUgdG8gdHdlYWsgaW4gdGhpcyBhcmVhLiBIb3BlZnVsbHksIGl0JiMzOTtzIGxhaWQgb3V0IGluIGEgY2xlYXIsIHNlbnNpYmxlIG1hbm5lciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvaXB2Ni9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRcbiAxOTY6XHRjb25maWcgSVBWNl9ORElTQ19OT0RFVFlQRVxuIDE5NzpcdFx0Ym9vbFxuIDE5ODpcdFxuIDE5OTpcdGNvbmZpZyBJUFY2X1RVTk5FTFxuIDIwMDpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXCYjMzQ7XG4gMjAxOlx0XHRzZWxlY3QgSU5FVDZfVFVOTkVMXG4gMjAyOlx0XHRzZWxlY3QgRFNUX0NBQ0hFXG4gMjAzOlx0XHRzZWxlY3QgR1JPX0NFTExTXG4gMjA0Olx0XHRoZWxwXG4gMjA1Olx0XHQgIFN1cHBvcnQgZm9yIElQdjYtaW4tSVB2NiBhbmQgSVB2NC1pbi1JUHY2IHR1bm5lbHMgZGVzY3JpYmVkIGluXG4gMjA2Olx0XHQgIFJGQyAyNDczLlxuIDIwNzpcdFxuIDIwODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDIwOTpcdFxuIDIxMDpcdGNvbmZpZyBJUFY2X0dSRVxuIDIxMTpcdFx0dHJpc3RhdGUgXCYjMzQ7SVB2NjogR1JFIHR1bm5lbFwmIzM0O1xuIDIxMjpcdFx0c2VsZWN0IElQVjZfVFVOTkVMXG4gMjEzOlx0XHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxuIDIxNDpcdFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDEKCQkJCQkJCW91dHB1dDogMjIKCQkJCQkJCXRob3VnaHRzOiAxNjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmxvdyBPZmZsb2FkaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBrZXJuZWwgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBmbG93IG9mZmxvYWRpbmcsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZSBldmVyeXRoaW5nIEkgbmVlZC4gTm8gc3BlY2lhbCBkZXBlbmRlbmNpZXMsIHdoaWNoIGlzIGdvb2Qg4oCTIGl0IHNpbXBsaWZpZXMgdGhpbmdzLiBSaWdodCBub3csIEkmIzM5O20gd29ya2luZyB3aXRoIHRoZXNlIGNvbmZpZ3MgaW4gcGFydGljdWxhcjogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgYmFzZSB0byBnZXQgc3RhcnRlZC4KCk15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIGBORlRfRkxPV19PRkZMT0FEYCBhbG9uZSBpcyBzdWZmaWNpZW50IGZvciB3aGF0IEkmIzM5O20gdHJ5aW5nIHRvIGFjaGlldmUuIEkmIzM5O20gd29uZGVyaW5nIGlmIEkgYWxzbyBuZWVkIHRvIGJyaW5nIGluIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZXBlbmRpbmcgb24gd2hhdCBJIGhhdmUgYXZhaWxhYmxlIGFuZCBpZiBpdCBpcyBuZWVkZWQgZm9yIG15IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBNeSB0aG91Z2h0cyBhcmUgZm9jdXNpbmcgYXJvdW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEl0JiMzOTtzIGNsZWFyIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBkcml2ZXIsIHRoZSBjb3JlIGV4cHJlc3Npb24uIE1lYW53aGlsZSwgYE5GX0ZMT1dfVEFCTEVgIGlzIHRoZSBmdW5kYW1lbnRhbCBiYXNlLiBBbmQgdGhlbiBJIG5lZWQgdG8gY29uc2lkZXIgYE5GX0ZMT1dfVEFCTEVfSU5FVGAsIHdoaWNoIEkgYmVsaWV2ZSBoYW5kbGVzIG1peGVkIElQdjQvSVB2NiBzY2VuYXJpb3MuIFRoZXJlJiMzOTtzIGFsc28gdGhlIHBvc3NpYmlsaXR5IG9mIHNlcGFyYXRlIG1vZHVsZXMgbGlrZSBgTkZfRkxPV19UQUJMRV9JUFY0YCBhbmQgYE5GX0ZMT1dfVEFCTEVfSVBWNmAsIHdoaWNoIGNvdWxkIGJlIHJlbGV2YW50IGRlcGVuZGluZyBvbiB0aGUgdGFyZ2V0IHN5c3RlbS4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIG9mIHRoZXNlIG1vZHVsZXMgdG8gZW5zdXJlIG9wdGltYWwgcGVyZm9ybWFuY2UgYW5kIGNvbXBhdGliaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNCAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFX0lQViYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMDY3CgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqS2NvbmZpZyBDaGVjay1JbioqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGBuZXQvbmV0ZmlsdGVyL0tjb25maWdgLiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgcmV2aWV3IGl0IGFnYWluLCBlbnN1cmluZyBubyBzaWduaWZpY2FudCBjaGFuZ2VzIGhhdmUgc2xpcHBlZCBpbiB1bm5vdGljZWQgc2luY2UgdGhlIGxhc3Qgc3dlZXAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgSSYjMzk7bSBmYW1pbGlhciB3aXRoLCBwZXJoYXBzIG5ldyBkZXBlbmRlbmNpZXMsIG9yIHJlZ3Jlc3Npb25zIGluIGV4aXN0aW5nIG9wdGlvbnMuIEdpdmVuIHRoZSBzY29wZSBvZiBuZXRmaWx0ZXIsIGFuZCB0aGUgaW50ZXJjb25uZWN0ZWRuZXNzIG9mIHZhcmlvdXMgc3ViLW1vZHVsZXMsIGEgZnJlc2ggbG9vayBpcyBhbHdheXMgd2FycmFudGVkLCBldmVuIGlmIEkgKnRoaW5rKiBJJiMzOTt2ZSBnb3QgYSBoYW5kbGUgb24gdGhlIHJlY2VudCBtb2RpZmljYXRpb25zLiBJdOKAmXMgYWJvdXQgZW5zdXJpbmcgc3RhYmlsaXR5IGFuZCBhbnRpY2lwYXRpbmcgYW55IHBvdGVudGlhbCBpbnRlZ3JhdGlvbiBpc3N1ZXMgZG93biB0aGUgbGluZS4gSXQgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIGEgdGhvcm91Z2ggcmV2aWV3IG9mIHRoZSBLY29uZmlnIGlzIGtleSB0byBtYWludGFpbmluZyBvdXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgYnJvYWRlciBhcmNoaXRlY3R1cmUgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORl9GTE9XX1RBQkxFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzAzOmNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXCYjMzQ7XG4tLVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXHR0cmlzdGF0ZSBcJiMzNDtOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjItXHRib29sIFwmIzM0O1N1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDk5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTA2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IENvbmZpZ3VyYXRpb24gQ2hlY2tsaXN0KioKCk9rYXksIHNvIEkmIzM5O20gZm9jdXNpbmcgb24gZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gRmlyc3QsIEkmIzM5O2xsIGV4cGxpY2l0bHkgaW5jbHVkZSBgTkZfRkxPV19UQUJMRV9JTkVUYCwganVzdCB0byBiZSBjZXJ0YWluLiBDYW4mIzM5O3QgaHVydCB0byBjb3ZlciBhbGwgYmFzZXMgYW5kIGVuc3VyZSB0aGF0IHRoZSBpbmV0IHRhYmxlIGlzIHRoZXJlLgoKTm93LCB0byBtYWtlIHN1cmUgSSYjMzk7dmUgZ290IGEgY29tcHJlaGVuc2l2ZSBzZXQgb2YgY29uZmlndXJhdGlvbnMgdG8gcmV2aWV3LCBJJiMzOTtsbCBnbyB0aHJvdWdoIHRoZSBwZXJ0aW5lbnQgY29uZmlncy4gSSBuZWVkIHRvIHRoaW5rIHRocm91Z2g6CgoqICAgYE5GX0ZMT1dfVEFCTEVgIC0gVGhlIGJhc2UgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LCBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuCiogICBgTkZUX0ZMT1dfT0ZGTE9BRGAgLSBUaGlzIGlzIHRoZSBjZW50cmFsIHBpZWNlLCB0aGUgdGFyZ2V0IEkmIzM5O20gYWltaW5nIGZvci4KKiAgIGBORVRfSVBJUGAgLSBJcyB0aGlzIGdvaW5nIHRvIG1hdHRlcj8gQ291bGQgYmUgaWYgSSBoYXZlIGZsb3dzIGdvaW5nIHRvIG9yIGZyb20gYSB0dW5uZWwuCiogICBgSVBWNl9UVU5ORUxgIC0gU2FtZSB0aG91Z2h0IHByb2Nlc3MgYXMgdGhlIElQdjQgdHVubmVsLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRoaXMgd2hlbiBjb25zaWRlcmluZyBteSBmbG93IHJ1bGVzLgoqICAgYE5FVEZJTFRFUl9JTkdSRVNTYCAtIEluZ3Jlc3MgZmlsdGVyaW5nIGlzIGltcG9ydGFudCwgc28gdGhpcyBzaG91bGQgYmUgZmluZS4KKiAgIGBORl9DT05OVFJBQ0tgIC0gQ29ubmVjdGlvbiB0cmFja2luZywgZXNzZW50aWFsIGZvciBhbnkgc3RhdGVmdWwgb3BlcmF0aW9ucyBhbmQgdG8gYXZvaWQgd2VpcmQgYmVoYXZpb3IuCiogICBgTkZfVEFCTEVTYCAtIFRoZSBmb3VuZGF0aW9uIGZvciBuZXRmaWx0ZXIgdGFibGVzLCBzbyBpdCYjMzk7cyBjcml0aWNhbC4KCkkmIzM5O2xsIGFsc28gaGF2ZSB0byBkaXZlIGRlZXBlciBhbmQgc2VlIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMgdGhhdCBhcmVuJiMzOTt0IGltbWVkaWF0ZWx5IG9idmlvdXMuIE5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvbmV0ZmlsdGVyL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ5ODpcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcbiA0OTk6XHRcdGJvb2wgXCYjMzQ7TmV0ZmlsdGVyIG5mX3RhYmxlcyBleHRoZHIgRENDUCBzdXBwb3J0IChERVBSRUNBVEVEKVwmIzM0O1xuIDUwMDpcdFx0ZGVmYXVsdCBuXG4gNTAxOlx0XHRoZWxwXG4gNTAyOlx0XHQgIFRoaXMgb3B0aW9uIGFkZHMgc3VwcG9ydCBmb3IgbWF0Y2hpbmcgb24gRENDUCBleHRlbnNpb24gaGVhZGVycy5cbiA1MDM6XHRcbiA1MDQ6XHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxuIDUwNTpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiA1MDY6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVwmIzM0O1xuIDUwNzpcdFx0aGVscFxuIDUwODpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtmbG93X29mZmxvYWRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4gNTA5Olx0XHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXG4gNTEwOlx0XG4gNTExOlx0Y29uZmlnIE5GVF9DT05OTElNSVRcbiA1MTI6XHRcdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBuZl90YWJsZXMgY29ubmxpbWl0IG1vZHVsZVwmIzM0O1xuIDUxMzpcdFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcbiA1MTQ6XHRcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXG4gNTE1Olx0XHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxuIDUxNjpcdFx0aGVscFxuIDUxNzpcdFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcJiMzNDtjb25ubGltaXRcJiMzNDsgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI0IDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxMjY5CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDM0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCBQYXRjaCBmb3IgRnV6emluZyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lOiBgTkZfQ09OTlRSQUNLYCBhbmQgYE5GX0ZMT1dfVEFCTEVgLiBUaG9zZSBhcmUgdGhlIGNyaXRpY2FsIHBpZWNlcyB0byB1bmRlcnN0YW5kLgoKRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhlIGNvcmUgZnVuY3Rpb25zIEkgbmVlZCB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIFRoZSBmYWN0IHRoYXQgdGhlc2UgYXJlIGV4cG9ydGVkLCBub3Qgc3RhdGljLCBpcyBpbXBvcnRhbnQsIGl0IG1ha2VzIHRoZW0gZWFzaWx5IHJlYWNoYWJsZS4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXMgYSBmdW5kYW1lbnRhbCBjb3JlIG5ldHdvcmtpbmcgZnVuY3Rpb24sIHdoaWxlIGBuZnRfZmxvd19yb3V0ZWAgc2l0cyBzcXVhcmVseSBpbiB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgc3BhY2UuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnOiBmYWlsaW5nIHRvIHJlbGVhc2UgdGhlIGBkc3RgIHdoZW4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgZW5jb3VudGVycyBhbiBpc3N1ZS4gVGhlbiB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsOiB0aGUgY29kZSB1cGRhdGVzIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgdG8gYXZvaWQgY2FsbGluZyBgbmZfcm91dGVgIGJ5IGxldmVyYWdpbmcgdGhlIGBkc3RgIGVudHJ5LiBUaGF0JiMzOTtzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpHaXZlbiB0aGF0IHRoZXNlIGZ1bmN0aW9ucyB0b3VjaCBib3RoIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciwgYW5kIHRoZSBwYXRjaCBtb2RpZmllcyBob3cgdGhleSBpbnRlcmFjdCwgdGhpcyBpcyAqZGVmaW5pdGVseSogd29ydGggZnV6emluZy4gVGhlIHBhdGNoIGlzIHRvdWNoaW5nIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIGNvZGUgd2l0aCBmdW5jdGlvbmFsIGNoYW5nZXMuCgpTbywgdG8gcHJlcGFyZSwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYG5mdF9mbG93X3JvdXRlYC4gSSBhbHNvIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSByZWxldmFudCBrZXJuZWwgY29uZmlncyBhcmUgZW5hYmxlZDogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFRoaXMgc2hvdWxkIGdldCB0aGUgcmVsZXZhbnQgcGFydHMgb2YgdGhlIGNvZGUgY29tcGlsZWQgaW4uIFRoaXMgaW5jbHVkZXMgdGhlIElQL0lQdjYgdHVubmVsIGNvZGUgYW5kIHRoZSBuZXRmaWx0ZXIgb2ZmbG9hZCBwYXRoLiBUaGlzIHNob3VsZCBnZXQgbWUgYSBnb29kIGZ1enppbmcgc2V0dXAgdG8gdW5jb3ZlciBhbnkgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjQgMjM6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtORVRfSVBJUCYjMzQ7LAogICAgJiMzNDtJUFY2X1RVTk5FTCYjMzQ7LAogICAgJiMzNDtORVRGSUxURVJfSU5HUkVTUyYjMzQ7LAogICAgJiMzNDtORl9DT05OVFJBQ0smIzM0OywKICAgICYjMzQ7TkZfVEFCTEVTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7TkVUX0lQSVAmIzM0OywKICAgICYjMzQ7SVBWNl9UVU5ORUwmIzM0OywKICAgICYjMzQ7TkVURklMVEVSX0lOR1JFU1MmIzM0OywKICAgICYjMzQ7TkZfQ09OTlRSQUNLJiMzNDssCiAgICAmIzM0O05GX1RBQkxFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2Rldl9maWxsX2ZvcndhcmRfcGF0aCYjMzQ7LAogICAgJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjQ1LjAwNTUzMTIzNFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODkzNjkwNjc0MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NDUuMDA1NTQxNzg0WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDE3MTcwMDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1bCAyNCAyMzowNDo0MiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zMGRjNzhiNGYxYTM4OCAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxcbkBAIC05MDIsNiArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XFxuIFxcdFxcdFxcdH07XFxuIFxcbiBcXHRcXHRcXHR1OFxcdGwzX3Byb3RvO1xcbitcXHRcXHRcXHRzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7XFxuIFxcdFxcdH0gdHVuO1xcbiBcXHRcXHRzdHJ1Y3Qge1xcbiBcXHRcXHRcXHRlbnVtIHtcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IGMxYzFiZTFhNjk2MmZlLi5mZWQxMDFmNTRhOGEzNCAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw2ICs3NTAsMjMgQEAgc3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKmRldl9md2RfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4gXFx0cmV0dXJuIFxcdTAwMjZzdGFjay1cXHUwMDNlcGF0aFtrXTtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4rXFx0aW50IGs7XFxuK1xcbitcXHRmb3IgKGsgPSBzdGFjay1cXHUwMDNlbnVtX3BhdGhzOyBrIFxcdTAwM2U9IDA7IGstLSkge1xcbitcXHRcXHRwYXRoID0gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2tdO1xcbitcXHRcXHRzd2l0Y2ggKHBhdGgtXFx1MDAzZXR5cGUpIHtcXG4rXFx0XFx0Y2FzZSBERVZfUEFUSF9UVU46XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHBhdGgtXFx1MDAzZXR1bi5kc3QpO1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0ZGVmYXVsdDpcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4ge1xcbkBAIC03NjUsMjggKzc4MiwzOCBAQCBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG4gXFx0d2hpbGUgKGN0eC5kZXYgXFx1MDAyNlxcdTAwMjYgY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKSB7XFxuIFxcdFxcdGxhc3RfZGV2ID0gY3R4LmRldjtcXG4gXFx0XFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XFxuLVxcdFxcdGlmICghcGF0aClcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoIXBhdGgpIHtcXG4rXFx0XFx0XFx0cmV0ID0gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7XFxuIFxcdFxcdHJldCA9IGN0eC5kZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcXHUwMDI2Y3R4LCBwYXRoKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLVxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcXG4tXFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKSB7XFxuK1xcdFxcdFxcdHJldCA9IC0xO1xcbitcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0aWYgKCFjdHguZGV2KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4tXFx0aWYgKCFwYXRoKVxcbi1cXHRcXHRyZXR1cm4gLTE7XFxuK1xcdGlmICghcGF0aCkge1xcbitcXHRcXHRyZXQgPSAtMTtcXG4rXFx0XFx0Z290byBlcnJfb3V0O1xcbitcXHR9XFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4gXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4gXFxuLVxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxuK1xcbitcXHRyZXR1cm4gLTE7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4gXFxuZGlmZiAtLWdpdCBhL25ldC9pcHY0L2lwaXAuYyBiL25ldC9pcHY0L2lwaXAuY1xcbmluZGV4IGQxYWEwNDhhNjA5OWNjLi4wYTRmYTEzNTFkZDc2OCAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2NC9pcGlwLmNcXG4rKysgYi9uZXQvaXB2NC9pcGlwLmNcXG5AQCAtMzcwLDEwICszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlc2FkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5kc3RfdjQuc19hZGRyID0gdGlwaC1cXHUwMDNlZGFkZHI7XFxuIFxcdHBhdGgtXFx1MDAzZXR1bi5sM19wcm90byA9IElQUFJPVE9fSVBJUDtcXG4rXFx0cGF0aC1cXHUwMDNldHVuLmRzdCA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbiBcXHRwYXRoLVxcdTAwM2VkZXYgPSBjdHgtXFx1MDAzZWRldjtcXG4gXFxuIFxcdGN0eC1cXHUwMDNlZGV2ID0gcnQtXFx1MDAzZWRzdC5kZXY7XFxuLVxcdGlwX3J0X3B1dChydCk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmMgYi9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uMzEyZGU0YTZlMTYwYzcgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuKysrIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXFxuQEAgLTE4NjQsMTIgKzE4NjQsMTIgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxuIFxcdFxcdHBhdGgtXFx1MDAzZXR1bi5zcmNfdjYgPSB0LVxcdTAwM2VwYXJtcy5sYWRkcjtcXG4gXFx0XFx0cGF0aC1cXHUwMDNldHVuLmRzdF92NiA9IHQtXFx1MDAzZXBhcm1zLnJhZGRyO1xcbiBcXHRcXHRwYXRoLVxcdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQVjY7XFxuK1xcdFxcdHBhdGgtXFx1MDAzZXR1bi5kc3QgPSBkc3Q7XFxuIFxcdFxcdHBhdGgtXFx1MDAzZWRldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRjdHgtXFx1MDAzZWRldiA9IGRzdC1cXHUwMDNlZGV2O1xcbiBcXHR9XFxuIFxcbiBcXHRlcnIgPSBkc3QtXFx1MDAzZWVycm9yO1xcbi1cXHRkc3RfcmVsZWFzZShkc3QpO1xcbiBcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcXG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuKysrIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY1xcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLVxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbiBcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuLVxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICppbmRldjtcXG4tXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKm91dGRldjtcXG4rXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcXG4gXFx0c3RydWN0IGlkIHtcXG4gXFx0XFx0X191MTZcXHRpZDtcXG4gXFx0XFx0X19iZTE2XFx0cHJvdG87XFxuIFxcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xcbiBcXHR1OCBudW1fZW5jYXBzO1xcbiBcXHRzdHJ1Y3QgZmxvd19vZmZsb2FkX3R1bm5lbCB0dW47XFxuK1xcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XFxuIFxcdHU4IG51bV90dW5zO1xcbiBcXHR1OCBpbmdyZXNzX3ZsYW5zO1xcbiBcXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XFxuQEAgLTkyLDkgKzkxLDEyIEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcXG4gXFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcXG4gfTtcXG4gXFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KTtcXG4rXFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8sXFxuLVxcdFxcdFxcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcXG4rXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbiB7XFxuIFxcdGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XFxuIFxcdGludCBpO1xcbkBAIC0xMDksNyArMTExLDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1BQUE9FOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1RVTjpcXG4tXFx0XFx0XFx0aW5mby1cXHUwMDNlaW5kZXYgPSBwYXRoLVxcdTAwM2VkZXY7XFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZWRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2VoX3NvdXJjZSkpXFxuIFxcdFxcdFxcdFxcdG1lbWNweShpbmZvLVxcdTAwM2VoX3NvdXJjZSwgcGF0aC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG5AQCAtMTIzLDE1ICsxMjUsMTYgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0LyogREVWX1BBVEhfVkxBTiwgREVWX1BBVEhfUFBQT0UgYW5kIERFVl9QQVRIX1RVTiAqL1xcbiBcXHRcXHRcXHRpZiAocGF0aC1cXHUwMDNldHlwZSA9PSBERVZfUEFUSF9UVU4pIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV90dW5zKVxcbi1cXHRcXHRcXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFxuIFxcdFxcdFxcdFxcdGluZm8tXFx1MDAzZXR1bi5zcmNfdjYgPSBwYXRoLVxcdTAwM2V0dW4uc3JjX3Y2O1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cXHUwMDNldHVuLmRzdF92NjtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNldHVuLmwzX3Byb3RvID0gcGF0aC1cXHUwMDNldHVuLmwzX3Byb3RvO1xcbitcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2V0dW5fZHN0ID0gcGF0aC1cXHUwMDNldHVuLmRzdDtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlbnVtX3R1bnMrKztcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpXFxuLVxcdFxcdFxcdFxcdFxcdHJldHVybiAtMTtcXG4rXFx0XFx0XFx0XFx0XFx0Z290byBlcnJfb3V0O1xcbiBcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlZW5jYXBbaW5mby1cXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxcbiBcXHRcXHRcXHRcXHRcXHRwYXRoLVxcdTAwM2VlbmNhcC5pZDtcXG5AQCAtMTUyLDEzICsxNTUsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2VicmlkZ2Uudmxhbl9tb2RlKSB7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmdyZXNzX3ZsYW5zIHw9IEJJVChpbmZvLVxcdTAwM2VudW1fZW5jYXBzIC0gMSk7XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRcXHRjYXNlIERFVl9QQVRIX0JSX1ZMQU5fVEFHOlxcbiBcXHRcXHRcXHRcXHRpZiAoaW5mby1cXHUwMDNlbnVtX2VuY2FwcyBcXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX2lkO1xcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9IHBhdGgtXFx1MDAzZWJyaWRnZS52bGFuX3Byb3RvO1xcbkBAIC0xNjYsNyArMTY5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdFxcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcXG4gXFx0XFx0XFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgPT0gMClcXG4tXFx0XFx0XFx0XFx0XFx0cmV0dXJuIC0xO1xcbitcXHRcXHRcXHRcXHRcXHRnb3RvIGVycl9vdXQ7XFxuIFxcbiBcXHRcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzLS07XFxuIFxcdFxcdFxcdFxcdGJyZWFrO1xcbkBAIC0xNzYsMTYgKzE3OSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRkZWZhdWx0Olxcbi1cXHRcXHRcXHRyZXR1cm4gLTE7XFxuK1xcdFxcdFxcdGdvdG8gZXJyX291dDtcXG4gXFx0XFx0fVxcbiBcXHR9XFxuLVxcdGluZm8tXFx1MDAzZW91dGRldiA9IGluZm8tXFx1MDAzZWluZGV2O1xcbiBcXG4tXFx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoaW5mby1cXHUwMDNlaW5kZXYpKVxcbitcXHRpZiAobmZfZmxvd3RhYmxlX2h3X29mZmxvYWQoXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVxcdTAwM2VkZXYpKVxcbiBcXHRcXHRpbmZvLVxcdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XFxuIFxcbitcXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cXHUwMDNlZGV2LCBmdCkpXFxuK1xcdFxcdHJldHVybiAtMTtcXG4rXFxuIFxcdHJldHVybiAwO1xcbitlcnJfb3V0OlxcbitcXHRpZiAoaW5mby1cXHUwMDNlbnVtX3R1bnMpXFxuK1xcdFxcdGRzdF9yZWxlYXNlKGluZm8tXFx1MDAzZXR1bl9kc3QpO1xcbitcXG4rXFx0cmV0dXJuIC0xO1xcbiB9XFxuIFxcbiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuQEAgLTIwNSw0NCArMjE1LDYgQEAgc3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRyZXR1cm4gZm91bmQ7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcXG4tXFx0XFx0XFx0XFx0XFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbi1cXHRcXHRcXHRcXHRcXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxcbi17XFxuLVxcdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3Q7XFxuLVxcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xcbi1cXHRzdHJ1Y3QgZmxvd2kgZmwgPSB7fTtcXG4tXFxuLVxcdHN3aXRjaCAobmZ0X3BmKHBrdCkpIHtcXG4tXFx0Y2FzZSBORlBST1RPX0lQVjQ6XFxuLVxcdFxcdGZsLnUuaXA0LmRhZGRyID0gdHVuLVxcdTAwM2Vkc3RfdjQuc19hZGRyO1xcbi1cXHRcXHRmbC51LmlwNC5zYWRkciA9IHR1bi1cXHUwMDNlc3JjX3Y0LnNfYWRkcjtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNC5mbG93aTRfZHNjcCA9IGlwNGhfZHNjcChpcF9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X21hcmsgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlbWFyaztcXG4tXFx0XFx0ZmwudS5pcDQuZmxvd2k0X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHRjYXNlIE5GUFJPVE9fSVBWNjpcXG4tXFx0XFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXFx1MDAzZWRzdF92NjtcXG4tXFx0XFx0ZmwudS5pcDYuc2FkZHIgPSB0dW4tXFx1MDAzZXNyY192NjtcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2lpZiA9IG5mdF9pbihwa3QpLVxcdTAwM2VpZmluZGV4O1xcbi1cXHRcXHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVxcdTAwM2Vza2IpKTtcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X21hcmsgPSBwa3QtXFx1MDAzZXNrYi1cXHUwMDNlbWFyaztcXG4tXFx0XFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XFxuLVxcdFxcdGJyZWFrO1xcbi1cXHR9XFxuLVxcbi1cXHRuZl9yb3V0ZShuZnRfbmV0KHBrdCksIFxcdTAwMjZ0dW5fZHN0LCBcXHUwMDI2ZmwsIGZhbHNlLCBuZnRfcGYocGt0KSk7XFxuLVxcdGlmICghdHVuX2RzdClcXG4tXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuLVxcbi1cXHRyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3QgPSB0dW5fZHN0O1xcbi1cXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcXG4tXFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5AQCAtMjU1LDI4ICsyMjcsMjUgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0dW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxuLVxcdCAgICBuZnRfZGV2X3BhdGhfaW5mbyhcXHUwMDI2c3RhY2ssIFxcdTAwMjZpbmZvLCBoYSwgXFx1MDAyNmZ0LVxcdTAwM2VkYXRhKSBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiAtRU5PRU5UO1xcbi1cXG4tXFx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcXG4rXFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4rXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBmdCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuLVxcdGlmIChpbmZvLm91dGRldilcXG4tXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLm91dGRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLmlmaW5kZXggPSBpbmZvLmRldi1cXHUwMDNlaWZpbmRleDtcXG4rXFx0cm91dGUtXFx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFxuLVxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5pbmRldi1cXHUwMDNlaWZpbmRleDtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGluZm8ubnVtX2VuY2FwczsgaSsrKSB7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5pZCA9IGluZm8uZW5jYXBbaV0uaWQ7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5lbmNhcFtpXS5wcm90byA9IGluZm8uZW5jYXBbaV0ucHJvdG87XFxuIFxcdH1cXG4gXFxuLVxcdGlmIChpbmZvLm51bV90dW5zIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShwa3QsIFxcdTAwMjZpbmZvLnR1biwgcm91dGUsIGRpcikpIHtcXG4rXFx0aWYgKGluZm8ubnVtX3R1bnMpIHtcXG4gXFx0XFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi50dW4uZHN0X3Y2ID0gaW5mby50dW4uc3JjX3Y2O1xcbiBcXHRcXHRyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uaW4udHVuLmwzX3Byb3RvID0gaW5mby50dW4ubDNfcHJvdG87XFxuIFxcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuK1xcdFxcdHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCA9IGluZm8udHVuX2RzdDtcXG4gXFx0fVxcbiBcXG4gXFx0cm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLmluLm51bV9lbmNhcHMgPSBpbmZvLm51bV9lbmNhcHM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjQ2LjAyMzcyNzAwOFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1NzkxODY5NjY4OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJORVRfSVBJUFwiLFxuICAgIFwiSVBWNl9UVU5ORUxcIixcbiAgICBcIk5FVEZJTFRFUl9JTkdSRVNTXCIsXG4gICAgXCJORl9DT05OVFJBQ0tcIixcbiAgICBcIk5GX1RBQkxFU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBuZXR3b3JraW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGxvZ2ljIGFuZCBpdHMgaW1wbGVtZW50YXRpb24gaW4gSVAvSVB2NiB0dW5uZWxzIChgaXBpcGAsIGBpcDZfdHVubmVsYCkgdG8gc3RvcmUgYW5kIG1hbmFnZSBhIGBkc3RfZW50cnlgLiBJdCBhbHNvIHVwZGF0ZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIG9mZmxvYWQgcGF0aCAoYG5mdF9mbG93X3JvdXRlYCkgdG8gdXNlIHRoaXMgYGRzdF9lbnRyeWAgaW5zdGVhZCBvZiBwZXJmb3JtaW5nIGEgbmV3IHJvdXRlIGxvb2t1cC4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyBpbiByZWFjaGFibGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZTkyYjViZTNkNGI5NTc1ZWRhYjQ5YzgyNDgwZmJmNzI4YmRlZjZiY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVsIDI0IDIzOjA0OjQyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbmluZGV4IDhkYjI1Yjc5NTczZTNjLi4zMGRjNzhiNGYxYTM4OCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcbkBAIC05MDIsNiArOTAyLDcgQEAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCB7XG4gXHRcdFx0fTtcbiBcbiBcdFx0XHR1OFx0bDNfcHJvdG87XG4rXHRcdFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0O1xuIFx0XHR9IHR1bjtcbiBcdFx0c3RydWN0IHtcbiBcdFx0XHRlbnVtIHtcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCBjMWMxYmUxYTY5NjJmZS4uZmVkMTAxZjU0YThhMzQgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNiArNzUwLDIzIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4gXHRyZXR1cm4gXHUwMDI2c3RhY2stXHUwMDNlcGF0aFtrXTtcbiB9XG4gXG4rc3RhdGljIHZvaWQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoX3JlbGVhc2Uoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4re1xuK1x0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbitcdGludCBrO1xuK1xuK1x0Zm9yIChrID0gc3RhY2stXHUwMDNlbnVtX3BhdGhzOyBrIFx1MDAzZT0gMDsgay0tKSB7XG4rXHRcdHBhdGggPSBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2tdO1xuK1x0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuK1x0XHRjYXNlIERFVl9QQVRIX1RVTjpcbitcdFx0XHRkc3RfcmVsZWFzZShwYXRoLVx1MDAzZXR1bi5kc3QpO1xuK1x0XHRcdGJyZWFrO1xuK1x0XHRkZWZhdWx0OlxuK1x0XHRcdGJyZWFrO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuQEAgLTc2NSwyOCArNzgyLDM4IEBAIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0d2hpbGUgKGN0eC5kZXYgXHUwMDI2XHUwMDI2IGN0eC5kZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbiBcdFx0bGFzdF9kZXYgPSBjdHguZGV2O1xuIFx0XHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcbi1cdFx0aWYgKCFwYXRoKVxuLVx0XHRcdHJldHVybiAtMTtcbitcdFx0aWYgKCFwYXRoKSB7XG4rXHRcdFx0cmV0ID0gLTE7XG4rXHRcdFx0Z290byBlcnJfb3V0O1xuK1x0XHR9XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuIFx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcbi1cdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHguZGV2KSlcbi1cdFx0XHRyZXR1cm4gLTE7XG4rXHRcdGlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpIHtcbitcdFx0XHRyZXQgPSAtMTtcbitcdFx0XHRnb3RvIGVycl9vdXQ7XG4rXHRcdH1cbiBcdH1cbiBcbiBcdGlmICghY3R4LmRldilcbi1cdFx0cmV0dXJuIHJldDtcbitcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4tXHRpZiAoIXBhdGgpXG4tXHRcdHJldHVybiAtMTtcbitcdGlmICghcGF0aCkge1xuK1x0XHRyZXQgPSAtMTtcbitcdFx0Z290byBlcnJfb3V0O1xuK1x0fVxuIFx0cGF0aC1cdTAwM2V0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC5kZXY7XG4gXG4tXHRyZXR1cm4gcmV0O1xuK1x0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0YWNrKTtcbitcbitcdHJldHVybiAtMTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pcGlwLmMgYi9uZXQvaXB2NC9pcGlwLmNcbmluZGV4IGQxYWEwNDhhNjA5OWNjLi4wYTRmYTEzNTFkZDc2OCAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lwaXAuY1xuKysrIGIvbmV0L2lwdjQvaXBpcC5jXG5AQCAtMzcwLDEwICszNzAsMTAgQEAgc3RhdGljIGludCBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRwYXRoLVx1MDAzZXR1bi5zcmNfdjQuc19hZGRyID0gdGlwaC1cdTAwM2VzYWRkcjtcbiBcdHBhdGgtXHUwMDNldHVuLmRzdF92NC5zX2FkZHIgPSB0aXBoLVx1MDAzZWRhZGRyO1xuIFx0cGF0aC1cdTAwM2V0dW4ubDNfcHJvdG8gPSBJUFBST1RPX0lQSVA7XG4rXHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4gXHRwYXRoLVx1MDAzZWRldiA9IGN0eC1cdTAwM2VkZXY7XG4gXG4gXHRjdHgtXHUwMDNlZGV2ID0gcnQtXHUwMDNlZHN0LmRldjtcbi1cdGlwX3J0X3B1dChydCk7XG4gXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvaXA2X3R1bm5lbC5jIGIvbmV0L2lwdjYvaXA2X3R1bm5lbC5jXG5pbmRleCBiZjhlNDBhZjYwYjA4My4uMzEyZGU0YTZlMTYwYzcgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2Ni9pcDZfdHVubmVsLmNcbisrKyBiL25ldC9pcHY2L2lwNl90dW5uZWwuY1xuQEAgLTE4NjQsMTIgKzE4NjQsMTIgQEAgc3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXG4gXHRcdHBhdGgtXHUwMDNldHVuLnNyY192NiA9IHQtXHUwMDNlcGFybXMubGFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmRzdF92NiA9IHQtXHUwMDNlcGFybXMucmFkZHI7XG4gXHRcdHBhdGgtXHUwMDNldHVuLmwzX3Byb3RvID0gSVBQUk9UT19JUFY2O1xuK1x0XHRwYXRoLVx1MDAzZXR1bi5kc3QgPSBkc3Q7XG4gXHRcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0Y3R4LVx1MDAzZWRldiA9IGRzdC1cdTAwM2VkZXY7XG4gXHR9XG4gXG4gXHRlcnIgPSBkc3QtXHUwMDNlZXJyb3I7XG4tXHRkc3RfcmVsZWFzZShkc3QpO1xuIFxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi45ZjZmYzI5YzRlMTY5NSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbisrKyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC00Miw4ICs0Miw3IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4rc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0XHRcdFx0ICAgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLCB1OCAqaGEsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuQEAgLTc2LDE0ICs3NSwxNCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqaW5kZXY7XG4tXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqb3V0ZGV2O1xuK1x0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldjtcbiBcdHN0cnVjdCBpZCB7XG4gXHRcdF9fdTE2XHRpZDtcbiBcdFx0X19iZTE2XHRwcm90bztcbiBcdH0gZW5jYXBbTkZfRkxPV19UQUJMRV9FTkNBUF9NQVhdO1xuIFx0dTggbnVtX2VuY2FwcztcbiBcdHN0cnVjdCBmbG93X29mZmxvYWRfdHVubmVsIHR1bjtcbitcdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3Q7XG4gXHR1OCBudW1fdHVucztcbiBcdHU4IGluZ3Jlc3NfdmxhbnM7XG4gXHR1OCBoX3NvdXJjZVtFVEhfQUxFTl07XG5AQCAtOTIsOSArOTEsMTIgQEAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8ge1xuIFx0ZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIHhtaXRfdHlwZTtcbiB9O1xuIFxuK3N0YXRpYyBib29sIG5mdF9mbG93dGFibGVfZmluZF9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCk7XG4rXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbitcdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcbiBcdGludCBpO1xuQEAgLTEwOSw3ICsxMTEsNyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRjYXNlIERFVl9QQVRIX1ZMQU46XG4gXHRcdGNhc2UgREVWX1BBVEhfUFBQT0U6XG4gXHRcdGNhc2UgREVWX1BBVEhfVFVOOlxuLVx0XHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbitcdFx0XHRpbmZvLVx1MDAzZWRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xMjMsMTUgKzEyNSwxNiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFx0XHRcdC8qIERFVl9QQVRIX1ZMQU4sIERFVl9QQVRIX1BQUE9FIGFuZCBERVZfUEFUSF9UVU4gKi9cbiBcdFx0XHRpZiAocGF0aC1cdTAwM2V0eXBlID09IERFVl9QQVRIX1RVTikge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX3R1bnMpXG4tXHRcdFx0XHRcdHJldHVybiAtMTtcbitcdFx0XHRcdFx0Z290byBlcnJfb3V0O1xuIFxuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uc3JjX3Y2ID0gcGF0aC1cdTAwM2V0dW4uc3JjX3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4uZHN0X3Y2ID0gcGF0aC1cdTAwM2V0dW4uZHN0X3Y2O1xuIFx0XHRcdFx0aW5mby1cdTAwM2V0dW4ubDNfcHJvdG8gPSBwYXRoLVx1MDAzZXR1bi5sM19wcm90bztcbitcdFx0XHRcdGluZm8tXHUwMDNldHVuX2RzdCA9IHBhdGgtXHUwMDNldHVuLmRzdDtcbiBcdFx0XHRcdGluZm8tXHUwMDNlbnVtX3R1bnMrKztcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0aWYgKGluZm8tXHUwMDNlbnVtX2VuY2FwcyBcdTAwM2U9IE5GX0ZMT1dfVEFCTEVfRU5DQVBfTUFYKVxuLVx0XHRcdFx0XHRyZXR1cm4gLTE7XG4rXHRcdFx0XHRcdGdvdG8gZXJyX291dDtcbiBcbiBcdFx0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4gXHRcdFx0XHRcdHBhdGgtXHUwMDNlZW5jYXAuaWQ7XG5AQCAtMTUyLDEzICsxNTUsMTMgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNlYnJpZGdlLnZsYW5fbW9kZSkge1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBR19IVzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWluZ3Jlc3NfdmxhbnMgfD0gQklUKGluZm8tXHUwMDNlbnVtX2VuY2FwcyAtIDEpO1xuIFx0XHRcdFx0YnJlYWs7XG4gXHRcdFx0Y2FzZSBERVZfUEFUSF9CUl9WTEFOX1RBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPSBwYXRoLVx1MDAzZWJyaWRnZS52bGFuX2lkO1xuIFx0XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID0gcGF0aC1cdTAwM2VicmlkZ2Uudmxhbl9wcm90bztcbkBAIC0xNjYsNyArMTY5LDcgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHRcdGJyZWFrO1xuIFx0XHRcdGNhc2UgREVWX1BBVEhfQlJfVkxBTl9VTlRBRzpcbiBcdFx0XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgPT0gMClcbi1cdFx0XHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdFx0XHRnb3RvIGVycl9vdXQ7XG4gXG4gXHRcdFx0XHRpbmZvLVx1MDAzZW51bV9lbmNhcHMtLTtcbiBcdFx0XHRcdGJyZWFrO1xuQEAgLTE3NiwxNiArMTc5LDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4tXHRcdFx0cmV0dXJuIC0xO1xuK1x0XHRcdGdvdG8gZXJyX291dDtcbiBcdFx0fVxuIFx0fVxuLVx0aW5mby1cdTAwM2VvdXRkZXYgPSBpbmZvLVx1MDAzZWluZGV2O1xuIFxuLVx0aWYgKG5mX2Zsb3d0YWJsZV9od19vZmZsb2FkKGZsb3d0YWJsZSkgXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShpbmZvLVx1MDAzZWluZGV2KSlcbitcdGlmIChuZl9mbG93dGFibGVfaHdfb2ZmbG9hZChcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwMjZcdTAwMjZcbitcdCAgICBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGluZm8tXHUwMDNlZGV2KSlcbiBcdFx0aW5mby1cdTAwM2V4bWl0X3R5cGUgPSBGTE9XX09GRkxPQURfWE1JVF9ESVJFQ1Q7XG4gXG4rXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby1cdTAwM2VkZXYsIGZ0KSlcbitcdFx0cmV0dXJuIC0xO1xuK1xuIFx0cmV0dXJuIDA7XG4rZXJyX291dDpcbitcdGlmIChpbmZvLVx1MDAzZW51bV90dW5zKVxuK1x0XHRkc3RfcmVsZWFzZShpbmZvLVx1MDAzZXR1bl9kc3QpO1xuK1xuK1x0cmV0dXJuIC0xO1xuIH1cbiBcbiBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG5AQCAtMjA1LDQ0ICsyMTUsNiBAQCBzdGF0aWMgYm9vbCBuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gZm91bmQ7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbmZ0X2Zsb3dfdHVubmVsX3VwZGF0ZV9yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi1cdFx0XHRcdFx0c3RydWN0IGZsb3dfb2ZmbG9hZF90dW5uZWwgKnR1bixcbi1cdFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuLVx0XHRcdFx0XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyKVxuLXtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKmN1cl9kc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbi1cdHN0cnVjdCBkc3RfZW50cnkgKnR1bl9kc3QgPSBOVUxMO1xuLVx0c3RydWN0IGZsb3dpIGZsID0ge307XG4tXG4tXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNDpcbi1cdFx0ZmwudS5pcDQuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuc2FkZHIgPSB0dW4tXHUwMDNlc3JjX3Y0LnNfYWRkcjtcbi1cdFx0ZmwudS5pcDQuZmxvd2k0X2lpZiA9IG5mdF9pbihwa3QpLVx1MDAzZWlmaW5kZXg7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9kc2NwID0gaXA0aF9kc2NwKGlwX2hkcihwa3QtXHUwMDNlc2tiKSk7XG4tXHRcdGZsLnUuaXA0LmZsb3dpNF9tYXJrID0gcGt0LVx1MDAzZXNrYi1cdTAwM2VtYXJrO1xuLVx0XHRmbC51LmlwNC5mbG93aTRfZmxhZ3MgPSBGTE9XSV9GTEFHX0FOWVNSQztcbi1cdFx0YnJlYWs7XG4tXHRjYXNlIE5GUFJPVE9fSVBWNjpcbi1cdFx0ZmwudS5pcDYuZGFkZHIgPSB0dW4tXHUwMDNlZHN0X3Y2O1xuLVx0XHRmbC51LmlwNi5zYWRkciA9IHR1bi1cdTAwM2VzcmNfdjY7XG4tXHRcdGZsLnUuaXA2LmZsb3dpNl9paWYgPSBuZnRfaW4ocGt0KS1cdTAwM2VpZmluZGV4O1xuLVx0XHRmbC51LmlwNi5mbG93bGFiZWwgPSBpcDZfZmxvd2luZm8oaXB2Nl9oZHIocGt0LVx1MDAzZXNrYikpO1xuLVx0XHRmbC51LmlwNi5mbG93aTZfbWFyayA9IHBrdC1cdTAwM2Vza2ItXHUwMDNlbWFyaztcbi1cdFx0ZmwudS5pcDYuZmxvd2k2X2ZsYWdzID0gRkxPV0lfRkxBR19BTllTUkM7XG4tXHRcdGJyZWFrO1xuLVx0fVxuLVxuLVx0bmZfcm91dGUobmZ0X25ldChwa3QpLCBcdTAwMjZ0dW5fZHN0LCBcdTAwMjZmbCwgZmFsc2UsIG5mdF9wZihwa3QpKTtcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9FTlQ7XG4tXG4tXHRyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCA9IHR1bl9kc3Q7XG4tXHRkc3RfcmVsZWFzZShjdXJfZHN0KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIFx0XHRcdFx0c3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuQEAgLTI1NSwyOCArMjI3LDI1IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4tXHRcdHJldHVybiAtRU5PRU5UO1xuLVxuLVx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcbitcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuK1x0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgZnQpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT0VOVDtcbiBcbi1cdGlmIChpbmZvLm91dGRldilcbi1cdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5vdXQuaWZpbmRleCA9IGluZm8ub3V0ZGV2LVx1MDAzZWlmaW5kZXg7XG4rXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5pZmluZGV4ID0gaW5mby5kZXYtXHUwMDNlaWZpbmRleDtcbitcdHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ub3V0LmlmaW5kZXggPSBpbmZvLmRldi1cdTAwM2VpZmluZGV4O1xuIFxuLVx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uaWZpbmRleCA9IGluZm8uaW5kZXYtXHUwMDNlaWZpbmRleDtcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGluZm8ubnVtX2VuY2FwczsgaSsrKSB7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLmVuY2FwW2ldLmlkID0gaW5mby5lbmNhcFtpXS5pZDtcbiBcdFx0cm91dGUtXHUwMDNldHVwbGVbIWRpcl0uaW4uZW5jYXBbaV0ucHJvdG8gPSBpbmZvLmVuY2FwW2ldLnByb3RvO1xuIFx0fVxuIFxuLVx0aWYgKGluZm8ubnVtX3R1bnMgXHUwMDI2XHUwMDI2XG4tXHQgICAgIW5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUocGt0LCBcdTAwMjZpbmZvLnR1biwgcm91dGUsIGRpcikpIHtcbitcdGlmIChpbmZvLm51bV90dW5zKSB7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5zcmNfdjYgPSBpbmZvLnR1bi5kc3RfdjY7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5kc3RfdjYgPSBpbmZvLnR1bi5zcmNfdjY7XG4gXHRcdHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmluLnR1bi5sM19wcm90byA9IGluZm8udHVuLmwzX3Byb3RvO1xuIFx0XHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fdHVucyA9IGluZm8ubnVtX3R1bnM7XG4rXHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbitcdFx0cm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3QgPSBpbmZvLnR1bl9kc3Q7XG4gXHR9XG4gXG4gXHRyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5pbi5udW1fZW5jYXBzID0gaW5mby5udW1fZW5jYXBzO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NDYuMDIzNzI5ODg4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTcwODAxNjIzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE5ldHdvcmtpbmcgU3Vic3lzdGVtIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCBpbXByZXNzaW9uIGlzIHRoYXQgaXQncyBhIG5vbi10cml2aWFsIGZ1bmN0aW9uYWwgY2hhbmdlIHdpdGhpbiB0aGUgY29yZSBuZXR3b3JraW5nIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nIGFuZCB0dW5uZWxzLiBJdCBsb29rcyBsaWtlIGl0J3MgdXBkYXRpbmcgaG93IGZvcndhcmQgcGF0aHMgYXJlIGNvbnN0cnVjdGVkLCBzcGVjaWZpY2FsbHkgdGhlIGBuZXRfZGV2aWNlX3BhdGhgIHN0cnVjdHVyZS4gVGhleSd2ZSBhZGRlZCBhIGBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RgIHRvIGBwYXRoLnR1bmAgYW5kIGFyZSBtYW5hZ2luZyBpdHMgbGlmZXRpbWUg4oCTIHJlbGVhc2luZyBpdCBvbiBlcnJvciB3aXRoIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIHdoaWNoIGlzIGdvb2QgaHlnaWVuZS4gSSBzZWUgdGhleSBhcmUgbGV2ZXJhZ2luZyB0aGlzIHdpdGhpbiBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIHRvIGJ5cGFzcyBhIG5vdy1yZW1vdmVkIGBuZl9yb3V0ZWAgY2FsbCwgbGlrZWx5IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLiBUaGlzIGFsc28gbWVhbnMgdGhpcyB3aWxsIGhhdmUgaW1wbGljYXRpb25zIHdpdGhpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXG5cbk15IG5leHQgc3RlcCBpcyB0byBwaW5wb2ludCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGZvciBtb3JlIGRldGFpbGVkIGFuYWx5c2lzIGFuZCBwb3RlbnRpYWwgZnV6emluZyB0YXJnZXRzLiBJIHNlZSB0aGUgZGlyZWN0IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAuIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaXMgY2FsbGVkIGZyb20gYG5mdF9mbG93X3JvdXRlYCwgc28gdGhhdCBzZWVtcyBsaWtlIGEga2V5IGZ1bmN0aW9uIHRvIGV4cGxvcmUuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIGBuZnRfZmxvd19yb3V0ZWAgaXMgZXhwb3J0ZWQsIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaXRzIG92ZXJhbGwgcmVhY2ggd2l0aGluIHRoZSBzeXN0ZW0uIExldCdzIHNlZSBpZiBpdCdzIGEgZ2xvYmFsIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2MTg4LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDQ6NTEuNzMxNzQ4ODIzWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NDM5OTI5MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Rldl9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMDE9c3RhdGljIGJvb2wgbmZ0X2Zsb3d0YWJsZV9maW5kX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMTctXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMTg6c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIxOS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTI2ND1pbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA2LVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzA3OlxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzA4LVxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTAtXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjMxMTpcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsICFkaXIsIGZ0KSBcXHUwMDNjIDApXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMTItXFx0XFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA0OjU2LjU3NTc0NjUyMloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIzODQ4NTE1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIGl0OlxuXG4qKlRyYWNpbmcgdGhlIEV4ZWN1dGlvbiBQYXRoOiBORlQgRmxvdyBSb3V0ZSoqXG5cbk9rYXksIHNvIGBuZnRfZmxvd19yb3V0ZWAgc2VlbXMgbGlrZSB0aGUgY2VudHJhbCBlbnRyeSBwb2ludCBmb3IgdGhpcyB3aG9sZSBORlQtcmVsYXRlZCBwcm9jZXNzLiBNeSBpbW1lZGlhdGUgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgaGVjayB0aGlzIHRoaW5nIGlzIGFjdHVhbGx5ICpjYWxsZWQqIGZyb20uIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc3RhY2sgaXMgY3J1Y2lhbCBmb3IgZ3Jhc3BpbmcgaG93IHRoZSBzeXN0ZW0gZnVuY3Rpb25zIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgZm9yIGlkZW50aWZ5aW5nIHBvdGVudGlhbCBwb2ludHMgb2YgZmFpbHVyZSBvciBhcmVhcyBmb3Igb3B0aW1pemF0aW9uLiBUaW1lIHRvIGZpcmUgdXAgdGhlIHRvb2xzIGFuZCB0cmFjZSB0aGF0IGNhbGwgZ3JhcGguIExldCdzIGRpZyBpbiBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyNTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNDo1OC45NjA1OTk4MloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjI3Mzk5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mdF9mbG93X3JvdXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmg9MjQ3PXN0cnVjdCBuZnRfcGt0aW5mbztcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0ODppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oLTI0OS1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjMtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyNjQ6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yNjUtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0zMjAtfVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MzIxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTUwPXN0YXRpYyB2b2lkIG5mdF9mbG93X29mZmxvYWRfZXZhbChjb25zdCBzdHJ1Y3QgbmZ0X2V4cHIgKmV4cHIsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMDgtXFx0ZGlyID0gQ1RJTkZPMkRJUihjdGluZm8pO1xcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcXHRpZiAobmZ0X2Zsb3dfcm91dGUocGt0LCBjdCwgXFx1MDAyNnJvdXRlLCBkaXIsIHByaXYtXFx1MDAzZWZsb3d0YWJsZSkgXFx1MDAzYyAwKVxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTExMC1cXHRcXHRnb3RvIGVycl9mbG93X3JvdXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTowMS41ODgwMDc0NjZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjU1ODE3NzkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBgbmZ0X2Zsb3dfb2ZmbG9hZF9ldmFsYCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBrbm93IHRoaXMgaXMgdGhlIGV2YWx1YXRpb24gZnVuY3Rpb24sIHNvIGl0J3MgdGhlIGNvcmUgbG9naWMgZm9yIHRoZSBgbmZ0X2Zsb3dfb2ZmbG9hZGAgZXhwcmVzc2lvbiB3aXRoaW4gbmV0ZmlsdGVyLiBJdCdzIHRoZSBlbmdpbmUgdGhhdCBmaWd1cmVzIG91dCBpZiBzb21ldGhpbmcgY2FuIGJlIG9mZmxvYWRlZCBmb3IgZmxvdyBwcm9jZXNzaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0cyBkb2luZy5cblxuTm93LCB3aGVyZSBkbyBJIHN0YXJ0PyBHaXZlbiBpdHMgcHVycG9zZSwgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGlzIGxpa2VseSB0aGUgYWN0dWFsIGRhdGEgcGF0aCBoYW5kbGluZyB0byBzZWUgd2hlcmUgdGhlIGRlY2lzaW9ucyBhcmUgbWFkZS4gTGV0IG1lIGNoZWNrIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB0aGF0J3MgbGlrZWx5IHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiBleHBsb3JpbmcgdGhlIG1lY2hhbmljcyBvZiBob3cgdGhpcyB3b3Jrcy4gSXQncyBwcm9iYWJseSB3aGVyZSBpdCBmaWd1cmVzIG91dCB0aGUgbmV4dCBob3AgYW5kIGlmIHRoZSBwYWNrZXQgbmVlZHMgdG8gYmUgc2VudCBmb3IgZm9yd2FyZGluZy4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGhvdyB0aGUgb2ZmbG9hZCBkZWNpc2lvbiBpcyBiZWluZyBtYWRlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3ODk1LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MDQuODQzODI4ODhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjYyNzgzMDIzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYz0yNzk9c3RhdGljIGludCBhaXJvaGFfcHBlX2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI4OS1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYzoyOTA6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9haXJvaGEvYWlyb2hhX3BwZS5jLTI5MS1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jPTkyPW10a19mbG93X2dldF93ZG1hX2luZm8oc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmFkZHIsIHN0cnVjdCBtdGtfd2RtYV9pbmZvICppbmZvKVxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA0LVxcdHJjdV9yZWFkX2xvY2soKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYzoxMDU6XFx0ZXJyID0gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgYWRkciwgXFx1MDAyNnN0YWNrKTtcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYy0xMDYtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oPTM0Mjg9aW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG5pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oOjM0Mjk6aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaC0zNDMwLVxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM9NzU2PXN0YXRpYyBpbnQgdmxhbl9kZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzYyLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jOjc2MzpzdGF0aWMgaW50IHZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtNzY0LVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYz0xMDc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgdmxhbl9uZXRkZXZfb3BzID0ge1xcbi0tXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmMtMTEwOS1cXHQubmRvX2dldF9pZmxpbmtcXHRcXHQ9IHZsYW5fZGV2X2dldF9pZmxpbmssXFxubmV0LzgwMjFxL3ZsYW5fZGV2LmM6MTExMDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoXFx0PSB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvODAyMXEvdmxhbl9kZXYuYy0xMTExLVxcdC5uZG9faHd0c3RhbXBfZ2V0XFx0PSB2bGFuX2h3dHN0YW1wX2dldCxcXG4tLVxcbm5ldC9jb3JlL2Rldi5jPTc0Mz1zdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzUyLVxcbm5ldC9jb3JlL2Rldi5jOjc1MzpzdGF0aWMgdm9pZCBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG5uZXQvY29yZS9kZXYuYy03NTQte1xcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LVxcbm5ldC9jb3JlL2Rldi5jOjc3MDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9jb3JlL2Rldi5jLTgxMy1lcnJfb3V0Olxcbm5ldC9jb3JlL2Rldi5jOjgxNDpcXHRkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZShzdGFjayk7XFxubmV0L2NvcmUvZGV2LmMtODE1LVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtODE3LX1cXG5uZXQvY29yZS9kZXYuYzo4MTg6RVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG5uZXQvY29yZS9kZXYuYy04MTktXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz05Nzk9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpZWVlODAyMTFfbW9uaXRvcmlmX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTk4OC1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYzo5ODk6c3RhdGljIGludCBpZWVlODAyMTFfbmV0ZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTkwLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGgpXFxuLS1cXG5uZXQvbWFjODAyMTEvaWZhY2UuYz0xMDQ3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9vcHMgaWVlZTgwMjExX2RhdGFpZl84MDIzX29wcyA9IHtcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jLTEwNTMtXFx0Lm5kb19zZXRfbWFjX2FkZHJlc3NcXHQ9IGllZWU4MDIxMV9jaGFuZ2VfbWFjLFxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjEwNTQ6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aFxcdD0gaWVlZTgwMjExX25ldGRldl9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy0xMDU1LVxcdC5uZG9fc2V0dXBfdGNcXHRcXHQ9IGllZWU4MDIxMV9uZXRkZXZfc2V0dXBfdGMsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTM2PXN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDQtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo0NTpzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDYtXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTczLW91dDpcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjc0OlxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzUtfVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMjI5LVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6MjMwOlxcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRzdCwgY3QsIGRpciwgaGEsIFxcdTAwMjZzdGFjaykgXFx1MDAzYyAwIHx8XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMzEtXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBmdCkgXFx1MDAzYyAwKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTowNy40NzE2NzEzMjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzcyNzA0OTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBGb3J3YXJkIFBhdGggVXBkYXRlcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgYSBmZXcga2V5IGZ1bmN0aW9ucyByZWxhdGVkIHRvIGZvcndhcmRpbmcgcGF0aHM6IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAsIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBhbmQgYG5mdF9kZXZfZm9yd2FyZF9wYXRoYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoZSBtYWluIHBsYXllcnMgYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIGl0IHN1Z2dlc3RzIGVpdGhlciBhIGxvdyBsZXZlbCByb3V0aW5nIGNoYW5nZSwgb3IgYSBtb3JlIGRpcmVjdCBpbnRlcmFjdGlvbiB3aXRoIHRoZSBOZXRmaWx0ZXIgZmxvdyB0YWJsZSBwcm9jZXNzaW5nLlxuXG5CZWZvcmUgSSBkaWcgdG9vIGRlZXAgaW50byB0aGUgY29yZSBmdW5jdGlvbnMsIGxldCBtZSB6ZXJvIGluIG9uIGBpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoYCBhbmQgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgLiBUaGVzZSBzdWdnZXN0IHR1bm5lbC1yZWxhdGVkIHBhdGggYWRqdXN0bWVudHMsIHdoaWNoIGFyZSB3b3J0aCBjbG9zZXIgaW5zcGVjdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBmb3J3YXJkaW5nIGxvZ2ljIGNoYW5nZXMgd2l0aGluIHRoZXNlIHR1bm5lbCBpbnRlcmZhY2VzIGFuZCBob3cgdGhlc2UgbW9kaWZpY2F0aW9ucyB3aWxsIHBsYXkgd2l0aCBhbnkgb3RoZXIgdHVubmVsIHByb2Nlc3Npbmcgd2l0aGluIHRoZSBzdGFjay4gSXQncyBpbXBvcnRhbnQgdG8gc2VlIGlmIHRoZXJlJ3MgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGltcGFjdCBvbiBvdmVybGF5IGFuZCB1bmRlcmxheSByb3V0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTIyLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTA3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjExLjg0NDM3OTM1NloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ3Njk3MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpcGlwX2ZpbGxfZm9yd2FyZF9wYXRoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lwaXAuYz0zNDE9aXBpcF90dW5uZWxfY3RsKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBpcF90dW5uZWxfcGFybV9rZXJuICpwLCBpbnQgY21kKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jLTM1NS1cXG5uZXQvaXB2NC9pcGlwLmM6MzU2OnN0YXRpYyBpbnQgaXBpcF9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC9pcHY0L2lwaXAuYy0zNTctXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2lwdjQvaXBpcC5jPTM4MT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGlwaXBfbmV0ZGV2X29wcyA9IHtcXG4tLVxcbm5ldC9pcHY0L2lwaXAuYy0zODktXFx0Lm5kb190dW5uZWxfY3RsXFx0PSBpcGlwX3R1bm5lbF9jdGwsXFxubmV0L2lwdjQvaXBpcC5jOjM5MDpcXHQubmRvX2ZpbGxfZm9yd2FyZF9wYXRoID0gaXBpcF9maWxsX2ZvcndhcmRfcGF0aCxcXG5uZXQvaXB2NC9pcGlwLmMtMzkxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjE0LjMyMTM2NDA1NloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODI2MjczNTc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdC5cblxuKipBbmFseXppbmcgdGhlIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIGRvd24gdGhpcyBgaXA2X3RubF9maWxsX2ZvcndhcmRfcGF0aGAgZnVuY3Rpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcywgdGhpcyBpcyBjb3JlIHRvIHRoZSBJUHY2IHR1bm5lbCBmdW5jdGlvbmFsaXR5IOKAkyBzcGVjaWZpY2FsbHksIHRoZSBmb3J3YXJkaW5nIHBhdGguIEl04oCZcyByZXNwb25zaWJsZSBmb3IsIHByZXN1bWFibHksIGNvbnN0cnVjdGluZyBvciBwb3B1bGF0aW5nIHRoZSBuZWNlc3NhcnkgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25maWd1cmF0aW9ucyB0byBhbGxvdyBhbiBJUHY2IHBhY2tldCB0byB0cmF2ZXJzZSBhIHR1bm5lbC4gSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCB3aGF0IHBpZWNlcyB0aGF0IGVuY29tcGFzc2VzOiBwb3RlbnRpYWxseSB0aGUgb3V0ZXIgaGVhZGVyICh0aGUgdHVubmVsIGhlYWRlciwgbGlrZWx5IElQdjYpLCB0aGUgaW5uZXIgaGVhZGVyICh0aGUgZW5jYXBzdWxhdGVkIElQdjYgcGFja2V0KSwgYW55IGFzc29jaWF0ZWQgbWV0YWRhdGEgYWJvdXQgdGhlIHR1bm5lbCBpdHNlbGYgKHNvdXJjZS9kZXN0aW5hdGlvbiBlbmRwb2ludHMsIHR1bm5lbCBJRCBpZiBhcHBsaWNhYmxlLCBldGMuKSwgYW5kIG9mIGNvdXJzZSwgYW55IG5lY2Vzc2FyeSByb3V0aW5nIGluZm9ybWF0aW9uIHRvIGRpcmVjdCB0aGUgcGFja2V0IHRvd2FyZHMgaXRzIHVsdGltYXRlIGRlc3RpbmF0aW9uIHRocm91Z2ggdGhlIHR1bm5lbC5cblxuSSBuZWVkIHRvIGRlbHZlIGludG8gaG93IHRoaXMgZnVuY3Rpb24gaW50ZXJmYWNlcyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLiBJcyBpdCBjYWxsZWQgZGlyZWN0bHkgYnkgdGhlIElQdjYgaW5wdXQgcGF0aD8gSXMgaXQgcGFydCBvZiB0aGUgb3V0cHV0IHBhdGg/IERvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgcm91dGluZyB0YWJsZSBsb29rdXAgcHJvY2Vzcz8gSSdtIHBpY3R1cmluZyB0aGUgc2VxdWVuY2Ugb2YgZXZlbnRzLi4uIGFuIGluY29taW5nIElQdjYgcGFja2V0IHRyaWdnZXJzIHRoZSB0dW5uZWwgZW50cnkgcG9pbnQsIHRoZW4gdGhpcyBmdW5jdGlvbiDigJMgYGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhgIOKAkyBpcyBpbnZva2VkIHRvIHByZXBhcmUgdGhlIHBhY2tldCBmb3IgdHJhbnNtaXNzaW9uIHRocm91Z2ggdGhlIHR1bm5lbC4gQXJlIHRoZXJlIGFueSBoYXJkd2FyZSBhY2NlbGVyYXRpb24gYXNwZWN0cz8gSSdtIHdvbmRlcmluZyBpZiB0aGlzIGZ1bmN0aW9uIHBlcmZvcm1zIGFueSBvZmZsb2FkaW5nIGNhcGFiaWxpdGllcyBvciBzZXRzIHVwIGluc3RydWN0aW9ucyB0aGF0IGNhbiBiZSBkb25lIGluIHRoZSBkYXRhcGF0aC4gSSdkIGJlIGxvb2tpbmcgZm9yIG9wdGltaXphdGlvbnM6IGFyZSB0aGVyZSBhbnkgY2FjaGluZyBtZWNoYW5pc21zLCBwcmUtY29tcHV0YXRpb24gdGVjaG5pcXVlcywgb3IgZGF0YSBzdHJ1Y3R1cmUgb3B0aW1pemF0aW9ucyBlbXBsb3llZCBoZXJlIHRvIG1pbmltaXplIG92ZXJoZWFkPyBBbmQgd2hhdCBhYm91dCBlcnJvciBoYW5kbGluZz8gSXMgdGhlcmUgYW55IGdyYWNlZnVsIGRlZ3JhZGF0aW9uIGJ1aWx0LWluIHRvIGhhbmRsZSBwb3RlbnRpYWwgdHVubmVsIHBhdGggZmFpbHVyZXMgb3IgbWlzY29uZmlndXJhdGlvbnM/IFRoYXQncyB3aGF0IEknZCB3YW50IHRvIGludmVzdGlnYXRlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNTQxLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MTguMTQ3NjQwNzIxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTE4NDE0MTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4NDI9RVhQT1JUX1NZTUJPTF9HUEwoaXA2X3RubF9lbmNhcF9zZXR1cCk7XFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDMtXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4NDQ6c3RhdGljIGludCBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4NDUtXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jPTE4Nzc9c3RhdGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBpcDZfdG5sX25ldGRldl9vcHMgPSB7XFxuLS1cXG5uZXQvaXB2Ni9pcDZfdHVubmVsLmMtMTg4NC1cXHQubmRvX2dldF9pZmxpbmsgPSBpcDZfdG5sX2dldF9pZmxpbmssXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jOjE4ODU6XFx0Lm5kb19maWxsX2ZvcndhcmRfcGF0aCA9IGlwNl90bmxfZmlsbF9mb3J3YXJkX3BhdGgsXFxubmV0L2lwdjYvaXA2X3R1bm5lbC5jLTE4ODYtfTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjAuNjY2MDYwNDk4WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMDEwNDc3MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBUYXJnZXQgSWRlbnRpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgaXBpcF9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBpcDZfdG5sX2ZpbGxfZm9yd2FyZF9wYXRoYCwgYm90aCBvZiB3aGljaCBhcmUgc3BlY2lmaWMgaW1wbGVtZW50YXRpb25zIG9mIGBuZG9fZmlsbF9mb3J3YXJkX3BhdGhgLCB1c2VkIGZvciBpcGlwIGFuZCBpcDZfdHVubmVsIGRldmljZXMuIFRoZXNlIGFyZSwgb2YgY291cnNlLCBjYWxsZWQgZnJvbSBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYC5cblxuVGhlIGtleSBlbnRyeSBwb2ludHMgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uLCB0aGVuLCBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgaXRzZWxmLCBhbmQgYWxzbyBgbmZ0X2Zsb3dfcm91dGVgLlxuXG5MZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYG5mdF9mbG93X3JvdXRlYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gQWggeWVzLCBpdCBpczogYEVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtgIEV4Y2VsbGVudCwgdGhhdCBtZWFucyBpdCdzIGFjY2Vzc2libGUuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gRm9yIGBuZnRfZmxvd19yb3V0ZWAsIGl0J3MgbG9jYXRlZCBpbiBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AsIHNvIEkgc2hvdWxkIGJlIGFibGUgdG8gZ2V0IHRoZSByZWxldmFudCBjb25maWcgZGVwZW5kZW5jaWVzIGZyb20gdGhlcmUuIFRoaXMgaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBlbnN1cmluZyBhIHByb3BlciBmdXp6ZXIgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyMjksIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNjYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjUuODY3MTExOTQ2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTMxODk2ODcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVfcGF0aC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxNDQ6XFx0XFx0XFx0XFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfb2ZmbG9hZC5vIG5mX2Zsb3dfdGFibGVfeGRwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MjguNzk5MDE5OTE3WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNjI1MTY5ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHByZXNlbnRlZCBhcyBpZiBpdCB3ZXJlIG15IG93biBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqRW5hYmxpbmcgdGhlIGBuZl9mbG93X3RhYmxlYCoqXG5cblJpZ2h0LCBzbyBJJ20gZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzIG5ldHdvcmsgcGVyZm9ybWFuY2UgaXNzdWUsIGFuZCBJJ3ZlIGNpcmNsZWQgYmFjayB0byB0aGUgZnVuZGFtZW50YWwgYnVpbGRpbmcgYmxvY2tzIG9mIGNvbm5lY3Rpb24gdHJhY2tpbmcuIFRvIG1ha2UgdGhpcyB0aGluZyByZWFsbHkgc2luZywgSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYG5mX2Zsb3dfdGFibGVgIG1vZHVsZSBpcyBlbmFibGVkLiBJdOKAmXMgcHJldHR5IG9idmlvdXMsIGJ1dCB5b3UgaGF2ZSB0byBzdGFydCB3aXRoIHRoZSBiYXNpY3MuIFdpdGhvdXQgdGhhdCwgSSdtIG5vdCBnb2luZyB0byBiZSBzZWVpbmcgdGhlIGFjY2VsZXJhdGlvbiBJJ20gaG9waW5nIGZvci4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIHN0YXR1cyBhbmQsIGlmIG5lZWRlZCwgZ2V0IHRoYXQgdHVybmVkIG9uIGJlZm9yZSBJIGV2ZW4gdGhpbmsgYWJvdXQgZGlnZ2luZyBkZWVwZXIgaW50byB0aGUgbW9yZSBudWFuY2VkIGNvbmZpZ3VyYXRpb25zLiBJdCBmZWVscyBsaWtlIGEgcHJlcmVxdWlzaXRlLCBhIG5lY2Vzc2FyeSBmb3VuZGF0aW9uIGZvciBhbnkgcGVyZm9ybWFuY2UgdHVuaW5nIHdpdGhpbiB0aGlzIHBhcnQgb2YgdGhlIG5ldHdvcmsgc3RhY2suIE9uY2UgSSB2ZXJpZnkgdGhhdCBpdCdzIGVuYWJsZWQsIHRoZW4gSSBjYW4gbW92ZSB0byB0aGUgYWN0dWFsIHByb2JsZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNzY1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MzIuMTYxNTQwNDkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTA3MTk3OTMzLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmotXFxcXCRcXFxcKENPTkZJR19ORl9GTE9XX1RBQkxFXFxcXCkgXFxcXCs9IG5mX2Zsb3dfdGFibGVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjM1LjA2ODc0NzgzNVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc0ODU0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6XG5cbioqTmF2aWdhdGluZyB0aGUgTmV0ZmlsdGVyIExhbmRzY2FwZSBmb3IgbmZfZmxvd190YWJsZSoqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGFuZCBzdHJ1Y3R1cmUgb2YgYG5mX2Zsb3dfdGFibGVgIHdpdGhpbiB0aGUgTmV0ZmlsdGVyIGVjb3N5c3RlbS4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBNYWtlZmlsZWAgaW4gYG5ldC9uZXRmaWx0ZXIvYCBpcyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBwb2tpbmcgYXJvdW5kLiBJdCB3aWxsIHByb3ZpZGUgYSBnb29kIGluaXRpYWwgb3ZlcnZpZXcgb2YgdGhlIHJlbGV2YW50IGJ1aWxkIGRlcGVuZGVuY2llcywgaW5jbHVzaW9uIG9mIHRoZSByZWxldmFudCBoZWFkZXIgZmlsZXMsIGFuZCB0aGUgY29tcGlsYXRpb24gc3BlY2lmaWNzIHJlbGF0ZWQgdG8gYG5mX2Zsb3dfdGFibGVgLiBUaGUgYE1ha2VmaWxlYCB3aWxsIGxpa2VseSBzZXJ2ZSBhcyBhIGdvb2QganVtcGluZyBvZmYgcG9pbnQgdG8gZmluZGluZyByZWxhdGVkIHNvdXJjZSBmaWxlcyBhbmQgaG93IHRoZXkncmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgd2hlcmUgdGhlIGNvbXBpbGF0aW9uIG1hZ2ljIGlzIGRlZmluZWQsIHNvIGl0J3MgYSBjcml0aWNhbCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDI2LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6MzkuMjQzNjA2MDExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzQwMzg0OTk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5mX2Zsb3dfdGFibGVcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMzk9b2JqLSQoQ09ORklHX05GVF9GV0RfTkVUREVWKVxcdCs9IG5mdF9md2RfbmV0ZGV2Lm9cXG4tLVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQxLSMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZVxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19ORl9GTE9XX1RBQkxFKVxcdCs9IG5mX2Zsb3dfdGFibGUub1xcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQzLW5mX2Zsb3dfdGFibGUtb2Jqc1xcdFxcdDo9IG5mX2Zsb3dfdGFibGVfY29yZS5vIG5mX2Zsb3dfdGFibGVfaXAubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjQxLjk4NDAwMjMyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDY2NDQwNDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgcmVxdWlyZW1lbnRzLCBjb25zaWRlcmluZyBteSBleHBlcnRpc2U6XG5cbioqTXkgTGluZSBvZiBSZWFzb25pbmcgZm9yIE5ldHdvcmsgRmxvdyBPZmZsb2FkaW5nKipcblxuUmlnaHQsIHNvIHRvIGV2ZW4gKmJlZ2luKiB3b3JraW5nIHdpdGggbmV0d29yayBmbG93IG9mZmxvYWRpbmcgaW4gdGhpcyBjb250ZXh0LCB0aGUgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBvcHRpb24gaXMgYWJzb2x1dGVseSBtYW5kYXRvcnkuIFRoYXQncyB0aGUgZm91bmRhdGlvbmFsIHBpZWNlLCB0aGUgYmFzaWMgZmxvdyB0YWJsZSBpbmZyYXN0cnVjdHVyZSwgd2l0aG91dCB3aGljaCB3ZSdyZSBkZWFkIGluIHRoZSB3YXRlci4gV2UgbmVlZCB0aGUgY29yZSBtYWNoaW5lcnkgdG8gbWFuYWdlIHRoZXNlIGZsb3dzIGluIHRoZSBmaXJzdCBwbGFjZS5cblxuQW5kIHRoZW4sIGxvb2tpbmcgZGVlcGVyIGludG8gaG93IHRoaXMgb2ZmbG9hZGluZyBpcyAqYWN0dWFsbHkqIGltcGxlbWVudGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBuZXh0IGNyaXRpY2FsIGRlcGVuZGVuY3kuIFRoaXMgc3BlY2lmaWNhbGx5IGRlYWxzIHdpdGggb2ZmbG9hZGluZyBmbG93cyB1c2luZyBgbmZ0YWJsZXNgLiBUaGlzIGlzIGVzc2VudGlhbCBiZWNhdXNlLCBpZiBJIHdhbnQgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbmFsaXR5ICh3aGljaCBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgcm91dGluZyBiYXNlZCBvbiB0aGVzZSBvZmZsb2FkZWQgZmxvd3MpLCBJIHNlZSB0aGF0IGl0IGlzIGNhbGxlZCBmcm9tIGBuZnRfZmxvd19vZmZsb2FkX2V2YWxgLiBUaGVyZWZvcmUsIGlmIEkgd2FudCB0byB1c2UgdGhlIGZ1bmN0aW9uIGBuZnRfZmxvd19yb3V0ZWAsIHRoZW4gSSByZXF1aXJlIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAsIHNpbmNlIHRoZSB0d28gZnVuY3Rpb25zIGFyZSBzbyBjbG9zZWx5IGNvdXBsZWQuIFRoaXMgaXMgYWxsIHN0YW5kYXJkIHByYWN0aWNlIHdpdGggcmVnYXJkcyB0byBkZXBlbmRlbmNpZXMgd2l0aGluIHRoZSBjb25maWd1cmF0aW9uIG9mIGEgTGludXggS2VybmVsLCBJIGFtIGNvbmZpZGVudCBJIHVuZGVyc3RhbmQgdGhlIHRob3VnaHQgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzNzYsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo0NS40NTA0NDU2MDRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTQ1MzY0NTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTExMj1vYmotJChDT05GSUdfTkZUX0NUKVxcdFxcdCs9IG5mdF9jdC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZToxMTM6b2JqLSQoQ09ORklHX05GVF9GTE9XX09GRkxPQUQpXFx0Kz0gbmZ0X2Zsb3dfb2ZmbG9hZC5vXFxubmV0L25ldGZpbHRlci9NYWtlZmlsZS0xMTQtb2JqLSQoQ09ORklHX05GVF9MSU1JVClcXHRcXHQrPSBuZnRfbGltaXQub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo0OC4zMDQ5ODgxMTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5NDk2MjYyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3Mgb24gdGhlIG1hdHRlcjpcblxuKipDaGVja2luZyBTcGVjaWZpYyBDb2RlIEZpbGVzIGZvciBJbnZlc3RpZ2F0aW9uKipcblxuUmlnaHQsIHRpbWUgdG8gZ2V0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyLiBJIG5lZWQgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBNeSBpbnN0aW5jdCB0ZWxscyBtZSB0aGUgaXNzdWUgbGlrZWx5IHJlc2lkZXMgd2l0aGluIHRoZSBuZXR3b3JraW5nIGNvZGUuIEkgbmVlZCB0byBzdGFydCBzb21ld2hlcmUuIFRoZSBmaXJzdCB0d28gZmlsZXMgdGhhdCBqdW1wIG91dCB0byBtZSBhcyBwb3RlbnRpYWwgaG90c3BvdHMgYXJlIGBpcGlwLmNgIGFuZCBgaXA2X3R1bm5lbC5jYC4gVGhlc2UgYm90aCBoYW5kbGUgY29yZSBJUC1pbi1JUCB0dW5uZWxpbmcgbWVjaGFuaXNtcywgYW5kIGdpdmVuIHRoZSBuYXR1cmUgb2YgdGhlIGlzc3VlIEknbSBpbnZlc3RpZ2F0aW5nLCBpdCdzIGhpZ2hseSBwcm9iYWJsZSB0aGF0IHRoZSBidWcgbGllcyBzb21ld2hlcmUgd2l0aGluIHRoZSB0dW5uZWxpbmcgbG9naWMgb3IsIHBlcmhhcHMsIGhvdyB0aGVzZSBtb2R1bGVzIGludGVyYWN0LiBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aGUgcGFja2V0IHByb2Nlc3NpbmcgZmxvd3MsIGVycm9yIGhhbmRsaW5nLCBhbmQgYW55IGludGVyYWN0aW9ucyB3aXRoIHRoZSBJUCBzdGFjayB0byBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB3aGF0J3MgZ29pbmcgb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODA0LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDU6NTEuMzk5OTUzNTA5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTE5ODczNTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlwaXBcXFxcLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVsbGFub3gvbWx4c3cvTWFrZWZpbGU9MTM9bWx4c3dfc3BlY3RydW0tb2Jqc1xcdFxcdDo9IHNwZWN0cnVtLm8gc3BlY3RydW1fYnVmZmVycy5vIFxcXFxcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTIyLVxcdFxcdFxcdFxcdCAgIHNwZWN0cnVtX2Zsb3dlci5vIHNwZWN0cnVtX2NudC5vIFxcXFxcXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWxsYW5veC9tbHhzdy9NYWtlZmlsZToyMzpcXHRcXHRcXHRcXHQgICBzcGVjdHJ1bV9maWQubyBzcGVjdHJ1bV9pcGlwLm8gXFxcXFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lbGxhbm94L21seHN3L01ha2VmaWxlLTI0LVxcdFxcdFxcdFxcdCAgIHNwZWN0cnVtX2FjbF9mbGV4X2FjdGlvbnMubyBcXFxcXFxuLS1cXG5uZXQvaXB2NC9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfSVBfTVJPVVRFX0NPTU1PTikgKz0gaXBtcl9iYXNlLm9cXG5uZXQvaXB2NC9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTkVUX0lQSVApICs9IGlwaXAub1xcbm5ldC9pcHY0L01ha2VmaWxlLTI2LWdyZS15IDo9IGdyZV9kZW11eC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA1OjU0LjMxOTg0MjIzMVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNjI5OTAyNzM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqTmV0d29yayBJUElQIENvbmZpZ3VyYXRpb24gUmVxdWlyZW1lbnQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGFuZCB0aGUgc3lzdGVtIGhpbmdlcyBvbiBoYXZpbmcgYENPTkZJR19ORVRfSVBJUGAgZW5hYmxlZC4gVGhhdCBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHN1Z2dlc3RzIHRoZSBmdW5jdGlvbmFsaXR5IEknbSBkZWFsaW5nIHdpdGggbGV2ZXJhZ2VzIElQLWluLUlQIHR1bm5lbGluZy4gVGhhdCBjb3VsZCBtZWFuIGl0J3Mgc2V0dGluZyB1cCBzb21lIHNvcnQgb2YgdmlydHVhbCBuZXR3b3JrLCBtYXliZSBmb3IgZW5jYXBzdWxhdGlvbiBvciBmb3IgY29ubmVjdGluZyBkaXNwYXJhdGUgbmV0d29ya3MuIEdpdmVuIG15IGV4cGVyaWVuY2UsIEknZCBpbW1lZGlhdGVseSB3YW50IHRvIGtub3cgKndoeSogaXQncyByZXF1aXJlZC4gSXMgaXQgYSBoYXJkIGRlcGVuZGVuY3k/IElzIGl0IHByb3ZpZGluZyBhIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbj8gT3IgaXMgaXQgc2ltcGx5IGEgbGVnYWN5IGNvbXBvbmVudCB0aGF0IGhhcyB0byBiZSBwcmVzZW50PyBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHB1cnBvc2Ugb2YgYENPTkZJR19ORVRfSVBJUGAgaXMgdGhlIG5leHQgbG9naWNhbCBzdGVwLCBiZWZvcmUgSSBkaWcgZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNDgsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo1Ni45NDk3NDcyODdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NDIyMzY4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXA2X3R1bm5lbFxcXFwub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9NYWtlZmlsZT00MT1vYmotJChDT05GSUdfSVBWNl9TSVQpICs9IHNpdC5vXFxubmV0L2lwdjYvTWFrZWZpbGU6NDI6b2JqLSQoQ09ORklHX0lQVjZfVFVOTkVMKSArPSBpcDZfdHVubmVsLm9cXG5uZXQvaXB2Ni9NYWtlZmlsZS00My1vYmotJChDT05GSUdfSVBWNl9HUkUpICs9IGlwNl9ncmUub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNTo1OS43OTE5OTA2NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNDE0MTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLZXJuZWwgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb24gQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyB0aGUgaW52ZXN0aWdhdGlvbiBoaW5nZXMgb24gYENPTkZJR19JUFY2X1RVTk5FTGAgYmVpbmcgZW5hYmxlZC4gVGhhdCdzIHRoZSBiYXNlbGluZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIHByb3Blcmx5IHNldC5cblxuTm93LCBsZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gQmFzZWQgb24gd2hhdCBJIGhhdmUgaGVyZSBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSBpbXBvcnRhbnQgYXMgd2VsbDogYENPTkZJR19ORl9GTE9XX1RBQkxFYCwgYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYCwgYENPTkZJR19ORVRfSVBJUGAsIGFuZCBvZiBjb3Vyc2UsIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVzZSBtaWdodCBpbmZsdWVuY2UgdGhlIGJlaGF2aW9yLCBzbyB0aGV5IG5lZWQgdG8gYmUga2VwdCBpbiBtaW5kLlxuXG5UaGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgYW5kIGBuZnRfZmxvd19yb3V0ZWAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhlc2UgYXJlIGRvaW5nIGFuZCBob3cgdGhleSByZWxhdGUuXG5cbkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgY2FuIHVzZSB0aGlzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzUzOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjowMy4xOTYxMzQ4MTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5ODQwODIzMzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTF9HUExcXFxcKGRldl9maWxsX2ZvcndhcmRfcGF0aFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvY29yZS9kZXYuYz03NzA9aW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuLS1cXG5uZXQvY29yZS9kZXYuYy04MTctfVxcbm5ldC9jb3JlL2Rldi5jOjgxODpFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xcbm5ldC9jb3JlL2Rldi5jLTgxOS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6MDYuMTgwMjIzNTk0WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2MDk1MzE4NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJpemVkIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqVmVyaWZ5aW5nIGBuZnRfZmxvd19yb3V0ZWAgQXZhaWxhYmlsaXR5KipcblxuWWVzLCB0aGF0J3MgY29ycmVjdCwgY29uZmlybWVkLiBOb3csIGxldCdzIGp1c3QgbWFrZSBhYnNvbHV0ZWx5IHN1cmUgdGhhdCB0aGUgYG5mdF9mbG93X3JvdXRlYCBmdW5jdGlvbiwgb3Igd2hhdGV2ZXIgaXQgaXMsIGlzIGFjdHVhbGx5IGV4cG9ydGVkLiBHb3R0YSBkb3VibGUtY2hlY2sgdGhhdCBpdCdzIGF2YWlsYWJsZSBmb3IgdXNlLiBObyBwb2ludCBwcm9jZWVkaW5nIGlmIEknbSB0cnlpbmcgdG8gdXNlIHNvbWV0aGluZyB0aGF0IGlzbid0IGFjY2Vzc2libGUuIEdvdHRhIHZlcmlmeSB0aGF0IGZpcnN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzk4OCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjA4Ljc4OTc1Nzk4MloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjgxNDMzMzI1MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFBPUlRfU1lNQk9MX0dQTFxcXFwobmZ0X2Zsb3dfcm91dGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0yNjQ9aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTMyMC19XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzozMjE6RVhQT1JUX1NZTUJPTF9HUEwobmZ0X2Zsb3dfcm91dGUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoxMS42MDQwOTc2MjNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE2NDMyNjAwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEVudHJ5IFBvaW50cyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgdGhlIGluaXRpYWwgc3RhdGVtZW50IGlzIGFjY3VyYXRlLiBOb3csIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGFsbCBwb3NzaWJsZSBlbnRyeSBwb2ludHMgaW50byB0aGlzIHNlY3Rpb24gb2YgdGhlIGNvZGUuIExldCdzIHNlZS4uLiBJJ3ZlIGlkZW50aWZpZWQgYSBmZXcga2V5IGZ1bmN0aW9ucyBpbiBwbGF5IGhlcmUuXG5cblJpZ2h0LCBJIHNlZSB0aGF0IGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgaGFzIHNldmVyYWwgc3RhdGljIGNhbGxlZXM6IGBuZnRfZmxvd19yb3V0ZWAsIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhfcmVsZWFzZWAsIGBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZGV2X3BhdGhfaW5mb2AuIFRoYXQgbmFycm93cyB0aGluZ3MgZG93bi4gQmVjYXVzZSBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgIGhhcyB0aG9zZSBzdGF0aWMgY2FsbGVlcywgSSBzZWUgdGhhdCBgbmZ0X2Zsb3dfcm91dGVgIGFuZCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgdGhlIG1haW4gZW50cnkgcG9pbnRzLCB0aGUgZnVuY3Rpb25zIHRoYXQga2ljayB0aGluZ3Mgb2ZmLCBhbmQgZnJvbSB0aGVyZSB3ZSBkaXZlIGRlZXBlci5cblxuQnV0LCBiZWZvcmUgSSBtb3ZlIG9uLCBJIHdhbnQgdG8gY29uZmlybSB0aGF0IGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIG9ubHkgY2FsbGVkIGZyb20gd2hlcmUgSSB0aGluayBpdCBpcy4gTm8gcG9pbnQgaW4gYXNzdW1pbmcgYW55dGhpbmcgaGVyZS4gSSB3aWxsIGNoZWNrIGZvciBvdGhlciB1c2VzIGFuZCBzZWUgd2hhdCBJIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjUwLCJPdXRwdXRUb2tlbnMiOjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjE1Ljc2ODQyNjk5WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMDE4NzczODI0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRldl9maWxsX2ZvcndhcmRfcGF0aFxcXFwoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM9Mjc5PXN0YXRpYyBpbnQgYWlyb2hhX3BwZV9nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLFxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yODktXFx0cmN1X3JlYWRfbG9jaygpO1xcbmRyaXZlcnMvbmV0L2V0aGVybmV0L2Fpcm9oYS9haXJvaGFfcHBlLmM6MjkwOlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFxcdTAwMjZzdGFjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvYWlyb2hhL2Fpcm9oYV9wcGUuYy0yOTEtXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9tZWRpYXRlay9tdGtfcHBlX29mZmxvYWQuYz05Mj1tdGtfZmxvd19nZXRfd2RtYV9pbmZvKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICphZGRyLCBzdHJ1Y3QgbXRrX3dkbWFfaW5mbyAqaW5mbylcXG4tLVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21lZGlhdGVrL210a19wcGVfb2ZmbG9hZC5jLTEwNC1cXHRyY3VfcmVhZF9sb2NrKCk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmM6MTA1OlxcdGVyciA9IGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGFkZHIsIFxcdTAwMjZzdGFjayk7XFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWVkaWF0ZWsvbXRrX3BwZV9vZmZsb2FkLmMtMTA2LVxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaD0zNDI4PWludCBkZXZfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYik7XFxuaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaDozNDI5OmludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbmluY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgtMzQzMC1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jPTc1Nj1zdGF0aWMgaW50IHZsYW5fZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2Mi1cXG5uZXQvODAyMXEvdmxhbl9kZXYuYzo3NjM6c3RhdGljIGludCB2bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbm5ldC84MDIxcS92bGFuX2Rldi5jLTc2NC1cXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoKVxcbi0tXFxubmV0L2NvcmUvZGV2LmM9NzUzPXN0YXRpYyB2b2lkIGRldl9maWxsX2ZvcndhcmRfcGF0aF9yZWxlYXNlKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbi0tXFxubmV0L2NvcmUvZGV2LmMtNzY5LVxcbm5ldC9jb3JlL2Rldi5jOjc3MDppbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcXG5uZXQvY29yZS9kZXYuYy03NzEtXFx0XFx0XFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcXG4tLVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jPTk3OT1zdGF0aWMgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2Vfb3BzIGllZWU4MDIxMV9tb25pdG9yaWZfb3BzID0ge1xcbi0tXFxubmV0L21hYzgwMjExL2lmYWNlLmMtOTg4LVxcbm5ldC9tYWM4MDIxMS9pZmFjZS5jOjk4OTpzdGF0aWMgaW50IGllZWU4MDIxMV9uZXRkZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcXG5uZXQvbWFjODAyMTEvaWZhY2UuYy05OTAtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aClcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM9MzY9c3RhdGljIGJvb2wgbmZ0X2lzX3ZhbGlkX2V0aGVyX2RldmljZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NC1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1OnN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00Ni1cXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNzMtb3V0Olxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NzQ6XFx0cmV0dXJuIGRldl9maWxsX2ZvcndhcmRfcGF0aChkZXYsIGhhLCBzdGFjayk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy03NS19XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jPTIxOD1zdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy0yMjktXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzoyMzA6XFx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTIzMS1cXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIGZ0KSBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjE4Ljc4NzIwOTY5NFoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODEyOTE1NTQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIE5ldGZpbHRlciBGbG93IFBhdGgqKlxuXG5Pa2F5LCBsZXQncyBicmVhayBkb3duIHRoaXMgbmV0ZmlsdGVyIGZsb3cgcGF0aCwgYXMgSSB1bmRlcnN0YW5kIGl0LiBCYXNlZCBvbiB0aGUgY2FsbCBncmFwaCwgYG5mdF9mbG93X3JvdXRlYCBzZWVtcyB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludCBmb3IgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIGZ1bmN0aW9uYWxpdHkuIEl0J3MgdGhlIHVsdGltYXRlIGNhbGxlciwgbGVhZGluZyBpbnRvIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAsIHRoZW4gYG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCB3aGljaCBpcywgaW4gZXNzZW5jZSwgdGhlIGZvY2FsIHBvaW50IG9mIHRoaXMgZW50aXJlIHByb2Nlc3MuXG5cbkl0J3MgZ29vZCB0byBzZWUgdGhhdCBgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBpcyBhbHNvIGRpcmVjdGx5IGludm9rZWQgYnkgaGFyZHdhcmUgb2ZmbG9hZCBkcml2ZXJzIGxpa2UgYGFpcm9oYV9wcGVfZ2V0X3dkbWFfaW5mb2AgYW5kIGBtdGtfZmxvd19nZXRfd2RtYV9pbmZvYC4gVGhpcyByZWluZm9yY2VzIHRoYXQgbXkgaW5pdGlhbCB0aG91Z2h0IC0gdGhhdCBmdXp6aW5nIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgIGlzIHRoZSByaWdodCBzdHJhdGVneSBmb3IgcHJvYmluZyB0aGlzIGFyZWEgZm9yIHZ1bG5lcmFiaWxpdGllcy4gVGhpcyBjb3ZlcnMgYm90aCB0aGUgY29yZSBzb2Z0d2FyZSBwYXRoIGFuZCB0aGUgY3JpdGljYWwgaGFyZHdhcmUgb2ZmbG9hZCBpbnRlcmFjdGlvbnMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRvIGJlIGNlcnRhaW4gSSBoYXZlIGNvdmVyZWQgYWxsIHRoZSBsaWtlbHkgcGF0aHMuIEkgc2VlIGBDT05GSUdfTkZfRkxPV19UQUJMRWAsIHdoaWNoIGlzIGV4cGVjdGVkLCBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgLCBgQ09ORklHX05FVF9JUElQYCwgYW5kIGBDT05GSUdfSVBWNl9UVU5ORUxgLiBUaGVzZSBhcmUgYWxsIHdvcnRoIGV4YW1pbmluZyB0byBzZWUgaWYgdGhleSBpbnRyb2R1Y2UgYW55IGNvbmRpdGlvbmFsIGNvZGUgcGF0aHMuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBORlRfRkxPV19PRkZMT0FEYCBoYXMgYW55IGRlcGVuZGVuY2llcy4gRW5zdXJpbmcgYWxsIGRlcGVuZGVuY2llcyBhcmUgYWNjb3VudGVkIGZvciB3aWxsIGJlIGltcG9ydGFudCB3aGVuIGRldmVsb3BpbmcgbXkgZnV6emluZyB0ZXN0IHBsYW4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjA0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjIzLjYwMDEyOTQxNVoiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjUwNjg2MjI1NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWc9NDk4PWNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjUwNDpjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDUtXFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoyNi4xMDY5OTk2NTJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI5ODc1MDU4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgYSBmaXJzdC1wZXJzb24gbmFycmF0aXZlOlxuXG4qKkNvcmUgTmV0d29ya2luZyBSZXF1aXJlbWVudHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBjbGVhcmx5IHBvaW50cyB0byB0aGUgbmVjZXNzaXR5IG9mIGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIFdlIGNhbid0IHJlYWxseSBkbyBtdWNoIGFkdmFuY2VkIG5ldHdvcmsgdHJhZmZpYyBhbmFseXNpcyBvciBtYW5hZ2VtZW50IHdpdGhvdXQgdGhlc2UuIEknbSB0aGlua2luZyBvZiBjb25uZWN0aW9uIHRyYWNraW5nIGZpcnN0OyBpdCdzIHRoZSBmb3VuZGF0aW9uLiBXaXRob3V0IGl0LCB3ZSBsb3NlIHRoZSBhYmlsaXR5IHRvIG1haW50YWluIHN0YXRlZnVsIGZpcmV3YWxsaW5nLCBOQVQgZnVuY3Rpb25hbGl0eSwgYW5kIGFsbCB0aGUgYXNzb2NpYXRlZCBiZW5lZml0cyBvZiBhIG1vcmUgc29waGlzdGljYXRlZCBuZXR3b3JrIHNldHVwLiBXZSdkIGJhc2ljYWxseSBiZSBzdHVjayB3aXRoIGEgcGFja2V0LWJ5LXBhY2tldCB2aWV3LCBhbmQgZnJhbmtseSwgdGhhdCdzIGp1c3Qgbm90IGdvaW5nIHRvIGN1dCBpdCBpbiBhbnkgbm9uLXRyaXZpYWwgZW52aXJvbm1lbnQuIFRoZW4sIGBORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwgZm9yIHBlcmZvcm1hbmNlIGF0IHNjYWxlLiBJdCBvZmZlcnMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcywgYWNjZWxlcmF0ZXMgcHJvY2Vzc2luZywgYW5kIGRyYXN0aWNhbGx5IHJlZHVjZXMgQ1BVIG92ZXJoZWFkLiBTbywgeWVhaCwgSSdtIGFscmVhZHkgc2VlaW5nIHRoZSBwcmFjdGljYWwgaW1wbGljYXRpb25zIOKAkyB3ZSBuZWVkIGJvdGggb2YgdGhlc2UuIE90aGVyd2lzZSwgd2UncmUgYnVpbGRpbmcgb24gc2FuZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MTIsIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjoyOS40MDU3NTMwNDJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2OTAyMTUwMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDItXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcwMzpjb25maWcgTkZfRkxPV19UQUJMRV9JTkVUXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MTItXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVxcXCJcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXFxubmV0L25ldGZpbHRlci9LY29uZmlnOjcyMTpjb25maWcgTkZfRkxPV19UQUJMRV9QUk9DRlNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIyLVxcdGJvb2wgXFxcIlN1cHBseSBmbG93IHRhYmxlIHN0YXRpc3RpY3MgaW4gcHJvY2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozMi4wOTU5NzgxNjRaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY0NDQ2NjY1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIGFuZCBpdHMgUmVsYXRpb25zaGlwIHRvIE5GX0NPTk5UUkFDSyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBgTkZfRkxPV19UQUJMRWAuIEl0J3MgcHJldHR5IGNsZWFyIHRoYXQgaXRzIGV4aXN0ZW5jZSBhbmQgZnVuY3Rpb25hbGl0eSBhcmUgZnVuZGFtZW50YWxseSBsaW5rZWQgdG8gYE5GX0NPTk5UUkFDS2AuIEkgbWVhbiwgSSdtIGFuYWx5emluZyB0aGlzIGRlcGVuZGVuY3kgYW5kIGl0J3Mgb2J2aW91cy4gYE5GX0ZMT1dfVEFCTEVgIGlzIGJ1aWxkaW5nIHVwb24gdGhlIGNvbm5lY3Rpb24gdHJhY2tpbmcgZnJhbWV3b3JrLiBXaXRob3V0IHRoZSBjb25uZWN0aW9uIHRyYWNraW5nIGluZnJhc3RydWN0dXJlIHByb3ZpZGVkIGJ5IGBORl9DT05OVFJBQ0tgLCBgTkZfRkxPV19UQUJMRWAgd291bGRuJ3QgYmUgYWJsZSB0byBkbyBhbnl0aGluZyB1c2VmdWwuIEl0IHJlbGllcyBvbiB0aGUgc3RhdGUgaW5mb3JtYXRpb24gYW5kIGNvbm5lY3Rpb24gbWV0YWRhdGEgdGhhdCBgTkZfQ09OTlRSQUNLYCBtYW5hZ2VzLiBUaGVyZWZvcmUsIGFueSBhbmFseXNpcywgbW9kaWZpY2F0aW9uIG9yIGRlc2lnbiBjb25zaWRlcmF0aW9ucyByZWxhdGVkIHRvIGBORl9GTE9XX1RBQkxFYCBtdXN0IGluaGVyZW50bHkgYWNjb3VudCBmb3IgYW5kIHRob3JvdWdobHkgdW5kZXJzdGFuZCBob3cgYE5GX0NPTk5UUkFDS2Agb3BlcmF0ZXMuIFRoZXkncmUgaW5leHRyaWNhYmx5IGludGVydHdpbmVkLCBhbmQgYW55IGNoYW5nZXMgdG8gb25lIHdpbGwgdW5kb3VidGVkbHkgaGF2ZSBpbXBsaWNhdGlvbnMgZm9yIHRoZSBvdGhlci4gSXQncyBhIGZ1bmRhbWVudGFsIGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODUsIk91dHB1dFRva2VucyI6MjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozNS43NDA0NDc5MjRaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5MDU2MDMwNjQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEUkXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDM9Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMC1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzExOmNvbmZpZyBORl9GTE9XX1RBQkxFXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIGZsb3cgdGFibGUgbW9kdWxlXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjozOC42NDYwNTk0OThaIiwiU2VxIjozNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2MDE2NjUzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBOZXRmaWx0ZXIncyBDb25maWd1cmF0aW9uKipcblxuT2theSwgdGltZSB0byBnZXQgdG8gdGhlIGhlYXJ0IG9mIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIG9wdGlvbiwgc28gSSdtIGhlYWRpbmcgZGlyZWN0bHkgdG8gdGhlIHNvdXJjZS4gVGhlIEtjb25maWcgZmlsZXMgYXJlIHRoZSBsaWZlYmxvb2Qgb2YgTGludXggY29uZmlndXJhdGlvbiwgYW5kIEknbSBob21pbmcgaW4gb24gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AgYXJvdW5kIGxpbmUgNzExLiBUaGF0IGxpbmUsIGdpdmUgb3IgdGFrZSBhIGZldywgbGlrZWx5IGhvbGRzIHRoZSBrZXkgdG8gdGhlIHNldHRpbmcgSSdtIHRyeWluZyB0byBkZWNpcGhlciBvciBtb2RpZnkuIEknbSBleHBlY3RpbmcgdG8gZmluZCB0aGUgZGVmaW5pdGlvbiwgcG90ZW50aWFsbHkgc29tZSBkZXBlbmRlbmNpZXMsIG1heWJlIGV2ZW4gYSBoZWxwIHRleHQgdGhhdCdzIHdvcnRoIGEgcXVpY2sgc2Nhbi4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZmVhdHVyZSBsaXZlcywgYW5kIHVuZGVyc3RhbmRpbmcgdGhpcyBzZWN0aW9uIGlzIGNyaXRpY2FsLiBJJ20gYnJhY2luZyBteXNlbGYgZm9yIHRoZSB1c3VhbCBLY29uZmlnIHN5bnRheCDigJMgdGhlIGBjb25maWdgIGtleXdvcmQsIHRoZSB0eXBlIGRlY2xhcmF0aW9uLCBtYXliZSBzb21lIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBhbmQgaG9wZWZ1bGx5IHNvbWUgY2xlYXIsIGNvbmNpc2UgZG9jdW1lbnRhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdHJlYXN1cmVzIGF3YWl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzMxOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQyLjAwNjIyOTc4M1oiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzI4NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L25ldGZpbHRlci9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDcwMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDcwMDpcXHRcXG4gNzAxOlxcdGVuZGlmICMgTkZfVEFCTEVTXFxuIDcwMjpcXHRcXG4gNzAzOlxcdGNvbmZpZyBORl9GTE9XX1RBQkxFX0lORVRcXG4gNzA0OlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtaXhlZCBJUHY0L0lQdjYgbW9kdWxlXFxcIlxcbiA3MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9GTE9XX1RBQkxFXFxuIDcwNjpcXHRcXHRoZWxwXFxuIDcwNzpcXHRcXHQgIFRoaXMgb3B0aW9uIGFkZHMgdGhlIGZsb3cgdGFibGUgbWl4ZWQgSVB2NC9JUHY2IHN1cHBvcnQuXFxuIDcwODpcXHRcXG4gNzA5OlxcdFxcdCAgVG8gY29tcGlsZSBpdCBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZS5cXG4gNzEwOlxcdFxcbiA3MTE6XFx0Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG4gNzEyOlxcdFxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuIDcxMzpcXHRcXHRkZXBlbmRzIG9uIE5FVEZJTFRFUl9JTkdSRVNTXFxuIDcxNDpcXHRcXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDS1xcbiA3MTU6XFx0XFx0ZGVwZW5kcyBvbiBORl9UQUJMRVNcXG4gNzE2OlxcdFxcdGhlbHBcXG4gNzE3OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgZmxvdyB0YWJsZSBjb3JlIGluZnJhc3RydWN0dXJlLlxcbiA3MTg6XFx0XFxuIDcxOTpcXHRcXHQgIFRvIGNvbXBpbGUgaXQgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmUuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQyLjAwNjQwNDg5M1oiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgxODMxNDg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBwcmVsaW1pbmFyeSB0aG91Z2h0cywgZXhwcmVzc2VkIGFzIGEgc3VtbWFyeSBpbiB0aGUgZmlyc3QgcGVyc29uLCBhc3N1bWluZyBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqTmV0d29yayBGaWx0ZXIgTW9kdWxlIERlcGVuZGVuY2llcyBcdTAwMjYgSW5pdGlhbCBJbnZlc3RpZ2F0aW9ucyoqXG5cblJpZ2h0LCBsZXQncyB0YWtlIHN0b2NrLiBHaXZlbiB0aGUgYXJjaGl0ZWN0dXJlIEknbSB3b3JraW5nIHdpdGgsIEknbSBwcmV0dHkgY2VydGFpbiB0aGF0IGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AgYXJlIGdvaW5nIHRvIGJlIGFic29sdXRlbHkgZXNzZW50aWFsLiBXZSdyZSB0YWxraW5nIGFib3V0IHRyYWZmaWMgaW5ncmVzcyBmaWx0ZXJpbmcsIGNvbm5lY3Rpb24gdHJhY2tpbmcsIGFuZCB0aGUgdW5kZXJseWluZyBpbmZyYXN0cnVjdHVyZSBvZiB0aGUgbmV0ZmlsdGVyIHN1YnN5c3RlbSwgcmVzcGVjdGl2ZWx5LiBBbGwgcHJldHR5IGZ1bmRhbWVudGFsIGluIG1vc3QgbW9kZXJuIHNldHVwcy5cblxuTm93LCBiZWZvcmUgZGlnZ2luZyBpbiB0b28gZGVlcGx5LCBsZXQncyBqdXN0IHF1aWNrbHkgY29uZmlybSB3aGV0aGVyIG9yIG5vdCB3ZSdsbCBuZWVkIGBORVRfSVBJUGAuIFdlJ2xsIGtub3cgcHJldHR5IHF1aWNrbHkgb25lIHdheSBvciB0aGUgb3RoZXIgaWYgdGhhdCBuZWVkcyB0byBiZSBicm91Z2h0IGludG8gdGhlIGVxdWF0aW9uLiBJdCdzIGEga2V5IG1vZHVsZSB0aGF0IGNvdWxkIGltcGFjdCBob3cgd2UgbmVlZCB0byB0aGluayBhYm91dCBhbGwgb2YgdGhpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc4NjEsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjQ1LjA4ODI0MDkzMVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQ5ODcyMDYyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTkVUX0lQSVBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvS2NvbmZpZz0xNDk9Y29uZmlnIElQX1BOUF9SQVJQXFxuLS1cXG5uZXQvaXB2NC9LY29uZmlnLTE2MS1cXG5uZXQvaXB2NC9LY29uZmlnOjE2Mjpjb25maWcgTkVUX0lQSVBcXG5uZXQvaXB2NC9LY29uZmlnLTE2My1cXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6NDcuNTg2OTcwMDM5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwNjk5ODg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gYG5ldC9pcHY0L0tjb25maWdgKipcblxuT2theSwgdGltZSB0byBnZXQgc3BlY2lmaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMga2VybmVsIGNvbmZpZ3VyYXRpb24gc3BhY2UgYmV0dGVyLCBhbmQgSSB0aGluayBJJ2xsIGZpbmQgc29tZSBhbnN3ZXJzIHdpdGhpbiBgbmV0L2lwdjQvS2NvbmZpZ2AuIEJhc2VkIG9uIHRoZSBjb250ZXh0IG9mIHdoYXQgSSdtIHdvcmtpbmcgb24sIEkgbmVlZCB0byBsb29rIGF0IGEgcGFydGljdWxhciBzZWN0aW9uIHdpdGhpbiB0aGlzIGZpbGUuIExldCdzIHN0YXJ0IGFyb3VuZCBsaW5lIDE2Mi4gSSdtIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gW2luc2VydCByZWxldmFudCBleHBlcnQgdG9waWMgYXJlYV0uIFRoaXMgc2hvdWxkIHByb3ZpZGUgYSBnb29kIGp1bXBpbmctb2ZmIHBvaW50IGZvciBhIGRlZXBlciBkaXZlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODE5MCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjUwLjY1Njk2MTY3OFoiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2lwdjQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNTUsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAxNTU6XFx0XFx0ICBuZXQgdmlhIE5GUyBhbmQgeW91IHdhbnQgdGhlIElQIGFkZHJlc3Mgb2YgeW91ciBjb21wdXRlciB0byBiZVxcbiAxNTY6XFx0XFx0ICBkaXNjb3ZlcmVkIGF1dG9tYXRpY2FsbHkgYXQgYm9vdCB0aW1lIHVzaW5nIHRoZSBSQVJQIHByb3RvY29sIChhblxcbiAxNTc6XFx0XFx0ICBvbGRlciBwcm90b2NvbCB3aGljaCBpcyBiZWluZyBvYnNvbGV0ZWQgYnkgQk9PVFAgYW5kIERIQ1ApLCBzYXkgWVxcbiAxNTg6XFx0XFx0ICBoZXJlLiBOb3RlIHRoYXQgaWYgeW91IHdhbnQgdG8gdXNlIFJBUlAsIGEgUkFSUCBzZXJ2ZXIgbXVzdCBiZVxcbiAxNTk6XFx0XFx0ICBvcGVyYXRpbmcgb24geW91ciBuZXR3b3JrLiBSZWFkXFxuIDE2MDpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbmZzL25mc3Jvb3QucnN0XFx1MDAzZSBmb3IgZGV0YWlscy5cXG4gMTYxOlxcdFxcbiAxNjI6XFx0Y29uZmlnIE5FVF9JUElQXFxuIDE2MzpcXHRcXHR0cmlzdGF0ZSBcXFwiSVA6IHR1bm5lbGluZ1xcXCJcXG4gMTY0OlxcdFxcdHNlbGVjdCBJTkVUX1RVTk5FTFxcbiAxNjU6XFx0XFx0c2VsZWN0IE5FVF9JUF9UVU5ORUxcXG4gMTY2OlxcdFxcdGhlbHBcXG4gMTY3OlxcdFxcdCAgVHVubmVsaW5nIG1lYW5zIGVuY2Fwc3VsYXRpbmcgZGF0YSBvZiBvbmUgcHJvdG9jb2wgdHlwZSB3aXRoaW5cXG4gMTY4OlxcdFxcdCAgYW5vdGhlciBwcm90b2NvbCBhbmQgc2VuZGluZyBpdCBvdmVyIGEgY2hhbm5lbCB0aGF0IHVuZGVyc3RhbmRzIHRoZVxcbiAxNjk6XFx0XFx0ICBlbmNhcHN1bGF0aW5nIHByb3RvY29sLiBUaGlzIHBhcnRpY3VsYXIgdHVubmVsaW5nIGRyaXZlciBpbXBsZW1lbnRzXFxuIDE3MDpcXHRcXHQgIGVuY2Fwc3VsYXRpb24gb2YgSVAgd2l0aGluIElQLCB3aGljaCBzb3VuZHMga2luZCBvZiBwb2ludGxlc3MsIGJ1dFxcbiAxNzE6XFx0XFx0ICBjYW4gYmUgdXNlZnVsIGlmIHlvdSB3YW50IHRvIG1ha2UgeW91ciAob3Igc29tZSBvdGhlcikgbWFjaGluZVxcbiAxNzI6XFx0XFx0ICBhcHBlYXIgb24gYSBkaWZmZXJlbnQgbmV0d29yayB0aGFuIGl0IHBoeXNpY2FsbHkgaXMsIG9yIHRvIHVzZVxcbiAxNzM6XFx0XFx0ICBtb2JpbGUtSVAgZmFjaWxpdGllcyAoYWxsb3dpbmcgbGFwdG9wcyB0byBzZWFtbGVzc2x5IG1vdmUgYmV0d2VlblxcbiAxNzQ6XFx0XFx0ICBuZXR3b3JrcyB3aXRob3V0IGNoYW5naW5nIHRoZWlyIElQIGFkZHJlc3NlcykuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA2OjUwLjY1NzA3MDUyOFoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTE2MDc0Mjk2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyaXplZCB0aG91Z2h0IHByb2Nlc3MsIHByZXNlbnRlZCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqQ2hlY2tpbmcgZm9yIElQdjYgVHVubmVsIENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBrZWVwIGl0IGNsZWFuIGFuZCBlZmZpY2llbnQuIE5vIG5lZWQgdG8gYnJpbmcgaW4gYW55IGV4dGVybmFsIGxpYnJhcmllcyBvciBwYWNrYWdlcyByaWdodCBub3c7IHRoYXQganVzdCBhZGRzIHVubmVjZXNzYXJ5IGNvbXBsZXhpdHkuIEkgd2FudCB0aGlzIGFzIHN0cmVhbWxpbmVkIGFzIHBvc3NpYmxlLiBUaGUgcHJpbWFyeSBmb2N1cyBoZXJlIGlzIHRvIGFzc2VzcyB0aGUgY3VycmVudCBlbnZpcm9ubWVudCdzIElQdjYgdHVubmVsaW5nIHNpdHVhdGlvbi4gVGhlIGZpcnN0IGxvZ2ljYWwgc3RlcCBpcyB0byBjaGVjayB0aGUgYElQVjZfVFVOTkVMYCBzZXR0aW5nLiBUaGlzIHNlZW1zIGxpa2UgdGhlIG9idmlvdXMgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBrbm93IGlmIGFuIElQdjYgdHVubmVsIGlzIGFscmVhZHkgY29uZmlndXJlZCwgb3IgYXQgbGVhc3QgaWYgaXQncyBleHBsaWNpdGx5IGVuYWJsZWQuIFRoYXQncyB0aGUgY29yZSBxdWVzdGlvbiBJIG5lZWQgYW5zd2VyZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4NzYxLCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1My43NzMxNDc1MTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0NDY4MzAwNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIElQVjZfVFVOTkVMXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L0tjb25maWc9MTk2PWNvbmZpZyBJUFY2X05ESVNDX05PREVUWVBFXFxuLS1cXG5uZXQvaXB2Ni9LY29uZmlnLTE5OC1cXG5uZXQvaXB2Ni9LY29uZmlnOjE5OTpjb25maWcgSVBWNl9UVU5ORUxcXG5uZXQvaXB2Ni9LY29uZmlnLTIwMC1cXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1Ni4yMTk5ODM0ODZaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjc5MjkyODI1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyB5b3UgcmVxdWVzdGVkOlxuXG4qKk5hdmlnYXRpbmcgdGhlIElQdjYgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgSVB2NiBzdHVmZiBhbmQgSSB0aGluayBJJ2xsIHN0YXJ0IGJ5IGZvY3VzaW5nIG9uIGBuZXQvaXB2Ni9LY29uZmlnYC4gU3BlY2lmaWNhbGx5LCBhcm91bmQgbGluZSAxOTkuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4sIGhvcGVmdWxseSwgaXQncyB3aGVyZSB0aGUgY29yZSBJUHY2IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZC4gVGhpcyBgS2NvbmZpZ2AgZmlsZSBpcyB0aGUgaGVhcnQgb2YgdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uIHN5c3RlbSwgcmlnaHQ/IFNvLCB0aGlzIGlzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3RpbmcgZGVjaXNpb25zIHJlbGF0ZWQgdG8gSVB2NiBzaG91bGQgYmUgaGFuZ2luZyBvdXQuIFRpbWUgdG8gc2VlIHdoYXQga2luZCBvZiBrbm9icyB3ZSBoYXZlIHRvIHR3ZWFrIGluIHRoaXMgYXJlYS4gSG9wZWZ1bGx5LCBpdCdzIGxhaWQgb3V0IGluIGEgY2xlYXIsIHNlbnNpYmxlIG1hbm5lciFcblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNjo1OS4wMTI5MTQ2MThaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAxNjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY2L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdFxcbiAxOTY6XFx0Y29uZmlnIElQVjZfTkRJU0NfTk9ERVRZUEVcXG4gMTk3OlxcdFxcdGJvb2xcXG4gMTk4OlxcdFxcbiAxOTk6XFx0Y29uZmlnIElQVjZfVFVOTkVMXFxuIDIwMDpcXHRcXHR0cmlzdGF0ZSBcXFwiSVB2NjogSVAtaW4tSVB2NiB0dW5uZWwgKFJGQzI0NzMpXFxcIlxcbiAyMDE6XFx0XFx0c2VsZWN0IElORVQ2X1RVTk5FTFxcbiAyMDI6XFx0XFx0c2VsZWN0IERTVF9DQUNIRVxcbiAyMDM6XFx0XFx0c2VsZWN0IEdST19DRUxMU1xcbiAyMDQ6XFx0XFx0aGVscFxcbiAyMDU6XFx0XFx0ICBTdXBwb3J0IGZvciBJUHY2LWluLUlQdjYgYW5kIElQdjQtaW4tSVB2NiB0dW5uZWxzIGRlc2NyaWJlZCBpblxcbiAyMDY6XFx0XFx0ICBSRkMgMjQ3My5cXG4gMjA3OlxcdFxcbiAyMDg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyMDk6XFx0XFxuIDIxMDpcXHRjb25maWcgSVBWNl9HUkVcXG4gMjExOlxcdFxcdHRyaXN0YXRlIFxcXCJJUHY2OiBHUkUgdHVubmVsXFxcIlxcbiAyMTI6XFx0XFx0c2VsZWN0IElQVjZfVFVOTkVMXFxuIDIxMzpcXHRcXHRzZWxlY3QgTkVUX0lQX1RVTk5FTFxcbiAyMTQ6XFx0XFx0ZGVwZW5kcyBvbiBORVRfSVBHUkVfREVNVVhcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDY6NTkuMDEzMDE4NjQ5WiIsIlNlcSI6NDcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NTI4NzE4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgRmxvdyBPZmZsb2FkaW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhlc2Uga2VybmVsIGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gZmxvdyBvZmZsb2FkaW5nLCBhbmQgSSB3YW50IHRvIG1ha2Ugc3VyZSBJIGhhdmUgZXZlcnl0aGluZyBJIG5lZWQuIE5vIHNwZWNpYWwgZGVwZW5kZW5jaWVzLCB3aGljaCBpcyBnb29kIOKAkyBpdCBzaW1wbGlmaWVzIHRoaW5ncy4gUmlnaHQgbm93LCBJJ20gd29ya2luZyB3aXRoIHRoZXNlIGNvbmZpZ3MgaW4gcGFydGljdWxhcjogYE5GX0ZMT1dfVEFCTEVgLCBgTkZUX0ZMT1dfT0ZGTE9BRGAsIGBORVRfSVBJUGAsIGBJUFY2X1RVTk5FTGAsIGBORVRGSUxURVJfSU5HUkVTU2AsIGBORl9DT05OVFJBQ0tgLCBhbmQgYE5GX1RBQkxFU2AuIFNlZW1zIGxpa2UgYSBwcmV0dHkgc3RhbmRhcmQgYmFzZSB0byBnZXQgc3RhcnRlZC5cblxuTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzIHdoZXRoZXIgYE5GVF9GTE9XX09GRkxPQURgIGFsb25lIGlzIHN1ZmZpY2llbnQgZm9yIHdoYXQgSSdtIHRyeWluZyB0byBhY2hpZXZlLiBJJ20gd29uZGVyaW5nIGlmIEkgYWxzbyBuZWVkIHRvIGJyaW5nIGluIGBORl9GTE9XX1RBQkxFX0lORVRgIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBkZXBlbmRpbmcgb24gd2hhdCBJIGhhdmUgYXZhaWxhYmxlIGFuZCBpZiBpdCBpcyBuZWVkZWQgZm9yIG15IHNwZWNpZmljIGltcGxlbWVudGF0aW9uLiBNeSB0aG91Z2h0cyBhcmUgZm9jdXNpbmcgYXJvdW5kIHRoZXNlIHJlbGF0aW9uc2hpcHMuIEl0J3MgY2xlYXIgdGhhdCBgTkZUX0ZMT1dfT0ZGTE9BRGAgaXMgdGhlIGRyaXZlciwgdGhlIGNvcmUgZXhwcmVzc2lvbi4gTWVhbndoaWxlLCBgTkZfRkxPV19UQUJMRWAgaXMgdGhlIGZ1bmRhbWVudGFsIGJhc2UuIEFuZCB0aGVuIEkgbmVlZCB0byBjb25zaWRlciBgTkZfRkxPV19UQUJMRV9JTkVUYCwgd2hpY2ggSSBiZWxpZXZlIGhhbmRsZXMgbWl4ZWQgSVB2NC9JUHY2IHNjZW5hcmlvcy4gVGhlcmUncyBhbHNvIHRoZSBwb3NzaWJpbGl0eSBvZiBzZXBhcmF0ZSBtb2R1bGVzIGxpa2UgYE5GX0ZMT1dfVEFCTEVfSVBWNGAgYW5kIGBORl9GTE9XX1RBQkxFX0lQVjZgLCB3aGljaCBjb3VsZCBiZSByZWxldmFudCBkZXBlbmRpbmcgb24gdGhlIHRhcmdldCBzeXN0ZW0uIEkgbmVlZCB0byBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGVzZSBtb2R1bGVzIHRvIGVuc3VyZSBvcHRpbWFsIHBlcmZvcm1hbmNlIGFuZCBjb21wYXRpYmlsaXR5LiBJJ2xsIG5lZWQgdG8gZG8gc29tZSB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MSwiT3V0cHV0VG9rZW5zIjoyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2NSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA3OjAzLjU2NTg5MjkyMloiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU0ODg3MTE2NCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5GX0ZMT1dfVEFCTEVfSVBWXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNzowNi4xMTQ3NzY2NDZaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4OTc3NzMzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqS2NvbmZpZyBDaGVjay1JbioqXG5cbk9rYXksIHRpbWUgdG8gY2lyY2xlIGJhY2sgdG8gYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2AuIEknbSBnb2luZyB0byBxdWlja2x5IHJldmlldyBpdCBhZ2FpbiwgZW5zdXJpbmcgbm8gc2lnbmlmaWNhbnQgY2hhbmdlcyBoYXZlIHNsaXBwZWQgaW4gdW5ub3RpY2VkIHNpbmNlIHRoZSBsYXN0IHN3ZWVwLiBTcGVjaWZpY2FsbHksIEknbSBsb29raW5nIGZvciBhbnl0aGluZyB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgZXhpc3RpbmcgY29uZmlndXJhdGlvbnMgSSdtIGZhbWlsaWFyIHdpdGgsIHBlcmhhcHMgbmV3IGRlcGVuZGVuY2llcywgb3IgcmVncmVzc2lvbnMgaW4gZXhpc3Rpbmcgb3B0aW9ucy4gR2l2ZW4gdGhlIHNjb3BlIG9mIG5ldGZpbHRlciwgYW5kIHRoZSBpbnRlcmNvbm5lY3RlZG5lc3Mgb2YgdmFyaW91cyBzdWItbW9kdWxlcywgYSBmcmVzaCBsb29rIGlzIGFsd2F5cyB3YXJyYW50ZWQsIGV2ZW4gaWYgSSAqdGhpbmsqIEkndmUgZ290IGEgaGFuZGxlIG9uIHRoZSByZWNlbnQgbW9kaWZpY2F0aW9ucy4gSXTigJlzIGFib3V0IGVuc3VyaW5nIHN0YWJpbGl0eSBhbmQgYW50aWNpcGF0aW5nIGFueSBwb3RlbnRpYWwgaW50ZWdyYXRpb24gaXNzdWVzIGRvd24gdGhlIGxpbmUuIEl0IGlzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBhIHRob3JvdWdoIHJldmlldyBvZiB0aGUgS2NvbmZpZyBpcyBrZXkgdG8gbWFpbnRhaW5pbmcgb3VyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGJyb2FkZXIgYXJjaGl0ZWN0dXJlIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDA2NywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI0VDIzOjA3OjA5LjEwNDU1NzExWiIsIlNlcSI6NTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc2MTU2MTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTEuODgwNzE5NjMzWiIsIlNlcSI6NTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzM0NjA1MzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDaGVja2xpc3QqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gZmxvdyBvZmZsb2FkIGNhcGFiaWxpdGllcy4gRmlyc3QsIEknbGwgZXhwbGljaXRseSBpbmNsdWRlIGBORl9GTE9XX1RBQkxFX0lORVRgLCBqdXN0IHRvIGJlIGNlcnRhaW4uIENhbid0IGh1cnQgdG8gY292ZXIgYWxsIGJhc2VzIGFuZCBlbnN1cmUgdGhhdCB0aGUgaW5ldCB0YWJsZSBpcyB0aGVyZS5cblxuTm93LCB0byBtYWtlIHN1cmUgSSd2ZSBnb3QgYSBjb21wcmVoZW5zaXZlIHNldCBvZiBjb25maWd1cmF0aW9ucyB0byByZXZpZXcsIEknbGwgZ28gdGhyb3VnaCB0aGUgcGVydGluZW50IGNvbmZpZ3MuIEkgbmVlZCB0byB0aGluayB0aHJvdWdoOlxuXG4qICAgYE5GX0ZMT1dfVEFCTEVgIC0gVGhlIGJhc2UgZmxvdyB0YWJsZSBmdW5jdGlvbmFsaXR5LCBvYnZpb3VzbHkgYSBwcmVyZXF1aXNpdGUuXG4qICAgYE5GVF9GTE9XX09GRkxPQURgIC0gVGhpcyBpcyB0aGUgY2VudHJhbCBwaWVjZSwgdGhlIHRhcmdldCBJJ20gYWltaW5nIGZvci5cbiogICBgTkVUX0lQSVBgIC0gSXMgdGhpcyBnb2luZyB0byBtYXR0ZXI/IENvdWxkIGJlIGlmIEkgaGF2ZSBmbG93cyBnb2luZyB0byBvciBmcm9tIGEgdHVubmVsLlxuKiAgIGBJUFY2X1RVTk5FTGAgLSBTYW1lIHRob3VnaHQgcHJvY2VzcyBhcyB0aGUgSVB2NCB0dW5uZWwuIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGlzIHdoZW4gY29uc2lkZXJpbmcgbXkgZmxvdyBydWxlcy5cbiogICBgTkVURklMVEVSX0lOR1JFU1NgIC0gSW5ncmVzcyBmaWx0ZXJpbmcgaXMgaW1wb3J0YW50LCBzbyB0aGlzIHNob3VsZCBiZSBmaW5lLlxuKiAgIGBORl9DT05OVFJBQ0tgIC0gQ29ubmVjdGlvbiB0cmFja2luZywgZXNzZW50aWFsIGZvciBhbnkgc3RhdGVmdWwgb3BlcmF0aW9ucyBhbmQgdG8gYXZvaWQgd2VpcmQgYmVoYXZpb3IuXG4qICAgYE5GX1RBQkxFU2AgLSBUaGUgZm91bmRhdGlvbiBmb3IgbmV0ZmlsdGVyIHRhYmxlcywgc28gaXQncyBjcml0aWNhbC5cblxuSSdsbCBhbHNvIGhhdmUgdG8gZGl2ZSBkZWVwZXIgYW5kIHNlZSBpZiBgTkZUX0ZMT1dfT0ZGTE9BRGAgaGFzIGFueSBvdGhlciBoaWRkZW4gZGVwZW5kZW5jaWVzIHRoYXQgYXJlbid0IGltbWVkaWF0ZWx5IG9idmlvdXMuIE5lZWQgdG8gbWFrZSBhYnNvbHV0ZWx5IHN1cmUgZXZlcnl0aGluZyBpcyBpbiBwbGFjZSBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSBhbmQgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0OTksIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTYuMTU0MTgzODk2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MjQ0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvbmV0ZmlsdGVyL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNDk4LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDk4OlxcdGNvbmZpZyBORlRfRVhUSERSX0RDQ1BcXG4gNDk5OlxcdFxcdGJvb2wgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgZXh0aGRyIERDQ1Agc3VwcG9ydCAoREVQUkVDQVRFRClcXFwiXFxuIDUwMDpcXHRcXHRkZWZhdWx0IG5cXG4gNTAxOlxcdFxcdGhlbHBcXG4gNTAyOlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyBzdXBwb3J0IGZvciBtYXRjaGluZyBvbiBEQ0NQIGV4dGVuc2lvbiBoZWFkZXJzLlxcbiA1MDM6XFx0XFxuIDUwNDpcXHRjb25maWcgTkZUX0ZMT1dfT0ZGTE9BRFxcbiA1MDU6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXFx1MDAyNlxcdTAwMjYgTkZfRkxPV19UQUJMRVxcbiA1MDY6XFx0XFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBuZl90YWJsZXMgaGFyZHdhcmUgZmxvdyBvZmZsb2FkIG1vZHVsZVxcXCJcXG4gNTA3OlxcdFxcdGhlbHBcXG4gNTA4OlxcdFxcdCAgVGhpcyBvcHRpb24gYWRkcyB0aGUgXFxcImZsb3dfb2ZmbG9hZFxcXCIgZXhwcmVzc2lvbiB0aGF0IHlvdSBjYW4gdXNlIHRvXFxuIDUwOTpcXHRcXHQgIGNob29zZSB3aGF0IGZsb3dzIGFyZSBwbGFjZWQgaW50byB0aGUgaGFyZHdhcmUuXFxuIDUxMDpcXHRcXG4gNTExOlxcdGNvbmZpZyBORlRfQ09OTkxJTUlUXFxuIDUxMjpcXHRcXHR0cmlzdGF0ZSBcXFwiTmV0ZmlsdGVyIG5mX3RhYmxlcyBjb25ubGltaXQgbW9kdWxlXFxcIlxcbiA1MTM6XFx0XFx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0tcXG4gNTE0OlxcdFxcdGRlcGVuZHMgb24gTkVURklMVEVSX0FEVkFOQ0VEXFxuIDUxNTpcXHRcXHRzZWxlY3QgTkVURklMVEVSX0NPTk5DT1VOVFxcbiA1MTY6XFx0XFx0aGVscFxcbiA1MTc6XFx0XFx0ICBUaGlzIG9wdGlvbiBhZGRzIHRoZSBcXFwiY29ubmxpbWl0XFxcIiBleHByZXNzaW9uIHRoYXQgeW91IGNhbiB1c2UgdG9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjRUMjM6MDc6MTYuMTU0MzUwMTc1WiIsIlNlcSI6NTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc2MjU1NTUzNTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLZXJuZWwgUGF0Y2ggZm9yIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWU6IGBORl9DT05OVFJBQ0tgIGFuZCBgTkZfRkxPV19UQUJMRWAuIFRob3NlIGFyZSB0aGUgY3JpdGljYWwgcGllY2VzIHRvIHVuZGVyc3RhbmQuXG5cbkZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoZSBjb3JlIGZ1bmN0aW9ucyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLiBUaGUgZmFjdCB0aGF0IHRoZXNlIGFyZSBleHBvcnRlZCwgbm90IHN0YXRpYywgaXMgaW1wb3J0YW50LCBpdCBtYWtlcyB0aGVtIGVhc2lseSByZWFjaGFibGUuIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGlzIGEgZnVuZGFtZW50YWwgY29yZSBuZXR3b3JraW5nIGZ1bmN0aW9uLCB3aGlsZSBgbmZ0X2Zsb3dfcm91dGVgIHNpdHMgc3F1YXJlbHkgaW4gdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHNwYWNlLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgYnVnOiBmYWlsaW5nIHRvIHJlbGVhc2UgdGhlIGBkc3RgIHdoZW4gYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgZW5jb3VudGVycyBhbiBpc3N1ZS4gVGhlbiB0aGVyZSBpcyBhbiBpbXBvcnRhbnQgZGV0YWlsOiB0aGUgY29kZSB1cGRhdGVzIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAgdG8gYXZvaWQgY2FsbGluZyBgbmZfcm91dGVgIGJ5IGxldmVyYWdpbmcgdGhlIGBkc3RgIGVudHJ5LiBUaGF0J3MgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy5cblxuR2l2ZW4gdGhhdCB0aGVzZSBmdW5jdGlvbnMgdG91Y2ggYm90aCBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIsIGFuZCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IHRoZXkgaW50ZXJhY3QsIHRoaXMgaXMgKmRlZmluaXRlbHkqIHdvcnRoIGZ1enppbmcuIFRoZSBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlIHdpdGggZnVuY3Rpb25hbCBjaGFuZ2VzLlxuXG5TbywgdG8gcHJlcGFyZSwgSSdsbCBuZWVkIHRvIGZvY3VzIG9uIGBkZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFuZCBgbmZ0X2Zsb3dfcm91dGVgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdGhlIHJlbGV2YW50IGtlcm5lbCBjb25maWdzIGFyZSBlbmFibGVkOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgYE5FVF9JUElQYCwgYElQVjZfVFVOTkVMYCwgYE5FVEZJTFRFUl9JTkdSRVNTYCwgYE5GX0NPTk5UUkFDS2AsIGFuZCBgTkZfVEFCTEVTYC4gVGhpcyBzaG91bGQgZ2V0IHRoZSByZWxldmFudCBwYXJ0cyBvZiB0aGUgY29kZSBjb21waWxlZCBpbi4gVGhpcyBpbmNsdWRlcyB0aGUgSVAvSVB2NiB0dW5uZWwgY29kZSBhbmQgdGhlIG5ldGZpbHRlciBvZmZsb2FkIHBhdGguIFRoaXMgc2hvdWxkIGdldCBtZSBhIGdvb2QgZnV6emluZyBzZXR1cCB0byB1bmNvdmVyIGFueSBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0aWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTI2OSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNFQyMzowNzoyMy43Nzk5MDg2MzFaIiwiU2VxIjo1NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjI1MTA1OTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIk5FVF9JUElQXCIsXG4gICAgXCJJUFY2X1RVTk5FTFwiLFxuICAgIFwiTkVURklMVEVSX0lOR1JFU1NcIixcbiAgICBcIk5GX0NPTk5UUkFDS1wiLFxuICAgIFwiTkZfVEFCTEVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG5ldHdvcmtpbmcgYGRldl9maWxsX2ZvcndhcmRfcGF0aGAgbG9naWMgYW5kIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBJUC9JUHY2IHR1bm5lbHMgKGBpcGlwYCwgYGlwNl90dW5uZWxgKSB0byBzdG9yZSBhbmQgbWFuYWdlIGEgYGRzdF9lbnRyeWAuIEl0IGFsc28gdXBkYXRlcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgb2ZmbG9hZCBwYXRoIChgbmZ0X2Zsb3dfcm91dGVgKSB0byB1c2UgdGhpcyBgZHN0X2VudHJ5YCBpbnN0ZWFkIG9mIHBlcmZvcm1pbmcgYSBuZXcgcm91dGUgbG9va3VwLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIGluIHJlYWNoYWJsZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[1] Phase: Succeeded StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-24 23:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-24 23:07:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2] Phase: Succeeded StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-24 23:07:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-24 23:07:34 +0000 UTC FinishedAt: 2026-07-24 23:07:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1311844295/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-24 23:07:56 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-24 23:07:56 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +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:*ada104ea-d644-4c74-98ec-249e0e810dc2,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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1311844295/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": "b38ebec8-4e21-46bc-980f-5a40198a6821", "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-workflowxkzxk/series-workflowxkzxk-build-action-500969565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-24 23:07:56 +0000 UTC FinishedAt: 2026-07-24 23:42:40 +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:*ada104ea-d644-4c74-98ec-249e0e810dc2,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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1311844295/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": "b38ebec8-4e21-46bc-980f-5a40198a6821", "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-workflowxkzxk/series-workflowxkzxk-build-action-500969565/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:43:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-24 23:42:50 +0000 UTC FinishedAt: 2026-07-24 23:42:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1895834870/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-24 23:43:00 +0000 UTC FinishedAt: 2026-07-24 23:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-24 23:43:00 +0000 UTC FinishedAt: 2026-07-24 23:45:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b38ebec8-4e21-46bc-980f-5a40198a6821,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-workflowxkzxk/series-workflowxkzxk-build-action-500969565/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-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-24 23:45:26 +0000 UTC FinishedAt: 2026-07-24 23:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-24 23:45:26 +0000 UTC FinishedAt: 2026-07-24 23:45:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-24 23:45:26 +0000 UTC FinishedAt: 2026-07-25 00:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-24 23:45:26 +0000 UTC FinishedAt: 2026-07-25 00:21: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:*ada104ea-d644-4c74-98ec-249e0e810dc2,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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1895834870/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": "860c6879-340a-4185-a548-4756d103f939", "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-workflowxkzxk/series-workflowxkzxk-build-action-3381742586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-24 23:45:26 +0000 UTC FinishedAt: 2026-07-25 00:21:26 +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:*ada104ea-d644-4c74-98ec-249e0e810dc2,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-workflowxkzxk/series-workflowxkzxk-convert-artifact-1895834870/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": "860c6879-340a-4185-a548-4756d103f939", "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-workflowxkzxk/series-workflowxkzxk-build-action-3381742586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-25 00:21:36 +0000 UTC FinishedAt: 2026-07-25 00:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-25 00:21:36 +0000 UTC FinishedAt: 2026-07-25 00:21:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-25 00:21:36 +0000 UTC FinishedAt: 2026-07-25 00:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-25 00:21:36 +0000 UTC FinishedAt: 2026-07-25 00:23:15 +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:*860c6879-340a-4185-a548-4756d103f939,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-workflowxkzxk/series-workflowxkzxk-build-action-3381742586/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-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +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":["dev_fill_forward_path","nft_flow_route"],"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:*b38ebec8-4e21-46bc-980f-5a40198a6821,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*860c6879-340a-4185-a548-4756d103f939,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-workflowxkzxk/series-workflowxkzxk-build-action-500969565/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-workflowxkzxk/series-workflowxkzxk-build-action-3381742586/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 00:23:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 00:23:31 +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":["dev_fill_forward_path","nft_flow_route"],"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-workflowxkzxk/series-workflowxkzxk-convert-artifact-4089396763/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 00:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 00:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-25 00:23:25 +0000 UTC FinishedAt: 2026-07-25 00:23:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-25 00:23:35 +0000 UTC FinishedAt: 2026-07-25 03:26:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxkzxk[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["dev_fill_forward_path","nft_flow_route"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cca2780b61947fd27ec621541edd0902e193a609","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","NET_IPIP","IPV6_TUNNEL","NETFILTER_INGRESS","NF_CONNTRACK","NF_TABLES"],"series_id":"a17edc2f-97a7-42c2-bb26-58458dae960a","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-25 00:23:35 +0000 UTC FinishedAt: 2026-07-25 03:25:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b38ebec8-4e21-46bc-980f-5a40198a6821,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*860c6879-340a-4185-a548-4756d103f939,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-workflowxkzxk/series-workflowxkzxk-build-action-500969565/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-workflowxkzxk/series-workflowxkzxk-build-action-3381742586/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-workflowxkzxk/series-workflowxkzxk-convert-artifact-4089396763/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,}