Name: series-workflow2k4ql Phase: Succeeded StartedAt: 2026-06-30 16:30:57 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[0] Phase: Succeeded StartedAt: 2026-06-30 16:30:57 +0000 UTC FinishedAt: 2026-06-30 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[0].run-triage Phase: Succeeded StartedAt: 2026-06-30 16:30:57 +0000 UTC FinishedAt: 2026-06-30 16:43:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP_MULTICAST" ], "series_id": "97614b76-5426-4ce3-b3b3-e2d7a2135990" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_fill_ifmcaddr", "inet_ifmcaddr_notify", "inet6_fill_ifmcaddr", "inet6_ifmcaddr_notify" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXRfaWZtY2FkZHJfbm90aWZ5JiMzNDssCiAgICAmIzM0O2luZXQ2X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldDZfaWZtY2FkZHJfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhkMDQzNDljZDY0ZTIxOThjZWNiOTM4MThmZDhiZTg5MTI4YzIwOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxNjo0MjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTEyMyw2ICYjNDM7MTIzLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBtYy11c2Vyc1xuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuIFxuIFxuIG9wZXJhdGlvbnM6XG5AQCAtMTc2LDYgJiM0MzsxNzksNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICB2YWx1ZTogNThcbiAgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2bWNhZGRyLWF0dHJzXG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiYjNDM7ICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBlbnVtIHtcbiBcdElGQV9SVF9QUklPUklUWSxcdC8qIHUzMiwgcHJpb3JpdHkvbWV0cmljIGZvciBwcmVmaXggcm91dGUgKi9cbiBcdElGQV9UQVJHRVRfTkVUTlNJRCxcbiBcdElGQV9QUk9UTyxcdFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cbiYjNDM7XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG4gXHRfX0lGQV9NQVgsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li4xMTZjZTdjZWM4MGVkYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTQ3Myw2ICYjNDM7MTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTtcbiBcbiBcdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tXHUwMDNldXNlcnMpKSBcdTAwM2MgMCB8fFxuIFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcdTAwMjZjaSkgXHUwMDNjIDApIHtcbiBcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiBcdFx0cmV0dXJuIC1FTVNHU0laRTtcbkBAIC0xNDk0LDYgJiM0MzsxNDk1LDcgQEAgc3RhdGljIHZvaWQgaW5ldF9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdHNrYiA9IG5sbXNnX25ldyhOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpICYjNDM7XG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpICYjNDM7XG4mIzQzO1x0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC01MjY0LDYgJiM0Mzs1MjY0LDcgQEAgaW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHB1dF9pZmFkZHJtc2cobmxoLCAxMjgsIElGQV9GX1BFUk1BTkVOVCwgc2NvcGUsIGlmaW5kZXgpO1xuIFx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcdTAwMjZpZm1jYS1cdTAwM2VtY2FfYWRkcikgXHUwMDNjIDAgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpZm1jYS1cdTAwM2VtY2FfdXNlcnMpKSBcdTAwM2MgMCB8fFxuIFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cdTAwM2VtY2FfY3N0YW1wLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3RzdGFtcCksXG4gXHRcdFx0ICBJTkZJTklUWV9MSUZFX1RJTUUsIElORklOSVRZX0xJRkVfVElNRSkgXHUwMDNjIDApIHtcbiBcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuY1xuaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbWNhc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbWNhc3QuY1xuQEAgLTkwOCw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSAmIzQzO1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSAmIzQzO1xuJiM0MztcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcbiBcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSxcbiBcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdGlmICghc2tiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAzNjIyNDEzZDc5M2RhOS4uMGM2N2M3YzAwZDg0MWMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMiwyNyAmIzQzOzIsMTA2IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIGltcG9ydCBzb2NrZXRcbiYjNDM7aW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4tZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4mIzQzO0lQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtcXHhlZlxceDAxXFx4MDFcXHgwMSYjMzk7XG4mIzQzO0lQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gbWMtdXNlcnMgZm9yIGdycCBvbiBpZmluZGV4LCBvciAwIGlmIGFic2VudC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBhZGRycyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBmYW1pbHl9LCBkdW1wPVRydWUpXG4mIzQzOyAgICBtYXRjaGVzID0gW2FkZHIgZm9yIGFkZHIgaW4gYWRkcnNcbiYjNDM7ICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBncnAgYW5kIGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gPT0gaWZpbmRleF1cbiYjNDM7ICAgIGlmIG5vdCBtYXRjaGVzOlxuJiM0MzsgICAgICAgIHJldHVybiAwXG4mIzQzOyAgICBpZiAmIzM5O21jLXVzZXJzJiMzOTsgbm90IGluIG1hdGNoZXNbMF06XG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gbWF0Y2hlc1swXVsmIzM5O21jLXVzZXJzJiMzOTtdXG4mIzQzO1xuIFxuIGRlZiBkdW1wX21jYWRkcl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIFZlcmlmeSB0aGF0IGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UgaGFzIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcy5cbi0gICAgQXQgbGVhc3QgdGhlIGxvb3BiYWNrIGludGVyZmFjZSBzaG91bGQgaGF2ZSB0aGlzIGFkZHJlc3MuXG4mIzQzOyAgICBWZXJpZnkgSVB2NCBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCB0aGVpciB1c2VyIGNvdW50cyBpbiBSVE1fR0VUTVVMVElDQVNULlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgbG8gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4mIzQzOyAgICAgICAgICAgIGxvX2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM5O2xvJiMzOTspXG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4mIzQzOyAgICAgICAgICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc1xuJiM0MzsgICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1RcbiYjNDM7ICAgICAgICAgICAgXVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Tm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgbXJlcSA9IElQVjRfVEVTVF9NVUxUSUNBU1QgJiM0Mzsgc29ja2V0LmluZXRfYXRvbigmIzM5OzEyNy4wLjAuMSYjMzk7KVxuJiM0MzsgICAgICAgICAgICBiZWZvcmUgPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULCBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4mIzQzOyAgICAgICAgICAgIGlmIGJlZm9yZSBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcbiYjNDM7ICAgICAgICAgICAgICAgIHMyLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbiYjNDM7ICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBmXCYjMzQ7dXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZcJiMzNDsoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFZlcmlmeSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuLSAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuLSAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpXG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBsbyB1cFwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCYjMzk7bG8mIzM5OylcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNl9URVNUX01VTFRJQ0FTVCwgbG9faWR4KVxuJiM0MzsgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtcmVxID0gSVBWNl9URVNUX01VTFRJQ0FTVCAmIzQzOyBzdHJ1Y3QucGFjaygmIzM5Oz1JJiMzOTssIGxvX2lkeClcbiYjNDM7ICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuJiM0MzsgICAgICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgICAgICBzMS5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4mIzQzOyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4gXG4tICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWyYjMzk7bXVsdGljYXN0JiMzOTtdID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxuLSAgICBdXG4mIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4mIzQzOyAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZlwmIzM0O0lQdjYgdXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZcJiMzNDsoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuLSAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbi0gICAgICAgICAgICBcJiMzNDtObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3NcJiMzNDspXG4gXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTU2LDcgJiM0MzsxMzUsNyBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgIGZcJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cJiMzNDspXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldF9pZm1jYWRkcl9ub3RpZnkmIzM0OywKICAgICYjMzQ7aW5ldDZfZmlsbF9pZm1jYWRkciYjMzQ7LAogICAgJiMzNDtpbmV0Nl9pZm1jYWRkcl9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBJRkFfTUNfVVNFUlMgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMTY6NDI6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAxNjNhMTA2YzQxYmI0NS4uMGVjYmQyNGM4OTBjNmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbApAQCAtMTIzLDYgJiM0MzsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogcHJvdG8KICAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBtYy11c2VycwomIzQzOyAgICAgICAgdHlwZTogdTMyCiAKIAogb3BlcmF0aW9uczoKQEAgLTE3Niw2ICYjNDM7MTc5LDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO21jYWRkci1hdHRycwogICAgICAgICAgICAgLSBtdWx0aWNhc3QKJiM0MzsgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBlbnVtIHsKIAlJRkFfUlRfUFJJT1JJVFksCS8qIHUzMiwgcHJpb3JpdHkvbWV0cmljIGZvciBwcmVmaXggcm91dGUgKi8KIAlJRkFfVEFSR0VUX05FVE5TSUQsCiAJSUZBX1BST1RPLAkJLyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi8KJiM0MzsJSUZBX01DX1VTRVJTLAkJLyogdTMyLCBtdWx0aWNhc3QgZ3JvdXAgdXNlcnMgKi8KIAlfX0lGQV9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYjYzMzdhNDdjMTQxODUuLjExNmNlN2NlYzgwZWRhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xNDczLDYgJiM0MzsxNDczLDcgQEAgaW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTsKIAogCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS0mZ3Q7bXVsdGlhZGRyKSAmbHQ7IDAgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tJmd0O3VzZXJzKSkgJmx0OyAwIHx8CiAJICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmYW1wO2NpKSAmbHQ7IDApIHsKIAkJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTE0OTQsNiAmIzQzOzE0OTUsNyBAQCBzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCiAJc2tiID0gbmxtc2dfbmV3KE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkgJiM0MzsKIAkJCW5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKSAmIzQzOwomIzQzOwkJCW5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwogCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmFfY2FjaGVpbmZvKSksCiAJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC01MjY0LDYgJiM0Mzs1MjY0LDcgQEAgaW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXB1dF9pZmFkZHJtc2cobmxoLCAxMjgsIElGQV9GX1BFUk1BTkVOVCwgc2NvcGUsIGlmaW5kZXgpOwogCWlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgJmFtcDtpZm1jYS0mZ3Q7bWNhX2FkZHIpICZsdDsgMCB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpZm1jYS0mZ3Q7bWNhX3VzZXJzKSkgJmx0OyAwIHx8CiAJICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS0mZ3Q7bWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLSZndDttY2FfdHN0YW1wKSwKIAkJCSAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpICZsdDsgMCkgewogCQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTkwOCw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSAmIzQzOwogCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICYjNDM7CiYjNDM7CQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CiAJCQlubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghc2tiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMzYyMjQxM2Q3OTNkYTkuLjBjNjdjN2MwMGQ4NDFjIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTIsMjcgJiM0MzsyLDEwNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiBpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKLWZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseQogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKJiM0MztJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XHhlZlx4MDFceDAxXHgwMSYjMzk7CiYjNDM7SVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UmV0dXJuIG1jLXVzZXJzIGZvciBncnAgb24gaWZpbmRleCwgb3IgMCBpZiBhYnNlbnQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIGFkZHJzID0gcnRubC5nZXRtdWx0aWNhc3QoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBmYW1pbHl9LCBkdW1wPVRydWUpCiYjNDM7ICAgIG1hdGNoZXMgPSBbYWRkciBmb3IgYWRkciBpbiBhZGRycwomIzQzOyAgICAgICAgICAgICAgIGlmIGFkZHJbJiMzOTttdWx0aWNhc3QmIzM5O10gPT0gZ3JwIGFuZCBhZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdID09IGlmaW5kZXhdCiYjNDM7ICAgIGlmIG5vdCBtYXRjaGVzOgomIzQzOyAgICAgICAgcmV0dXJuIDAKJiM0MzsgICAgaWYgJiMzOTttYy11c2VycyYjMzk7IG5vdCBpbiBtYXRjaGVzWzBdOgomIzQzOyAgICAgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsgICAgcmV0dXJuIG1hdGNoZXNbMF1bJiMzOTttYy11c2VycyYjMzk7XQomIzQzOwogCiBkZWYgZHVtcF9tY2FkZHJfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwotICAgIFZlcmlmeSB0aGF0IGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UgaGFzIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcy4KLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy4KJiM0MzsgICAgVmVyaWZ5IElQdjQgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGxvIHVwJiMzNDspCiYjNDM7ICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KCkKJiM0MzsgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJiMzOTtsbyYjMzk7KQomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHsmIzM0O2lmYS1mYW1pbHkmIzM0Ozogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpCiYjNDM7CiYjNDM7ICAgICAgICAgICAgYWxsX2hvc3RfbXVsdGljYXN0cyA9IFsKJiM0MzsgICAgICAgICAgICAgICAgYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXMKJiM0MzsgICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QKJiM0MzsgICAgICAgICAgICBdCiYjNDM7CiYjNDM7ICAgICAgICAgICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O05vIGludGVyZmFjZSBmb3VuZCB3aXRoIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcyYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIG1yZXEgPSBJUFY0X1RFU1RfTVVMVElDQVNUICYjNDM7IHNvY2tldC5pbmV0X2F0b24oJiMzOTsxMjcuMC4wLjEmIzM5OykKJiM0MzsgICAgICAgICAgICBiZWZvcmUgPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULCBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiYjNDM7ICAgICAgICAgICAgczIgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSkKJiM0MzsgICAgICAgICAgICAgICAgczIuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX0FERF9NRU1CRVJTSElQLCBtcmVxKQomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNF9URVNUX01VTFRJQ0FTVCwgbG9faWR4KQomIzQzOyAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMmIzM0OykKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGYmIzM0O3VzZXJzIGRlbHRhICE9IDIgYWZ0ZXIgdHdvIGpvaW5zICYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZiYjMzQ7KGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGZpbmFsbHk6CiYjNDM7ICAgICAgICAgICAgICAgIHMxLmNsb3NlKCkKJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKQomIzQzOwomIzQzOwomIzQzO2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IElQdjYgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC4KICAgICAmIzM0OyYjMzQ7JiMzNDsKIAotICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpCi0gICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOgomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgbG8gdXAmIzM0OykKJiM0MzsgICAgICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgICAgIGxvX2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM5O2xvJiMzOTspCiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NiYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIG1yZXEgPSBJUFY2X1RFU1RfTVVMVElDQVNUICYjNDM7IHN0cnVjdC5wYWNrKCYjMzk7PUkmIzM5OywgbG9faWR4KQomIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKQomIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKQomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9KT0lOX0dST1VQLCBtcmVxKQomIzQzOyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpCiAKLSAgICBhbGxfaG9zdF9tdWx0aWNhc3RzID0gWwotICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWyYjMzk7bXVsdGljYXN0JiMzOTtdID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVAotICAgIF0KJiM0MzsgICAgICAgICAgICAgICAgYWZ0ZXJfam9pbiA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQ2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NiYjMzQ7KQomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZiYjMzQ7SVB2NiB1c2VycyBkZWx0YSAhPSAyIGFmdGVyIHR3byBqb2lucyAmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGYmIzM0OyhiZWZvcmU9e2JlZm9yZX0sIGFmdGVyPXthZnRlcl9qb2lufSkmIzM0OykKJiM0MzsgICAgICAgICAgICBmaW5hbGx5OgomIzQzOyAgICAgICAgICAgICAgICBzMS5jbG9zZSgpCiYjNDM7ICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAotICAgIGtzZnRfZ2UobGVuKGFsbF9ob3N0X211bHRpY2FzdHMpLCAxLAotICAgICAgICAgICAgJiMzNDtObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3MmIzM0OykKIAogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwpAQCAtNTYsNyAmIzQzOzEzNSw3IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICAgICAgICAgICAgZiYjMzQ7Tm8gJiMzOTtmb3J3YXJkaW5nIG9uJiMzOTsgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9JiMzNDspCiAKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCByZWxhdGVkIHRvIG11bHRpY2FzdCBhZGRyZXNzZXMuIEl0JiMzOTtzIHRvdWNoaW5nIGBydC1hZGRyLnlhbWxgIGFuZCBgaWZfYWRkci5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYWRkaW5nIG5ldyBhdHRyaWJ1dGVzIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZS4KClRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGluZXRfZmlsbF9pZm1jYWRkcmAgKGluIGBuZXQvaXB2NC9pZ21wLmNgKSBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIChpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiB3ZSByZXF1ZXN0IG9yIGdldCBub3RpZmljYXRpb25zIGFib3V0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gVGhlIHBhdGNoIGlzIGluY2x1ZGluZyB0aGUgYElGQV9NQ19VU0VSU2AgYXR0cmlidXRlIHRoZXJlLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyB0byBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YCwgd2hpY2ggc3VnZ2VzdHMgd2UmIzM5O3JlIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRlZCBidWZmZXIgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhpcyBuZXcgYXR0cmlidXRlIGluIG5vdGlmaWNhdGlvbnMuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwuIEl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucy4gU28sIGFueXRoaW5nIHRoYXQgcXVlcmllcyBvciBsaXN0ZW5zIGZvciBtdWx0aWNhc3QgZ3JvdXAgaW5mb3JtYXRpb24gdmlhIG5ldGxpbmsgc29ja2V0cyAoc3BlY2lmaWNhbGx5IGBSVE1fR0VUTVVMVElDQVNUYCkgd2lsbCBiZSBpbXBhY3RlZCwgYXMgd2VsbCBhcyBtdWx0aWNhc3QgZ3JvdXAgam9pbnMgYW5kIGxlYXZlcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgc3BlY2lmaWNhbGx5OgoKKiAgIGBpbmV0X2ZpbGxfaWZtY2FkZHJgCiogICBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgCiogICBgaW5ldDZfZmlsbF9pZm1jYWRkcmAKKiAgIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgCgpJIGFtIGFsc28gaW50ZXJlc3RlZCBpbiBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBvbiBhbGwgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bGwgZG8gYSBxdWljayBncmVwLiBTaW5jZSBpdCBpcyBpbiBgbmV0L2lwdjQvaWdtcC5jYCwgSSYjMzk7bGwgbG9vayBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdtcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEzLVx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJR01QIE1vZHVsZSBDb21waWxhdGlvbioqCgpSaWdodCwgc28gYGlnbXAub2AuLi4gdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQgd2l0aCBJUHY0LCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBob3cgdGhlIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoaXMuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBfTVVMVElDQVNUYD8gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgZGl2aW5nIGludG8gdGhlIHNvdXJjZSBmb3IgYG5ldC9pcHY0L2lnbXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHByb2JhYmx5IGd1YXJkZWQgYnkgdGhhdCBtYWNyby4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGUgbXVsdGljYXN0IHN1cHBvcnQgaXMgZW5hYmxlZCBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBfTVVMVElDQVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYy0xMDktXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTExLS8qIFBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIGlnbXAtdjItMDYgZHJhZnQgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjAxPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMS1cbm5ldC9pcHY0L2lnbXAuYzoyMTI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTMtXG4tLVxubmV0L2lwdjQvaWdtcC5jPTExNzk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMTg3LVxubmV0L2lwdjQvaWdtcC5jOjExODg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMTg5LS8qXG4tLVxubmV0L2lwdjQvaWdtcC5jPTEzMDg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzMTAtXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cdTAwM2VpbnRlcmZhY2U7XG5uZXQvaXB2NC9pZ21wLmM6MTMxMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzMTItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGluX2Rldi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzIwLVxubmV0L2lwdjQvaWdtcC5jOjEzMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzIyLVx0aWYgKGltLVx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTM1Mj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTM1NC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxMzU1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTM1Ni1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzNjMtXG5uZXQvaXB2NC9pZ21wLmM6MTM2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzNjUtXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTU2NS1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmltLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvaWdtcC5jOjE1NjY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNTY3LVx0dGltZXJfc2V0dXAoXHUwMDI2aW0tXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTU3NS1cbm5ldC9pcHY0L2lnbXAuYzoxNTc2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTU3Ny1cdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzQ0PXN0YXRpYyB2b2lkIGlwX21jX3Jlam9pbl9ncm91cHMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxubmV0L2lwdjQvaWdtcC5jLTE3NDUte1xubmV0L2lwdjQvaWdtcC5jOjE3NDY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNzQ3LVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODI2PXZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODMyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxODMzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTgzNC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODQyPXZvaWQgaXBfbWNfZG93bihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4NTAtXG5uZXQvaXB2NC9pZ21wLmM6MTg1MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE4NTItXHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2Vtcl9pZmNfY291bnQsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODYyLVxubmV0L2lwdjQvaWdtcC5jOjE4NjM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODY0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTg3OD12b2lkIGlwX21jX2luaXRfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTg4MS1cbm5ldC9pcHY0L2lnbXAuYzoxODgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg4My1cdHRpbWVyX3NldHVwKFx1MDAyNmluX2Rldi1cdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODkzPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTAyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTAzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTkwNC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTE0PXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTIxLVx0aXBfbWNfZG93bihpbl9kZXYpO1xubmV0L2lwdjQvaWdtcC5jOjE5MjI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTIzLVx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTcxPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTk5MS1cdGlmICghcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0lOQ0xVREVdIFx1MDAyNlx1MDAyNiAhcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0VYQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MTk5MjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5OTMtXHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cdTAwM2VpbnRlcmZhY2U7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXHRcdFx0cG1jLVx1MDAzZXNvdXJjZXMgPSBwc2YtXHUwMDNlc2ZfbmV4dDtcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjAwMy1cdFx0aWYgKHBzZi1cdTAwM2VzZl9vbGRpbiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjAxNS1cbm5ldC9pcHY0L2lnbXAuYzoyMDE2OiNpZm5kZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwMTctI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVx0ZG8geyB9IHdoaWxlICgwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDIwPXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA0MC1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L2lwdjQvaWdtcC5jOjIwNDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDQyLVx0c2ZfbWFya3N0YXRlKHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNjAtXHQgICAgcG1jLVx1MDAzZXNmY291bnRbTUNBU1RfSU5DTFVERV0pIHtcbm5ldC9pcHY0L2lnbXAuYzoyMDYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjA2Mi1cdFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA2Ny1cdFx0cG1jLVx1MDAzZXNmbW9kZSA9IE1DQVNUX0lOQ0xVREU7XG5uZXQvaXB2NC9pZ21wLmM6MjA2ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNjktXHRcdHBtYy1cdTAwM2VjcmNvdW50ID0gaW5fZGV2LVx1MDAzZW1yX3FydiA/OiBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2lnbXBfcXJ2KTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjA4Nj1zdGF0aWMgaW50IGlwX21jX2FkZDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMTMtXG5uZXQvaXB2NC9pZ21wLmM6MjExNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMTUtc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTIxOTI9c3RhdGljIGludCBpcF9tY19hZGRfc3JjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyICpwbWNhLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjEzLVxubmV0L2lwdjQvaWdtcC5jOjIyMTQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjE1LVx0c2ZfbWFya3N0YXRlKHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIyMzMtXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVx1MDAzZXNmY291bnRbTUNBU1RfRVhDTFVERV0gIT0gMCkpIHtcbm5ldC9pcHY0L2lnbXAuYzoyMjM0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjIzNS1cdFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjI0NC1cdFx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcbm5ldC9pcHY0L2lnbXAuYzoyMjQ1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjI0Ni1cdFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXG4tLVxubmV0L2lwdjQvaWdtcC5jPTI5NTk9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yOTcwLVxubmV0L2lwdjQvaWdtcC5jOjI5NzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yOTcyLVx0XHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVx1MDAzZWluX2RldikgPyBcJiMzNDtWMVwmIzM0OyA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBJUHY0IGFuZCBJUHY2IE11bHRpY2FzdCBBZGRyZXNzIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBiaXQgb2YgYSBxdWlyayBoZXJlIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JUF9NVUxUSUNBU1RgIGlzLCBvYnZpb3VzbHksIHJlbGF0ZWQgdG8gSUdNUC4gQnV0IHRoZW4gSSBub3RpY2VkIHRoYXQgYGluZXRfZmlsbF9pZm1jYWRkcmAgaXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBIbW0sIHRoYXQmIzM5O3Mgb2RkLiBMZXQgbWUgZG91YmxlLWNoZWNrIC0gb2ggcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYWx3YXlzIGluY2x1ZGVkLiBUaGF0IG1ha2VzIHNlbnNlLgoKU28sIHNpbmNlIGl0JiMzOTtzIGluIHRoZSBJR01QIGNvZGUsIEkgbmVlZCB0byBsb29rIGF0IElQdjYgYXMgd2VsbC4gSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY2L2FkZHJjb25mLmNgIGFuZCBgbmV0L2lwdjYvbWNhc3QuY2AuIE9rYXksIGJvdGggb2YgdGhlc2UgYXJlICphbHdheXMqIGNvbXBpbGVkIGZvciBJUHY2LCBhcyBleHBlY3RlZC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElQdjYgYmVpbmcgYSByZXF1aXJlbWVudCBmb3IgdGhpcy4gSSBndWVzcyB0aGF0IG1ha2VzIHNlbnNlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbWFuYWdlbWVudCBhY3R1YWxseSB3b3Jrcy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmljYWxseTogYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2ZpbGxfaWZtY2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTE4NDE9c3RhdGljIGludCBpbl9kZXZfZHVtcF9pZm1jYWRkcihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTUtXHRcdH1cbm5ldC9pcHY0L2RldmluZXQuYzoxODU2Olx0XHRlcnIgPSBpbmV0X2ZpbGxfaWZtY2FkZHIoc2tiLCBpbl9kZXYtXHUwMDNlZGV2LCBpbSwgZmlsbGFyZ3MpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTctXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE0MzY9c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDQ5LVxubmV0L2lwdjQvaWdtcC5jOjE0NTA6aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0NTEtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE0ODY9c3RhdGljIHZvaWQgaW5ldF9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTUwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNTA0Olx0ZXJyID0gaW5ldF9maWxsX2lmbWNhZGRyKHNrYiwgZGV2LCBpbSwgXHUwMDI2ZmlsbGFyZ3MpO1xubmV0L2lwdjQvaWdtcC5jLTE1MDUtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oPTU9c3RydWN0IGluZXRfZmlsbF9hcmdzIHtcbi0tXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmgtMTMtXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmg6MTQ6aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTE1LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGlwX21jX2xpc3QgKmltLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIFJldHJpZXZhbCBQcm9jZXNzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBtdWx0aWNhc3QgaW50ZXJmYWNlIGFkZHJlc3NlcyBhcmUgaGFuZGxlZC4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIGBpbl9kZXZfZHVtcF9pZm1jYWRkcmAgaXMgdGhlIGtleSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzcGVjaWZpYyB0cmFjZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBpbmV0X2R1bXBfaWZtY2FkZHJgLCB3aGljaCBpcyBpdHNlbGYgdGhlIGhhbmRsZXIgZm9yIHRoZSBgUlRNX0dFVE1VTFRJQ0FTVGAgcm91dGluZyBtZXNzYWdlLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gVGhlbiBJIGNhbiBzZWUgdGhhdCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGlzIGNhbGxlZCB3aGVuZXZlciBhIGdyb3VwIGlzIGVpdGhlciBhZGRlZCBvciBkcm9wcGVkLCB3aXRoIGEgZGlyZWN0IGNhbGwgZnJvbSBgaWdtcF9ncm91cF9hZGRlZGAgYW5kIGBpZ21wX2dyb3VwX2Ryb3BwZWRgLiBUaG9zZSBmdW5jdGlvbiBjYWxscywgd2hpY2ggYXJlIGFsc28gcmVmZXJlbmNlZCBhcyBgaXBfbWNfaW5jX2dyb3VwYCBhbmQgYGlwX21jX2RlY19ncm91cGAsIG1ha2Ugc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgSVB2NiBjb3VudGVycGFydHMgdG8gc2VlIGlmIHRoZXkgZm9sbG93IGEgc2ltaWxhciBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgaW5ldDZfZmlsbF9pZm1jYWRkcmAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgIHRvIHVuZGVyc3RhbmQgaG93IElQdjYgaGFuZGxlcyB0aGVzZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCBub3RpZmljYXRpb25zLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgcGFyYWxsZWwgdmlldyBvZiB0aGUgcHJvY2VzcywgYW5kIHRoZW4gSSBjYW4gY29tcGFyZSB0aGVtIGZvciBwb3NzaWJsZSBkaWZmZXJlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfZmlsbF9pZm1jYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jPTUxNjQ9c3RhdGljIGludCBpbmV0Nl9maWxsX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI0MS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NTI0MjppbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjQzLVx0XHRcdGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMxND1zdGF0aWMgaW50IGluNl9kdW1wX2FkZHJzKGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01MzQ5LVx0XHRcdFx0Y29udGludWU7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUzNTA6XHRcdFx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBmaWxsYXJncyk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUzNTEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTg5ND1zdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTkxNi1cbm5ldC9pcHY2L21jYXN0LmM6OTE3Olx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBcdTAwMjZmaWxsYXJncyk7XG5uZXQvaXB2Ni9tY2FzdC5jLTkxOC1cdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIHNlZW0gdG8gYmUgYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY3JpdGljYWwgcGllY2VzIGZvciBtYW5hZ2luZyBtdWx0aWNhc3QgYWRkcmVzc2VzLCBib3RoIElQdjQgYW5kIElQdjYuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBJUHY2LiBJIGtub3cgYENPTkZJR19JUFY2YCBpcyBhIGdpdmVuLCB0aGF0JiMzOTtzIGp1c3QgZnVuZGFtZW50YWwuIEJ1dCB0aGUgcXVlc3Rpb24gaXMsICp3aGF0IGVsc2UqIGRvIEkgbmVlZCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnIHRvIGhhdmUgYSBmdW5jdGlvbmFsIG11bHRpY2FzdCBzZXR1cCBmb3IgSVB2Nj8gVGhlcmUgaGFzIHRvIGJlIG1vcmUgdG8gaXQgdGhhbiBqdXN0IHRoYXQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGltZSB0byBleHBsb3JlIHRoZSBjb25maWcgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9tY2FzdC5jPTg2Mz1zdGF0aWMgc3RydWN0IGlmbWNhZGRyNiAqbWNhX2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy04OTMtXG5uZXQvaXB2Ni9tY2FzdC5jOjg5NDpzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L21jYXN0LmMtODk1LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWZtY2FkZHI2ICppZm1jYSwgaW50IGV2ZW50KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9OTMzPXN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTk3My1cdGlnbXA2X2dyb3VwX2FkZGVkKG1jKTtcbm5ldC9pcHY2L21jYXN0LmM6OTc0Olx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGRldiwgbWMsIFJUTV9ORVdNVUxUSUNBU1QpO1xubmV0L2lwdjYvbWNhc3QuYy05NzUtXHRtdXRleF91bmxvY2soXHUwMDI2aWRldi1cdTAwM2VtY19sb2NrKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTk4OT1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTAwNS1cdFx0XHRcdGlnbXA2X2dyb3VwX2Ryb3BwZWQobWEpO1xubmV0L2lwdjYvbWNhc3QuYzoxMDA2Olx0XHRcdFx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGlkZXYtXHUwMDNlZGV2LCBtYSxcbm5ldC9pcHY2L21jYXN0LmMtMTAwNy1cdFx0XHRcdFx0XHQgICAgICBSVE1fREVMTVVMVElDQVNUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBmb3IgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFkeSB0byBnbzsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIGZ1enppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFyZToKCiogICBgaW5ldF9maWxsX2lmbWNhZGRyYAoqICAgYGluZXRfaWZtY2FkZHJfbm90aWZ5YAoqICAgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgCiogICBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YAoKTm93LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIGBpbmV0X2ZpbGxfaWZtY2FkZHJgIGFuZCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAgYXJlIHBhcnQgb2YgbmV0bGluayBkdW1wcy4gTmV0bGluayBkdW1wcyBhcmVuJiMzOTt0IGV4YWN0bHkgaG90LCBoaWdoLXBlcmZvcm1hbmNlIHBhdGhzIGluIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBtdWx0aWNhc3QgYWRkcmVzcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgX25vdGlmeWAgdmFyaWFudHMsIGxpa2UgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAsIGFyZSB0cmlnZ2VyZWQgd2hlbiBtdWx0aWNhc3QgZ3JvdXBzIGFyZSBqb2luZWQgb3IgbGVmdCwgd2hpY2ggaXNuJiMzOTt0IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCBlaXRoZXIuCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0ODUtXG5uZXQvaXB2NC9pZ21wLmM6MTQ4NjpzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0ODctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGlwX21jX2xpc3QgKmltLCBpbnQgZXZlbnQpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1MjA9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTc5LVx0aWdtcF9ncm91cF9hZGRlZChpbSk7XG5uZXQvaXB2NC9pZ21wLmM6MTU4MDpcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cdTAwM2VkZXYsIGltLCBSVE1fTkVXTVVMVElDQVNUKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTgxLVx0aWYgKCFpbl9kZXYtXHUwMDNlZGVhZClcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTc3OD12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTc5Ny1cdFx0XHRcdF9faWdtcF9ncm91cF9kcm9wcGVkKGksIGdmcCk7XG5uZXQvaXB2NC9pZ21wLmM6MTc5ODpcdFx0XHRcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cdTAwM2VkZXYsIGksXG5uZXQvaXB2NC9pZ21wLmMtMTc5OS1cdFx0XHRcdFx0XHQgICAgIFJUTV9ERUxNVUxUSUNBU1QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgRnVuY3Rpb24gQ2FsbCBDb250ZXh0KioKCk9rYXksIHNvIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9ucywgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGFuZCBgX19pcF9tY19kZWNfZ3JvdXBgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgKmJvdGgqIG9mIHRoZXNlIHNlZW0gdG8gYmUgY29tcGlsZWQgaW4gcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBmZWVscyBhIGJpdCBvZGQsIGFuZCBwb3RlbnRpYWxseSBpbmVmZmljaWVudCBpZiB3ZSYjMzk7cmUgbm90IGFjdHVhbGx5IHVzaW5nIG11bHRpY2FzdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFNvLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hldGhlciBvciBub3QgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUYCBibG9jay4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0IG9yIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX19faXBfbWNfaW5jX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE1MTktICovXG5uZXQvaXB2NC9pZ21wLmM6MTUyMDpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXG5uZXQvaXB2NC9pZ21wLmMtMTUyMS1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1ODc9dm9pZCBfX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLCBnZnBfdCBnZnApXG5uZXQvaXB2NC9pZ21wLmMtMTU4OC17XG5uZXQvaXB2NC9pZ21wLmM6MTU4OTpcdF9fX19pcF9tY19pbmNfZ3JvdXAoaW5fZGV2LCBhZGRyLCBNQ0FTVF9FWENMVURFLCBnZnApO1xubmV0L2lwdjQvaWdtcC5jLTE1OTAtfVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMjgxPXN0YXRpYyBpbnQgX19pcF9tY19qb2luX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMjQtXHRyY3VfYXNzaWduX3BvaW50ZXIoaW5ldC1cdTAwM2VtY19saXN0LCBpbWwpO1xubmV0L2lwdjQvaWdtcC5jOjIzMjU6XHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgbW9kZSwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pZ21wLmMtMjMyNi1cdGVyciA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQ4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk11bHRpY2FzdCBHcm91cCBNYW5hZ2VtZW50OiBBIENvbmZpZyBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtdWx0aWNhc3Qgc3R1ZmYsIHNwZWNpZmljYWxseSBob3cgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBnZXRzIHRyaWdnZXJlZC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBtdWx0aWNhc3QgZ3JvdXAgbWFuYWdlbWVudCwgdGhlIGpvaW5pbmcgYW5kIGxlYXZpbmcgb2YgZ3JvdXBzIGhhbmRsZWQgYnkgc29tZXRoaW5nIGxpa2UgYF9fX19pcF9tY19pbmNfZ3JvdXBgLCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBObyBtYXR0ZXIgd2hhdC4gVGhhdCYjMzk7cyBldmlkZW50IGZyb20gdGhlIGZhY3QgdGhhdCBgbmV0L2lwdjQvaWdtcC5jYCBhbmQgdGhhdCBmdW5jdGlvbiBhcmUgYWx3YXlzIGluY2x1ZGVkLiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZG9lcyBlbmFibGUgSUdNUCBwcm90b2NvbCBzcGVjaWZpYyBmZWF0dXJlcywgd2hpY2ggYXJlIG9idmlvdXNseSBzZXBhcmF0ZS4KClNvLCBpbiB0aGVvcnksIEkgZG9uJiMzOTt0ICpuZWVkKiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZW5hYmxlZCBmb3IgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCB0byBiZSBjYWxsZWQuIFN0aWxsLCBpdCBmZWVscyBsaWtlIGEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgaXQsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgc29tZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIEkmIzM5O20gbm90IHNlZWluZyByaWdodCBub3cuIEFuZCByZWFsaXN0aWNhbGx5LCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zIGFueXdheS4gV2UgY2FuIHByb2JhYmx5IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGFscmVhZHkgb24uCgpIb3dldmVyLCBJUHY2IGlzIGFuIGVudGlyZWx5IHNlcGFyYXRlIGJlYXN0LiBJICprbm93KiBgbmV0L2lwdjYvbWNhc3QuY2AgaXMgaW52b2x2ZWQgZm9yIElQdjYgbXVsdGljYXN0LiBTbyBsZXQmIzM5O3MgY2hlY2sgaXQgb3ZlciB0byBsb29rIGZvciB0aG9zZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L21jYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgSVB2NiBNdWx0aWNhc3QgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9pcHY2L21jYXN0LmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG9idmlvdXM6IHRoaXMgZmlsZSwgYW5kIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBpdCBpbXBsZW1lbnRzLCBpcyAqb25seSogY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBXaXRob3V0IElQdjYgc3VwcG9ydCBhcyBhIHdob2xlLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBJUHY2IG11bHRpY2FzdCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrIHRpZWQgdG8gdGhlIGJyb2FkZXIgSVB2NiBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2QgZXhwZWN0IHRoaXMuIEdvb2QgdG8gc2VlIHRoaXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGV4cGxpY2l0bHkgZGVmaW5lZCwga2VlcGluZyB0aGUga2VybmVsIGxlYW4gd2hlcmUgaXQgY2FuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY2FzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMC1cdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjExOlx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTEyLVx0XHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYG1jYXN0Lm9gIGFuZCBSZWxhdGVkIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYG1jYXN0Lm9gIG1vZHVsZS4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLgoKU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgdHdvIGtleSBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXMgYXJlIGNsZWFybHkgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3by4gVGhleSYjMzk7cmUgb2J2aW91c2x5IGNvdXBsZWQgaGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxldGllcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgaWYgdGhhdCBgSUZBX01DX1VTRVJTYCBzeW1ib2wgaXMgdXRpbGl6ZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgYW5kIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUZBX01DX1VTRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg9MjY9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0zOC1cdElGQV9QUk9UTyxcdFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6Mzk6XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTQwLVx0X19JRkFfTUFYLFxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNDUwPWludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQ3NS1cdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC9pZ21wLmM6MTQ3NjpcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGltLVx1MDAzZXVzZXJzKSkgXHUwMDNjIDAgfHxcbm5ldC9pcHY0L2lnbXAuYy0xNDc3LVx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcdTAwMjZjaSkgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTUyNDI9aW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjYtXHRpZiAobmxhX3B1dF9pbjZfYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIFx1MDAyNmlmbWNhLVx1MDAzZW1jYV9hZGRyKSBcdTAwM2MgMCB8fFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjY3Olx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3VzZXJzKSkgXHUwMDNjIDAgfHxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI2OC1cdCAgICBwdXRfY2FjaGVpbmZvKHNrYiwgaWZtY2EtXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV90c3RhbXApLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk9Mjk9ZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTEtICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjUyOiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS01My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTYyLSAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjYzOiAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNjQtICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTcyPWRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04NC0gICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk6ODU6ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTg2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTYtICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk6OTc6ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTIGZvciBJUHY2XCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS05OC0gICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbmFsIGluIG5hdHVyZSBhbmQgZGVmaW5pdGVseSB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYC4gSSBzaG91bGQgYWxzbyBxdWlja2x5IHZlcmlmeSBpZiBgSVBWNl9NUk9VVEVgIG9yIGFueSByZWxhdGVkIG9wdGlvbiBpcyBuZWVkZWQsIGJ1dCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IGl0IGlzbiYjMzk7dC4gWWVhaCwgYG1jYXN0LmNgIGFuZCBgYWRkcmNvbmYuY2AgYXJlIGNvbnNpc3RlbnRseSBjb21waWxlZCB3aXRoIGBJUFY2YCwgc28gdGhhdCYjMzk7cyBoYW5kbGVkLgoKSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBzbyBJJiMzOTtsbCByZXZpZXcgdGhlIGRpZmYuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUuIE5vdyB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBtaW5pbWFsLCBzaW1wbHkgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGluIHRoZSByZXNwb25zZS4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhICpuZXcqIG5ldGxpbmsgYXR0cmlidXRlLCBldmVuIGEgc21hbGwgY2hhbmdlIGxpa2UgdGhpcyBjb3VsZCBiZSBzaWduaWZpY2FudCBmb3IgZnV6emluZzsgbmV0bGluayBtZXNzYWdlcyBhcmUgYSBnb29kIHNvdXJjZSBvZiBidWdzLiBUaGUga2VybmVsIGlzIG5vdyBzZW5kaW5nIGBJRkFfTUNfVVNFUlNgIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBpbiB1c2VyIHNwYWNlIChhbmQga2VybmVsIHNwYWNlKSwgc28gSSB3aWxsIGNoZWNrIHRoZSBrZXJuZWwgY29kZSB0byBzZWUgaWYgdGhpcyBuZXcgYXR0cmlidXRlIGlzIHBhcnNlZCB0aGVyZS4gSSBkb24mIzM5O3Qgc2VlIHBhcnNpbmcsIHNvIGl0IHNlZW1zIHRoZSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgaXMgb25seSBhZGRlZCB0byByZXNwb25zZXMuIEkgc3RpbGwgd2FudCB0byBmdXp6IHRoaXMsIHNpbmNlIGl0JiMzOTtzIGEgbmV3IGF0dHJpYnV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUZBX01DX1VTRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0NzUtXHRpZiAobmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgaW0tXHUwMDNlbXVsdGlhZGRyKSBcdTAwM2MgMCB8fFxubmV0L2lwdjQvaWdtcC5jOjE0NzY6XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cdTAwM2V1c2VycykpIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC9pZ21wLmMtMTQ3Ny1cdCAgICBubGFfcHV0KHNrYiwgSUZBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgXHUwMDI2Y2kpIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01MjQyPWludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjY2LVx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcdTAwMjZpZm1jYS1cdTAwM2VtY2FfYWRkcikgXHUwMDNjIDAgfHxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTI2NzpcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV91c2VycykpIFx1MDAzYyAwIHx8XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjgtXHQgICAgcHV0X2NhY2hlaW5mbyhza2IsIGlmbWNhLVx1MDAzZW1jYV9jc3RhbXAsIFJFQURfT05DRShpZm1jYS1cdTAwM2VtY2FfdHN0YW1wKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTMKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsICpvbmx5KiBzZW5kcyB0aGUgZGF0YSwgYnV0IHRoYXQmIzM5O3MgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXBzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBoYW5kbGluZyBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLiBFdmVuIGlmIGl0JiMzOTtzICYjMzQ7anVzdCYjMzQ7IHNlbmRpbmcgZGF0YSwgaXQmIzM5O3MgYSBuZXcgYXR0cmlidXRlLCBgSUZBX01DX1VTRVJTYCwgYW5kIHRoYXQgKmFsd2F5cyogaW1wYWN0cyB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBtZXNzYWdlLiBUaGlzIHBhdGNoIGFsc28gdG91Y2hlcyBjcnVjaWFsIGFsbG9jYXRpb24gc2l6ZXMgd2l0aGluIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBJZiB0aG9zZSBhbGxvY2F0aW9ucyBhcmUgb2ZmLCBpdCBjb3VsZCBsZWFkIHRvIGEgbmFzdHkgYnVmZmVyIG92ZXJmbG93IG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYSBjb25jZXJuaW5nIHdhcm5pbmcsIGFuZCB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVG8gZW5zdXJlIHRob3JvdWdoIGNvdmVyYWdlLCBJIHdpbGwgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCB0byBib3RoIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IG1vZGlmaWVzIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGRlZXAgd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBGb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLCB0aGUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZmlsbF9pZm1jYWRkciYjMzQ7LAogICAgJiMzNDtpbmV0X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXQ2X2lmbWNhZGRyX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIElGQV9NQ19VU0VSUyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzIGFuZCBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIGFsbG9jYXRpb24gc2l6ZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXRfaWZtY2FkZHJfbm90aWZ5JiMzNDssCiAgICAmIzM0O2luZXQ2X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldDZfaWZtY2FkZHJfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjAzLjEyNzU2ODA5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTg0MzExMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MDMuMTI3NTc4MTE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc4MTc0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDE2OjQyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuQEAgLTEyMyw2ICsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHByb3RvXFxuICAgICAgICAgdHlwZTogdThcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG1jLXVzZXJzXFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBcXG4gb3BlcmF0aW9uczpcXG5AQCAtMTc2LDYgKzE3OSw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6IFxcdTAwMjZtY2FkZHItYXR0cnNcXG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcXG4rICAgICAgICAgICAgLSBtYy11c2Vyc1xcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuaW5kZXggYWE3OTU4YjRlNDFkMDQuLjdmYjYzMGI3ZmUzMTFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgZW51bSB7XFxuIFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuIFxcdElGQV9UQVJHRVRfTkVUTlNJRCxcXG4gXFx0SUZBX1BST1RPLFxcdFxcdC8qIHU4LCBhZGRyZXNzIHByb3RvY29sICovXFxuK1xcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiBcXHRfX0lGQV9NQVgsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uMTE2Y2U3Y2VjODBlZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXFxuKysrIGIvbmV0L2lwdjQvaWdtcC5jXFxuQEAgLTE0NzMsNiArMTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Y2kuaWZhX3ZhbGlkID0gSU5GSU5JVFlfTElGRV9USU1FO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfaW5fYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIGltLVxcdTAwM2VtdWx0aWFkZHIpIFxcdTAwM2MgMCB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cXHUwMDNldXNlcnMpKSBcXHUwMDNjIDAgfHxcXG4gXFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcXHUwMDI2Y2kpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbkBAIC0xNDk0LDYgKzE0OTUsNyBAQCBzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0c2tiID0gbmxtc2dfbmV3KE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkgK1xcbiBcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSkgK1xcbitcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbiBcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSxcXG4gXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghc2tiKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbkBAIC01MjY0LDYgKzUyNjQsNyBAQCBpbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0cHV0X2lmYWRkcm1zZyhubGgsIDEyOCwgSUZBX0ZfUEVSTUFORU5ULCBzY29wZSwgaWZpbmRleCk7XFxuIFxcdGlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgXFx1MDAyNmlmbWNhLVxcdTAwM2VtY2FfYWRkcikgXFx1MDAzYyAwIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdXNlcnMpKSBcXHUwMDNjIDAgfHxcXG4gXFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdHN0YW1wKSxcXG4gXFx0XFx0XFx0ICBJTkZJTklUWV9MSUZFX1RJTUUsIElORklOSVRZX0xJRkVfVElNRSkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jXFxuaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L21jYXN0LmNcXG4rKysgYi9uZXQvaXB2Ni9tY2FzdC5jXFxuQEAgLTkwOCw2ICs5MDgsNyBAQCBzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdHNrYiA9IG5sbXNnX25ldyhOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpICtcXG4gXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICtcXG4rXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXG4gXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmFfY2FjaGVpbmZvKSksXFxuIFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXNrYilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAzNjIyNDEzZDc5M2RhOS4uMGM2N2M3YzAwZDg0MWMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMiwyNyArMiwxMDYgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4gaW1wb3J0IHNvY2tldFxcbitpbXBvcnQgc3RydWN0XFxuIGltcG9ydCB0aW1lXFxuLWZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbitJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbitJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxcbitcXG4rXFxuK2RlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiBtYy11c2VycyBmb3IgZ3JwIG9uIGlmaW5kZXgsIG9yIDAgaWYgYWJzZW50LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGFkZHJzID0gcnRubC5nZXRtdWx0aWNhc3Qoe1xcXCJpZmEtZmFtaWx5XFxcIjogZmFtaWx5fSwgZHVtcD1UcnVlKVxcbisgICAgbWF0Y2hlcyA9IFthZGRyIGZvciBhZGRyIGluIGFkZHJzXFxuKyAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IGdycCBhbmQgYWRkclsnaWZhLWluZGV4J10gPT0gaWZpbmRleF1cXG4rICAgIGlmIG5vdCBtYXRjaGVzOlxcbisgICAgICAgIHJldHVybiAwXFxuKyAgICBpZiAnbWMtdXNlcnMnIG5vdCBpbiBtYXRjaGVzWzBdOlxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbisgICAgcmV0dXJuIG1hdGNoZXNbMF1bJ21jLXVzZXJzJ11cXG4rXFxuIFxcbiBkZWYgZHVtcF9tY2FkZHJfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuLSAgICBWZXJpZnkgdGhhdCBhdCBsZWFzdCBvbmUgaW50ZXJmYWNlIGhhcyB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3MuXFxuLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy5cXG4rICAgIFZlcmlmeSBJUHY0IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgICAgICBpcChcXFwibGluayBzZXQgbG8gdXBcXFwiKVxcbisgICAgICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJ2xvJylcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3Qoe1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpXFxuK1xcbisgICAgICAgICAgICBhbGxfaG9zdF9tdWx0aWNhc3RzID0gW1xcbisgICAgICAgICAgICAgICAgYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXNcXG4rICAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxcbisgICAgICAgICAgICBdXFxuK1xcbisgICAgICAgICAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiTm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXFxcIilcXG4rXFxuKyAgICAgICAgICAgIG1yZXEgPSBJUFY0X1RFU1RfTVVMVElDQVNUICsgc29ja2V0LmluZXRfYXRvbignMTI3LjAuMC4xJylcXG4rICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCwgSVBWNF9URVNUX01VTFRJQ0FTVCwgbG9faWR4KVxcbisgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXFxcIilcXG4rXFxuKyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcXG4rICAgICAgICAgICAgICAgIHMyLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcXG4rXFxuKyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1xcXCIpXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwidXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXFxcIlxcbisgICAgICAgICAgICAgICAgICAgICAgICBmXFxcIihiZWZvcmU9e2JlZm9yZX0sIGFmdGVyPXthZnRlcl9qb2lufSlcXFwiKVxcbisgICAgICAgICAgICBmaW5hbGx5OlxcbisgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxcbisgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxcbitcXG4rXFxuK2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBWZXJpZnkgSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCB0aGVpciB1c2VyIGNvdW50cyBpbiBSVE1fR0VUTVVMVElDQVNULlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuIFxcbi0gICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4tICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcXFwiaWZhLWZhbWlseVxcXCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgc2V0IGxvIHVwXFxcIilcXG4rICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCdsbycpXFxuKyAgICAgICAgICAgIGJlZm9yZSA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQ2LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxuK1xcbisgICAgICAgICAgICBtcmVxID0gSVBWNl9URVNUX01VTFRJQ0FTVCArIHN0cnVjdC5wYWNrKCc9SScsIGxvX2lkeClcXG4rICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBzMS5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXFxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXFxuIFxcbi0gICAgYWxsX2hvc3RfbXVsdGljYXN0cyA9IFtcXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1RcXG4tICAgIF1cXG4rICAgICAgICAgICAgICAgIGFmdGVyX2pvaW4gPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVUNixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwiSVB2NiB1c2VycyBkZWx0YSAhPSAyIGFmdGVyIHR3byBqb2lucyBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwiKGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KVxcXCIpXFxuKyAgICAgICAgICAgIGZpbmFsbHk6XFxuKyAgICAgICAgICAgICAgICBzMS5jbG9zZSgpXFxuKyAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbi0gICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsXFxuLSAgICAgICAgICAgIFxcXCJObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3NcXFwiKVxcbiBcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuQEAgLTU2LDcgKzEzNSw3IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICAgICAgICBmXFxcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cXFwiKVxcbiBcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjowMy44NzcxMjk5MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDM0NzI0NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMTY6NDI6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTEyMyw2ICsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwcm90b1xuICAgICAgICAgdHlwZTogdThcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBtYy11c2Vyc1xuKyAgICAgICAgdHlwZTogdTMyXG4gXG4gXG4gb3BlcmF0aW9uczpcbkBAIC0xNzYsNiArMTc5LDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6IFx1MDAyNm1jYWRkci1hdHRyc1xuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4rICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC0zNiw2ICszNiw3IEBAIGVudW0ge1xuIFx0SUZBX1JUX1BSSU9SSVRZLFx0LyogdTMyLCBwcmlvcml0eS9tZXRyaWMgZm9yIHByZWZpeCByb3V0ZSAqL1xuIFx0SUZBX1RBUkdFVF9ORVROU0lELFxuIFx0SUZBX1BST1RPLFx0XHQvKiB1OCwgYWRkcmVzcyBwcm90b2NvbCAqL1xuK1x0SUZBX01DX1VTRVJTLFx0XHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xuIFx0X19JRkFfTUFYLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uMTE2Y2U3Y2VjODBlZGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pZ21wLmNcbisrKyBiL25ldC9pcHY0L2lnbXAuY1xuQEAgLTE0NzMsNiArMTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTtcbiBcbiBcdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cdTAwM2V1c2VycykpIFx1MDAzYyAwIHx8XG4gXHQgICAgbmxhX3B1dChza2IsIElGQV9DQUNIRUlORk8sIHNpemVvZihjaSksIFx1MDAyNmNpKSBcdTAwM2MgMCkge1xuIFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuQEAgLTE0OTQsNiArMTQ5NSw3IEBAIHN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSArXG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpICtcbitcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC01MjY0LDYgKzUyNjQsNyBAQCBpbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cHV0X2lmYWRkcm1zZyhubGgsIDEyOCwgSUZBX0ZfUEVSTUFORU5ULCBzY29wZSwgaWZpbmRleCk7XG4gXHRpZiAobmxhX3B1dF9pbjZfYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIFx1MDAyNmlmbWNhLVx1MDAzZW1jYV9hZGRyKSBcdTAwM2MgMCB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3VzZXJzKSkgXHUwMDNjIDAgfHxcbiBcdCAgICBwdXRfY2FjaGVpbmZvKHNrYiwgaWZtY2EtXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV90c3RhbXApLFxuIFx0XHRcdCAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpIFx1MDAzYyAwKSB7XG4gXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmNcbmluZGV4IDA0YjgxMWIzYmU5NzhlLi43NzRmNGM3MmE2ZmE5YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L21jYXN0LmNcbisrKyBiL25ldC9pcHY2L21jYXN0LmNcbkBAIC05MDgsNiArOTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSArXG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICtcbitcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDM2MjI0MTNkNzkzZGE5Li4wYzY3YzdjMDBkODQxYyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0yLDI3ICsyLDEwNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4tZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuK2Zyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4rSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4rSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitcbitcbitkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG4rICAgIFwiXCJcIlJldHVybiBtYy11c2VycyBmb3IgZ3JwIG9uIGlmaW5kZXgsIG9yIDAgaWYgYWJzZW50LlwiXCJcIlxuK1xuKyAgICBhZGRycyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcImlmYS1mYW1pbHlcIjogZmFtaWx5fSwgZHVtcD1UcnVlKVxuKyAgICBtYXRjaGVzID0gW2FkZHIgZm9yIGFkZHIgaW4gYWRkcnNcbisgICAgICAgICAgICAgICBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBncnAgYW5kIGFkZHJbJ2lmYS1pbmRleCddID09IGlmaW5kZXhdXG4rICAgIGlmIG5vdCBtYXRjaGVzOlxuKyAgICAgICAgcmV0dXJuIDBcbisgICAgaWYgJ21jLXVzZXJzJyBub3QgaW4gbWF0Y2hlc1swXTpcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rICAgIHJldHVybiBtYXRjaGVzWzBdWydtYy11c2VycyddXG4rXG4gXG4gZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbi0gICAgVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGludGVyZmFjZSBoYXMgdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzLlxuLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy5cbisgICAgVmVyaWZ5IElQdjQgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGxvIHVwXCIpXG4rICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbisgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJ2xvJylcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuK1xuKyAgICAgICAgICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4rICAgICAgICAgICAgICAgIGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzXG4rICAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxuKyAgICAgICAgICAgIF1cbitcbisgICAgICAgICAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbisgICAgICAgICAgICAgICAgICAgIFwiTm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXCIpXG4rXG4rICAgICAgICAgICAgbXJlcSA9IElQVjRfVEVTVF9NVUxUSUNBU1QgKyBzb2NrZXQuaW5ldF9hdG9uKCcxMjcuMC4wLjEnKVxuKyAgICAgICAgICAgIGJlZm9yZSA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQsIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbisgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCIpXG4rXG4rICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSlcbisgICAgICAgICAgICBzMiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX0FERF9NRU1CRVJTSElQLCBtcmVxKVxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBzb2NrZXQuSVBfQUREX01FTUJFUlNISVAsIG1yZXEpXG4rXG4rICAgICAgICAgICAgICAgIGFmdGVyX2pvaW4gPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wiKVxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZlwidXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCJcbisgICAgICAgICAgICAgICAgICAgICAgICBmXCIoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCIpXG4rICAgICAgICAgICAgZmluYWxseTpcbisgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuKyAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4rXG4rXG4rZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFZlcmlmeSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXG4gICAgIFwiXCJcIlxuIFxuLSAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuLSAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgaXAoXCJsaW5rIHNldCBsbyB1cFwiKVxuKyAgICAgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCdsbycpXG4rICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4rICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlwiKVxuK1xuKyAgICAgICAgICAgIG1yZXEgPSBJUFY2X1RFU1RfTVVMVElDQVNUICsgc3RydWN0LnBhY2soJz1JJywgbG9faWR4KVxuKyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9KT0lOX0dST1VQLCBtcmVxKVxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4gXG4tICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1Rcbi0gICAgXVxuKyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbisgICAgICAgICAgICAgICAgaWYgYWZ0ZXJfam9pbiBpcyBOb25lOlxuKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTIGZvciBJUHY2XCIpXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbisgICAgICAgICAgICAgICAgICAgICAgICBmXCJJUHY2IHVzZXJzIGRlbHRhICE9IDIgYWZ0ZXIgdHdvIGpvaW5zIFwiXG4rICAgICAgICAgICAgICAgICAgICAgICAgZlwiKGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KVwiKVxuKyAgICAgICAgICAgIGZpbmFsbHk6XG4rICAgICAgICAgICAgICAgIHMxLmNsb3NlKClcbisgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuLSAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbi0gICAgICAgICAgICBcIk5vIGludGVyZmFjZSBmb3VuZCB3aXRoIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzc1wiKVxuIFxuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbkBAIC01Niw3ICsxMzUsNyBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjAzLjg3NzEzNTE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Njc4Nzg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgQWRkcmVzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgY29yZSBpZGVhIGlzIGFkZGluZyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSwgYElGQV9NQ19VU0VSU2AsIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3Nlcy4gSXQncyB0b3VjaGluZyBgcnQtYWRkci55YW1sYCBhbmQgYGlmX2FkZHIuaGAsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGFkZGluZyBuZXcgYXR0cmlidXRlcyB0byB0aGUgbmV0bGluayBpbnRlcmZhY2UuXG5cblRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGluZXRfZmlsbF9pZm1jYWRkcmAgKGluIGBuZXQvaXB2NC9pZ21wLmNgKSBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIChpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiB3ZSByZXF1ZXN0IG9yIGdldCBub3RpZmljYXRpb25zIGFib3V0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gVGhlIHBhdGNoIGlzIGluY2x1ZGluZyB0aGUgYElGQV9NQ19VU0VSU2AgYXR0cmlidXRlIHRoZXJlLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIHRvIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLCB3aGljaCBzdWdnZXN0cyB3ZSdyZSBlbnN1cmluZyB0aGF0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNwYWNlIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoaXMgbmV3IGF0dHJpYnV0ZSBpbiBub3RpZmljYXRpb25zLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3MgcHJldHR5IGxvdy1sZXZlbC4gSXQncyBnb2luZyB0byBhZmZlY3QgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIFNvLCBhbnl0aGluZyB0aGF0IHF1ZXJpZXMgb3IgbGlzdGVucyBmb3IgbXVsdGljYXN0IGdyb3VwIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rIHNvY2tldHMgKHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGApIHdpbGwgYmUgaW1wYWN0ZWQsIGFzIHdlbGwgYXMgbXVsdGljYXN0IGdyb3VwIGpvaW5zIGFuZCBsZWF2ZXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRob3NlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzcGVjaWZpY2FsbHk6XG5cbiogICBgaW5ldF9maWxsX2lmbWNhZGRyYFxuKiAgIGBpbmV0X2lmbWNhZGRyX25vdGlmeWBcbiogICBgaW5ldDZfZmlsbF9pZm1jYWRkcmBcbiogICBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YFxuXG5JIGFtIGFsc28gaW50ZXJlc3RlZCBpbiBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBvbiBhbGwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIGRvIGEgcXVpY2sgZ3JlcC4gU2luY2UgaXQgaXMgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIEknbGwgbG9vayBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxMC42NDUwMTk1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MDM5NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MTAuNzgyMDY5ODk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzA0MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJR01QIE1vZHVsZSBDb21waWxhdGlvbioqXG5cblJpZ2h0LCBzbyBgaWdtcC5vYC4uLiB0aGF0J3MgYWx3YXlzIGJ1aWx0IHdpdGggSVB2NCwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaG93IHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBfTVVMVElDQVNUYD8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBkaXZpbmcgaW50byB0aGUgc291cmNlIGZvciBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJJ2xsIGZvY3VzIG9uIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlIG11bHRpY2FzdCBzdXBwb3J0IGlzIGVuYWJsZWQgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxMy45MzkxMTU3MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTM1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUF9NVUxUSUNBU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYy0xMDktXFxubmV0L2lwdjQvaWdtcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIwMT1zdGF0aWMgdm9pZCBpcF9zZl9saXN0X2NsZWFyX2FsbChzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMS1cXG5uZXQvaXB2NC9pZ21wLmM6MjEyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMy1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMTc5PXN0YXRpYyB2b2lkIGlwX21jX2ZpbHRlcl9kZWwoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMTg3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMTg4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTExODktLypcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzA4PXN0YXRpYyB2b2lkIF9faWdtcF9ncm91cF9kcm9wcGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzMTAtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTMxMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzEyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzMjAtXFxubmV0L2lwdjQvaWdtcC5jOjEzMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTMyMi1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNTQtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTM1NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzU2LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNjMtXFxubmV0L2lwdjQvaWdtcC5jOjEzNjQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTM2NS1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTY1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZpbS1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvaWdtcC5jOjE1NjY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTU2Ny1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW0tXFx1MDAzZXRpbWVyLCBpZ21wX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTU3NS1cXG5uZXQvaXB2NC9pZ21wLmM6MTU3NjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNTc3LVxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE3NDQ9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE3NDUte1xcbm5ldC9pcHY0L2lnbXAuYzoxNzQ2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE3NDctXFx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4MjY9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTgzMi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxODMzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4MzQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NDI9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODUwLVxcbm5ldC9pcHY0L2lnbXAuYzoxODUxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4NTItXFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1yX2lmY19jb3VudCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg2Mi1cXG5uZXQvaXB2NC9pZ21wLmM6MTg2MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xODY0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xODc4PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE4ODEtXFxubmV0L2lwdjQvaWdtcC5jOjE4ODI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTg4My1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5fZGV2LVxcdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4OTM9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkwMi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTAzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5MDQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5MTQ9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkyMS1cXHRpcF9tY19kb3duKGluX2Rldik7XFxubmV0L2lwdjQvaWdtcC5jOjE5MjI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkyMy1cXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTk3MT1zdGF0aWMgaW50IGlwX21jX2RlbDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk5MS1cXHRpZiAoIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXFx1MDAyNlxcdTAwMjYgIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcXG5uZXQvaXB2NC9pZ21wLmM6MTk5MjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTkzLVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cXHUwMDNlaW50ZXJmYWNlO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXFx0XFx0XFx0cG1jLVxcdTAwM2Vzb3VyY2VzID0gcHNmLVxcdTAwM2VzZl9uZXh0O1xcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwMDMtXFx0XFx0aWYgKHBzZi1cXHUwMDNlc2Zfb2xkaW4gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDE1LVxcbm5ldC9pcHY0L2lnbXAuYzoyMDE2OiNpZm5kZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDE3LSNkZWZpbmUgaWdtcF9pZmNfZXZlbnQoeClcXHRkbyB7IH0gd2hpbGUgKDApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAyMD1zdGF0aWMgaW50IGlwX21jX2RlbF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA0MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQvaXB2NC9pZ21wLmM6MjA0MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDQyLVxcdHNmX21hcmtzdGF0ZShwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNjAtXFx0ICAgIHBtYy1cXHUwMDNlc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSkge1xcbm5ldC9pcHY0L2lnbXAuYzoyMDYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNjItXFx0XFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDY3LVxcdFxcdHBtYy1cXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcXG5uZXQvaXB2NC9pZ21wLmM6MjA2ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDY5LVxcdFxcdHBtYy1cXHUwMDNlY3Jjb3VudCA9IGluX2Rldi1cXHUwMDNlbXJfcXJ2ID86IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lnbXBfcXJ2KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDg2PXN0YXRpYyBpbnQgaXBfbWNfYWRkMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMTEzLVxcbm5ldC9pcHY0L2lnbXAuYzoyMTE0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMTUtc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjE5Mj1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjIxMy1cXG5uZXQvaXB2NC9pZ21wLmM6MjIxNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMjE1LVxcdHNmX21hcmtzdGF0ZShwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyMzMtXFx0fSBlbHNlIGlmIChpc2V4Y2x1ZGUgIT0gKHBtYy1cXHUwMDNlc2Zjb3VudFtNQ0FTVF9FWENMVURFXSAhPSAwKSkge1xcbm5ldC9pcHY0L2lnbXAuYzoyMjM0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyMzUtXFx0XFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjQ0LVxcdFxcdFxcdHBtYy1cXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcXG5uZXQvaXB2NC9pZ21wLmM6MjI0NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMjQ2LVxcdFxcdC8qIGVsc2Ugbm8gZmlsdGVyczsga2VlcCBvbGQgbW9kZSBmb3IgcmVwb3J0cyAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTI5NTk9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5NzAtXFxubmV0L2lwdjQvaWdtcC5jOjI5NzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjk3Mi1cXHRcXHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVxcdTAwM2Vpbl9kZXYpID8gXFxcIlYxXFxcIiA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjE0LjA0NDA2MDE2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTkyMjM1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjQgYW5kIElQdjYgTXVsdGljYXN0IEFkZHJlc3MgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBzZWVpbmcgYSBiaXQgb2YgYSBxdWlyayBoZXJlIHdpdGggdGhlIGtlcm5lbCdzIG11bHRpY2FzdCBhZGRyZXNzIGhhbmRsaW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMsIG9idmlvdXNseSwgcmVsYXRlZCB0byBJR01QLiBCdXQgdGhlbiBJIG5vdGljZWQgdGhhdCBgaW5ldF9maWxsX2lmbWNhZGRyYCBpcyBjb21waWxlZCByZWdhcmRsZXNzIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEhtbSwgdGhhdCdzIG9kZC4gTGV0IG1lIGRvdWJsZS1jaGVjayAtIG9oIHJpZ2h0LCBpdCdzIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYWx3YXlzIGluY2x1ZGVkLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Tbywgc2luY2UgaXQncyBpbiB0aGUgSUdNUCBjb2RlLCBJIG5lZWQgdG8gbG9vayBhdCBJUHY2IGFzIHdlbGwuIEknbGwgY2hlY2sgYG5ldC9pcHY2L2FkZHJjb25mLmNgIGFuZCBgbmV0L2lwdjYvbWNhc3QuY2AuIE9rYXksIGJvdGggb2YgdGhlc2UgYXJlICphbHdheXMqIGNvbXBpbGVkIGZvciBJUHY2LCBhcyBleHBlY3RlZC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggSVB2NiBiZWluZyBhIHJlcXVpcmVtZW50IGZvciB0aGlzLiBJIGd1ZXNzIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG11bHRpY2FzdCBhZGRyZXNzIG1hbmFnZW1lbnQgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpbmV0X2ZpbGxfaWZtY2FkZHJgLCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgLCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAsIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxOC45NDMyODc5NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzI5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTE4NDE9c3RhdGljIGludCBpbl9kZXZfZHVtcF9pZm1jYWRkcihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTg1NS1cXHRcXHR9XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE4NTY6XFx0XFx0ZXJyID0gaW5ldF9maWxsX2lmbWNhZGRyKHNrYiwgaW5fZGV2LVxcdTAwM2VkZXYsIGltLCBmaWxsYXJncyk7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTctXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTQzNj1zdGF0aWMgdm9pZCBpcF9tY19oYXNoX3JlbW92ZShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ0OS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQ1MDppbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaWdtcC5jLTE0NTEtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUwMy1cXG5uZXQvaXB2NC9pZ21wLmM6MTUwNDpcXHRlcnIgPSBpbmV0X2ZpbGxfaWZtY2FkZHIoc2tiLCBkZXYsIGltLCBcXHUwMDI2ZmlsbGFyZ3MpO1xcbm5ldC9pcHY0L2lnbXAuYy0xNTA1LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmg9NT1zdHJ1Y3QgaW5ldF9maWxsX2FyZ3Mge1xcbi0tXFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTEzLVxcbm5ldC9pcHY0L2lnbXBfaW50ZXJuYWwuaDoxNDppbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTE1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjE5LjEyODYyODkzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzQwMTI0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgQWRkcmVzcyBSZXRyaWV2YWwgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gaG93IG11bHRpY2FzdCBpbnRlcmZhY2UgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gYGluX2Rldl9kdW1wX2lmbWNhZGRyYCBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHNwZWNpZmljIHRyYWNlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9kdW1wX2lmbWNhZGRyYCwgd2hpY2ggaXMgaXRzZWxmIHRoZSBoYW5kbGVyIGZvciB0aGUgYFJUTV9HRVRNVUxUSUNBU1RgIHJvdXRpbmcgbWVzc2FnZS4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSBjYW4gc2VlIHRoYXQgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBncm91cCBpcyBlaXRoZXIgYWRkZWQgb3IgZHJvcHBlZCwgd2l0aCBhIGRpcmVjdCBjYWxsIGZyb20gYGlnbXBfZ3JvdXBfYWRkZWRgIGFuZCBgaWdtcF9ncm91cF9kcm9wcGVkYC4gVGhvc2UgZnVuY3Rpb24gY2FsbHMsIHdoaWNoIGFyZSBhbHNvIHJlZmVyZW5jZWQgYXMgYGlwX21jX2luY19ncm91cGAgYW5kIGBpcF9tY19kZWNfZ3JvdXBgLCBtYWtlIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgSVB2NiBjb3VudGVycGFydHMgdG8gc2VlIGlmIHRoZXkgZm9sbG93IGEgc2ltaWxhciBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBleGFtaW5lIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBoYW5kbGVzIHRoZXNlIG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIG5vdGlmaWNhdGlvbnMuIFRoZXkgc2hvdWxkIGdpdmUgbWUgYSBwYXJhbGxlbCB2aWV3IG9mIHRoZSBwcm9jZXNzLCBhbmQgdGhlbiBJIGNhbiBjb21wYXJlIHRoZW0gZm9yIHBvc3NpYmxlIGRpZmZlcmVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTAyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjIzLjkwMjY0Nzg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTM5ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmM9NTE2ND1zdGF0aWMgaW50IGluZXQ2X2ZpbGxfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNDEtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjQyOmludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjQzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01MzE0PXN0YXRpYyBpbnQgaW42X2R1bXBfYWRkcnMoY29uc3Qgc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTM0OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUzNTA6XFx0XFx0XFx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBmaWxsYXJncyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MzUxLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz04OTQ9c3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTkxNi1cXG5uZXQvaXB2Ni9tY2FzdC5jOjkxNzpcXHRlcnIgPSBpbmV0Nl9maWxsX2lmbWNhZGRyKHNrYiwgaWZtY2EsIFxcdTAwMjZmaWxsYXJncyk7XFxubmV0L2lwdjYvbWNhc3QuYy05MTgtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MjQuMDUzMjA2NjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzY0NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIHNlZW0gdG8gYmUgYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY3JpdGljYWwgcGllY2VzIGZvciBtYW5hZ2luZyBtdWx0aWNhc3QgYWRkcmVzc2VzLCBib3RoIElQdjQgYW5kIElQdjYuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIElQdjYuIEkga25vdyBgQ09ORklHX0lQVjZgIGlzIGEgZ2l2ZW4sIHRoYXQncyBqdXN0IGZ1bmRhbWVudGFsLiBCdXQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCBlbHNlKiBkbyBJIG5lZWQgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBtdWx0aWNhc3Qgc2V0dXAgZm9yIElQdjY/IFRoZXJlIGhhcyB0byBiZSBtb3JlIHRvIGl0IHRoYW4ganVzdCB0aGF0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgdGltZSB0byBleHBsb3JlIHRoZSBjb25maWcgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MjcuNzQ2ODU2Nzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMzQ5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldDZfaWZtY2FkZHJfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9tY2FzdC5jPTg2Mz1zdGF0aWMgc3RydWN0IGlmbWNhZGRyNiAqbWNhX2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTg5My1cXG5uZXQvaXB2Ni9tY2FzdC5jOjg5NDpzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTg5NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLCBpbnQgZXZlbnQpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTkzMz1zdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTk3My1cXHRpZ21wNl9ncm91cF9hZGRlZChtYyk7XFxubmV0L2lwdjYvbWNhc3QuYzo5NzQ6XFx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGRldiwgbWMsIFJUTV9ORVdNVUxUSUNBU1QpO1xcbm5ldC9pcHY2L21jYXN0LmMtOTc1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2aWRldi1cXHUwMDNlbWNfbG9jayk7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTk4OT1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0xMDA1LVxcdFxcdFxcdFxcdGlnbXA2X2dyb3VwX2Ryb3BwZWQobWEpO1xcbm5ldC9pcHY2L21jYXN0LmM6MTAwNjpcXHRcXHRcXHRcXHRpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoaWRldi1cXHUwMDNlZGV2LCBtYSxcXG5uZXQvaXB2Ni9tY2FzdC5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUlRNX0RFTE1VTFRJQ0FTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjI3Ljk1NTIxNDgxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE3NTU5NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIE11bHRpY2FzdCBBZGRyZXNzIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFkeSB0byBnbzsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIGZ1enppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFyZTpcblxuKiAgIGBpbmV0X2ZpbGxfaWZtY2FkZHJgXG4qICAgYGluZXRfaWZtY2FkZHJfbm90aWZ5YFxuKiAgIGBpbmV0Nl9maWxsX2lmbWNhZGRyYFxuKiAgIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgXG5cbk5vdywgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBgaW5ldF9maWxsX2lmbWNhZGRyYCBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIGFyZSBwYXJ0IG9mIG5ldGxpbmsgZHVtcHMuIE5ldGxpbmsgZHVtcHMgYXJlbid0IGV4YWN0bHkgaG90LCBoaWdoLXBlcmZvcm1hbmNlIHBhdGhzIGluIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBtdWx0aWNhc3QgYWRkcmVzcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgX25vdGlmeWAgdmFyaWFudHMsIGxpa2UgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAsIGFyZSB0cmlnZ2VyZWQgd2hlbiBtdWx0aWNhc3QgZ3JvdXBzIGFyZSBqb2luZWQgb3IgbGVmdCwgd2hpY2ggaXNuJ3QgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIGVpdGhlci5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQgYENPTkZJR19JUF9NVUxUSUNBU1RgIGlzIHJlcXVpcmVkIGZvciB0aGUgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MzMuNzcyNzgwMDU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE2MzgyOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfaWZtY2FkZHJfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ4NS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQ4NjpzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY0L2lnbXAuYy0xNDg3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sIGludCBldmVudClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTc5LVxcdGlnbXBfZ3JvdXBfYWRkZWQoaW0pO1xcbm5ldC9pcHY0L2lnbXAuYzoxNTgwOlxcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cXHUwMDNlZGV2LCBpbSwgUlRNX05FV01VTFRJQ0FTVCk7XFxubmV0L2lwdjQvaWdtcC5jLTE1ODEtXFx0aWYgKCFpbl9kZXYtXFx1MDAzZWRlYWQpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3OD12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzk3LVxcdFxcdFxcdFxcdF9faWdtcF9ncm91cF9kcm9wcGVkKGksIGdmcCk7XFxubmV0L2lwdjQvaWdtcC5jOjE3OTg6XFx0XFx0XFx0XFx0aW5ldF9pZm1jYWRkcl9ub3RpZnkoaW5fZGV2LVxcdTAwM2VkZXYsIGksXFxubmV0L2lwdjQvaWdtcC5jLTE3OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fREVMTVVMVElDQVNUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MzUuNTg5MTczNTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzk1MjI3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgRnVuY3Rpb24gQ2FsbCBDb250ZXh0KipcblxuT2theSwgc28gYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBpcyBjYWxsZWQgZnJvbSB0d28gb3RoZXIgZnVuY3Rpb25zLCBgX19fX2lwX21jX2luY19ncm91cGAgYW5kIGBfX2lwX21jX2RlY19ncm91cGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0ICpib3RoKiBvZiB0aGVzZSBzZWVtIHRvIGJlIGNvbXBpbGVkIGluIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVBfTVVMVElDQVNUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQgZmVlbHMgYSBiaXQgb2RkLCBhbmQgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgaWYgd2UncmUgbm90IGFjdHVhbGx5IHVzaW5nIG11bHRpY2FzdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFNvLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hldGhlciBvciBub3QgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUYCBibG9jay4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0IG9yIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjM5LjEyODcwMDEzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2ODc2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUxOS0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MTUyMDpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxubmV0L2lwdjQvaWdtcC5jLTE1MjEtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1vZGUsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTg3PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxcbm5ldC9pcHY0L2lnbXAuYy0xNTg4LXtcXG5uZXQvaXB2NC9pZ21wLmM6MTU4OTpcXHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTU5MC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjI4MT1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMjQtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXFx1MDAzZW1jX2xpc3QsIGltbCk7XFxubmV0L2lwdjQvaWdtcC5jOjIzMjU6XFx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lnbXAuYy0yMzI2LVxcdGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjM5LjgxNTYyMDc3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk0MjM1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk11bHRpY2FzdCBHcm91cCBNYW5hZ2VtZW50OiBBIENvbmZpZyBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbXVsdGljYXN0IHN0dWZmLCBzcGVjaWZpY2FsbHkgaG93IGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgZ2V0cyB0cmlnZ2VyZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIHRoZSBqb2luaW5nIGFuZCBsZWF2aW5nIG9mIGdyb3VwcyBoYW5kbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBfX19faXBfbWNfaW5jX2dyb3VwYCwgaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gbWF0dGVyIHdoYXQuIFRoYXQncyBldmlkZW50IGZyb20gdGhlIGZhY3QgdGhhdCBgbmV0L2lwdjQvaWdtcC5jYCBhbmQgdGhhdCBmdW5jdGlvbiBhcmUgYWx3YXlzIGluY2x1ZGVkLiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZG9lcyBlbmFibGUgSUdNUCBwcm90b2NvbCBzcGVjaWZpYyBmZWF0dXJlcywgd2hpY2ggYXJlIG9idmlvdXNseSBzZXBhcmF0ZS5cblxuU28sIGluIHRoZW9yeSwgSSBkb24ndCAqbmVlZCogYENPTkZJR19JUF9NVUxUSUNBU1RgIGVuYWJsZWQgZm9yIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgdG8gYmUgY2FsbGVkLiBTdGlsbCwgaXQgZmVlbHMgbGlrZSBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGl0LCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHNvbWUgc3VidGxlIGRlcGVuZGVuY2llcyBJJ20gbm90IHNlZWluZyByaWdodCBub3cuIEFuZCByZWFsaXN0aWNhbGx5LCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zIGFueXdheS4gV2UgY2FuIHByb2JhYmx5IGp1c3QgYXNzdW1lIGl0J3MgYWxyZWFkeSBvbi5cblxuSG93ZXZlciwgSVB2NiBpcyBhbiBlbnRpcmVseSBzZXBhcmF0ZSBiZWFzdC4gSSAqa25vdyogYG5ldC9pcHY2L21jYXN0LmNgIGlzIGludm9sdmVkIGZvciBJUHY2IG11bHRpY2FzdC4gU28gbGV0J3MgY2hlY2sgaXQgb3ZlciB0byBsb29rIGZvciB0aG9zZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NDYuMjA5ODYwMDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDM5NDE2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NDYuNzY0MjcxMTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODY4MDczNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgSVB2NiBNdWx0aWNhc3QgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvaXB2Ni9tY2FzdC5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBvYnZpb3VzOiB0aGlzIGZpbGUsIGFuZCB0aGUgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaXQgaW1wbGVtZW50cywgaXMgKm9ubHkqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2l0aG91dCBJUHY2IHN1cHBvcnQgYXMgYSB3aG9sZSwgdGhlcmUncyBubyBuZWVkIGZvciBJUHY2IG11bHRpY2FzdCBzcGVjaWZpY2FsbHkuIEl0J3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBJdCdzIGEgY29yZSBidWlsZGluZyBibG9jayB0aWVkIHRvIHRoZSBicm9hZGVyIElQdjYgYXJjaGl0ZWN0dXJlLCBzbyBJJ2QgZXhwZWN0IHRoaXMuIEdvb2QgdG8gc2VlIHRoaXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGV4cGxpY2l0bHkgZGVmaW5lZCwga2VlcGluZyB0aGUga2VybmVsIGxlYW4gd2hlcmUgaXQgY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjUwLjI1MTA5MTg2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MTE0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jYXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGUtMTAtXFx0XFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjExOlxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTItXFx0XFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NTAuNTA2MjE2ODk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ4NDc1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWNhc3Qub2AgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG1jYXN0Lm9gIG1vZHVsZS4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzICphbHdheXMqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLlxuXG5TbywgZGlnZ2luZyBkZWVwZXIsIHRoZSB0d28ga2V5IGNvbmZpZ3VyYXRpb25zIHRpZWQgdG8gdGhpcyBhcmUgY2xlYXJseSBgSVBWNmAgYW5kIGBJUF9NVUxUSUNBU1RgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSB0d28uIFRoZXkncmUgb2J2aW91c2x5IGNvdXBsZWQgaGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGV0aWVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIGlmIHRoYXQgYElGQV9NQ19VU0VSU2Agc3ltYm9sIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgY29udGV4dCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgYXQgcGxheS4gSXQncyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgYW5kIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0Mjo1My43NzEwNzA4NDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDkwMjEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUZBX01DX1VTRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oPTI2PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0zOC1cXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjM5OlxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNDAtXFx0X19JRkFfTUFYLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE0NTA9aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0NzUtXFx0aWYgKG5sYV9wdXRfaW5fYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIGltLVxcdTAwM2VtdWx0aWFkZHIpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L2lnbXAuYzoxNDc2OlxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGltLVxcdTAwM2V1c2VycykpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L2lnbXAuYy0xNDc3LVxcdCAgICBubGFfcHV0KHNrYiwgSUZBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgXFx1MDAyNmNpKSBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTI0Mj1pbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjY2LVxcdGlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgXFx1MDAyNmlmbWNhLVxcdTAwM2VtY2FfYWRkcikgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjY3OlxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdXNlcnMpKSBcXHUwMDNjIDAgfHxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjgtXFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdHN0YW1wKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk9Mjk9ZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTEtICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weTo1MjogICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwia2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTYyLSAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weTo2MzogICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTY0LSAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTcyPWRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04NC0gICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5Ojg1OiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTYtICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5Ojk3OiAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwia2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTgtICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NTkuNzgwMTA2NjM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTI2NDE5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbmFsIGluIG5hdHVyZSBhbmQgZGVmaW5pdGVseSB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBpbmV0X2ZpbGxfaWZtY2FkZHJgLCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgLCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAsIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgSVBWNmAgYW5kIGBJUF9NVUxUSUNBU1RgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgdmVyaWZ5IGlmIGBJUFY2X01ST1VURWAgb3IgYW55IHJlbGF0ZWQgb3B0aW9uIGlzIG5lZWRlZCwgYnV0IG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgaXNuJ3QuIFllYWgsIGBtY2FzdC5jYCBhbmQgYGFkZHJjb25mLmNgIGFyZSBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2l0aCBgSVBWNmAsIHNvIHRoYXQncyBoYW5kbGVkLlxuXG5JIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gSSdsbCByZXZpZXcgdGhlIGRpZmYuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUuIE5vdyB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBtaW5pbWFsLCBzaW1wbHkgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGluIHRoZSByZXNwb25zZS5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKm5ldyogbmV0bGluayBhdHRyaWJ1dGUsIGV2ZW4gYSBzbWFsbCBjaGFuZ2UgbGlrZSB0aGlzIGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBmdXp6aW5nOyBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBhIGdvb2Qgc291cmNlIG9mIGJ1Z3MuIFRoZSBrZXJuZWwgaXMgbm93IHNlbmRpbmcgYElGQV9NQ19VU0VSU2AgdG8gdXNlciBzcGFjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGluIHVzZXIgc3BhY2UgKGFuZCBrZXJuZWwgc3BhY2UpLCBzbyBJIHdpbGwgY2hlY2sgdGhlIGtlcm5lbCBjb2RlIHRvIHNlZSBpZiB0aGlzIG5ldyBhdHRyaWJ1dGUgaXMgcGFyc2VkIHRoZXJlLiBJIGRvbid0IHNlZSBwYXJzaW5nLCBzbyBpdCBzZWVtcyB0aGUgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGlzIG9ubHkgYWRkZWQgdG8gcmVzcG9uc2VzLiBJIHN0aWxsIHdhbnQgdG8gZnV6eiB0aGlzLCBzaW5jZSBpdCdzIGEgbmV3IGF0dHJpYnV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDM6MTAuMzA2NTMzNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDA2NDkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRkFfTUNfVVNFUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ3NS1cXHRpZiAobmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgaW0tXFx1MDAzZW11bHRpYWRkcikgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjQvaWdtcC5jOjE0NzY6XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tXFx1MDAzZXVzZXJzKSkgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjQvaWdtcC5jLTE0NzctXFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcXHUwMDI2Y2kpIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01MjQyPWludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjYtXFx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcXHUwMDI2aWZtY2EtXFx1MDAzZW1jYV9hZGRyKSBcXHUwMDNjIDAgfHxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUyNjc6XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXFx1MDAzZW1jYV91c2VycykpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI2OC1cXHQgICAgcHV0X2NhY2hlaW5mbyhza2IsIGlmbWNhLVxcdTAwM2VtY2FfY3N0YW1wLCBSRUFEX09OQ0UoaWZtY2EtXFx1MDAzZW1jYV90c3RhbXApLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MzoxMS4wNDY2MTQ5NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5OTU4ODc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUga2VybmVsICpvbmx5KiBzZW5kcyB0aGUgZGF0YSwgYnV0IHRoYXQncyBlbm91Z2ggdG8gd2FycmFudCBhIGNsb3NlciBsb29rLiBJcyB0aGlzIHBhdGNoIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgaGFuZGxpbmcgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4gRXZlbiBpZiBpdCdzIFwianVzdFwiIHNlbmRpbmcgZGF0YSwgaXQncyBhIG5ldyBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCBhbmQgdGhhdCAqYWx3YXlzKiBpbXBhY3RzIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGNydWNpYWwgYWxsb2NhdGlvbiBzaXplcyB3aXRoaW4gYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIElmIHRob3NlIGFsbG9jYXRpb25zIGFyZSBvZmYsIGl0IGNvdWxkIGxlYWQgdG8gYSBuYXN0eSBidWZmZXIgb3ZlcmZsb3cgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmNlcm5pbmcgd2FybmluZywgYW5kIHRoYXQgaGFzIHRvIGJlIGludmVzdGlnYXRlZC5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVG8gZW5zdXJlIHRob3JvdWdoIGNvdmVyYWdlLCBJIHdpbGwgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCB0byBib3RoIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IG1vZGlmaWVzIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGRlZXAgd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBGb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLCB0aGUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTEzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MzoxOC4wNDYyMDc5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU2MzczNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXRfaWZtY2FkZHJfbm90aWZ5XCIsXG4gICAgXCJpbmV0Nl9maWxsX2lmbWNhZGRyXCIsXG4gICAgXCJpbmV0Nl9pZm1jYWRkcl9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIElGQV9NQ19VU0VSUyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzIGFuZCBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIGFsbG9jYXRpb24gc2l6ZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-30 16:30:57 +0000 UTC FinishedAt: 2026-06-30 16:43:20 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP_MULTICAST" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "f456c1922c49e6be5ce407ddb74a6e61af5b65cf", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IPV6", "IP_MULTICAST" ], "series_id": "97614b76-5426-4ce3-b3b3-e2d7a2135990" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "inet_fill_ifmcaddr", "inet_ifmcaddr_notify", "inet6_fill_ifmcaddr", "inet6_ifmcaddr_notify" ], "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+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXRfaWZtY2FkZHJfbm90aWZ5JiMzNDssCiAgICAmIzM0O2luZXQ2X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldDZfaWZtY2FkZHJfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDhkMDQzNDljZDY0ZTIxOThjZWNiOTM4MThmZDhiZTg5MTI4YzIwOGFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAzMCAxNjo0MjowMSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTEyMyw2ICYjNDM7MTIzLDkgQEAgYXR0cmlidXRlLXNldHM6XG4gICAgICAgLVxuICAgICAgICAgbmFtZTogcHJvdG9cbiAgICAgICAgIHR5cGU6IHU4XG4mIzQzOyAgICAgIC1cbiYjNDM7ICAgICAgICBuYW1lOiBtYy11c2Vyc1xuJiM0MzsgICAgICAgIHR5cGU6IHUzMlxuIFxuIFxuIG9wZXJhdGlvbnM6XG5AQCAtMTc2LDYgJiM0MzsxNzksNyBAQCBvcGVyYXRpb25zOlxuICAgICAgICAgICB2YWx1ZTogNThcbiAgICAgICAgICAgYXR0cmlidXRlczogXHUwMDI2bWNhZGRyLWF0dHJzXG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcbiYjNDM7ICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBlbnVtIHtcbiBcdElGQV9SVF9QUklPUklUWSxcdC8qIHUzMiwgcHJpb3JpdHkvbWV0cmljIGZvciBwcmVmaXggcm91dGUgKi9cbiBcdElGQV9UQVJHRVRfTkVUTlNJRCxcbiBcdElGQV9QUk9UTyxcdFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cbiYjNDM7XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG4gXHRfX0lGQV9NQVgsXG4gfTtcbiBcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcbmluZGV4IGI2MzM3YTQ3YzE0MTg1Li4xMTZjZTdjZWM4MGVkYSAxMDA2NDRcbi0tLSBhL25ldC9pcHY0L2lnbXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jXG5AQCAtMTQ3Myw2ICYjNDM7MTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTtcbiBcbiBcdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG4mIzQzO1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tXHUwMDNldXNlcnMpKSBcdTAwM2MgMCB8fFxuIFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcdTAwMjZjaSkgXHUwMDNjIDApIHtcbiBcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbiBcdFx0cmV0dXJuIC1FTVNHU0laRTtcbkBAIC0xNDk0LDYgJiM0MzsxNDk1LDcgQEAgc3RhdGljIHZvaWQgaW5ldF9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcbiBcdHNrYiA9IG5sbXNnX25ldyhOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpICYjNDM7XG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpICYjNDM7XG4mIzQzO1x0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzO1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC01MjY0LDYgJiM0Mzs1MjY0LDcgQEAgaW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcbiBcdHB1dF9pZmFkZHJtc2cobmxoLCAxMjgsIElGQV9GX1BFUk1BTkVOVCwgc2NvcGUsIGlmaW5kZXgpO1xuIFx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcdTAwMjZpZm1jYS1cdTAwM2VtY2FfYWRkcikgXHUwMDNjIDAgfHxcbiYjNDM7XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpZm1jYS1cdTAwM2VtY2FfdXNlcnMpKSBcdTAwM2MgMCB8fFxuIFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cdTAwM2VtY2FfY3N0YW1wLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3RzdGFtcCksXG4gXHRcdFx0ICBJTkZJTklUWV9MSUZFX1RJTUUsIElORklOSVRZX0xJRkVfVElNRSkgXHUwMDNjIDApIHtcbiBcdFx0bmxtc2dfY2FuY2VsKHNrYiwgbmxoKTtcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9tY2FzdC5jIGIvbmV0L2lwdjYvbWNhc3QuY1xuaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NFxuLS0tIGEvbmV0L2lwdjYvbWNhc3QuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjYvbWNhc3QuY1xuQEAgLTkwOCw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSAmIzQzO1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSAmIzQzO1xuJiM0MztcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgJiM0MztcbiBcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSxcbiBcdFx0XHRHRlBfS0VSTkVMKTtcbiBcdGlmICghc2tiKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5pbmRleCAzNjIyNDEzZDc5M2RhOS4uMGM2N2M3YzAwZDg0MWMgMTAwNzU1XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5XG5AQCAtMiwyNyAmIzQzOzIsMTA2IEBAXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuIFxuIGltcG9ydCBzb2NrZXRcbiYjNDM7aW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4tZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4XG4gZnJvbSBsaWIucHkgaW1wb3J0IENtZEV4aXRGYWlsdXJlLCBOZXROUywgTmV0TlNFbnRlciwgUnRubEFkZHJGYW1pbHlcbiBcbiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtcXHhlMFxceDAwXFx4MDBcXHgwMSYjMzk7XG4mIzQzO0lQVjRfVEVTVF9NVUxUSUNBU1QgPSBiJiMzOTtcXHhlZlxceDAxXFx4MDFcXHgwMSYjMzk7XG4mIzQzO0lQVjZfVEVTVF9NVUxUSUNBU1QgPSBieXRlcy5mcm9taGV4KCYjMzk7ZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMmIzM5OylcbiYjNDM7XG4mIzQzO1xuJiM0MztkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtSZXR1cm4gbWMtdXNlcnMgZm9yIGdycCBvbiBpZmluZGV4LCBvciAwIGlmIGFic2VudC5cJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7XG4mIzQzOyAgICBhZGRycyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBmYW1pbHl9LCBkdW1wPVRydWUpXG4mIzQzOyAgICBtYXRjaGVzID0gW2FkZHIgZm9yIGFkZHIgaW4gYWRkcnNcbiYjNDM7ICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBncnAgYW5kIGFkZHJbJiMzOTtpZmEtaW5kZXgmIzM5O10gPT0gaWZpbmRleF1cbiYjNDM7ICAgIGlmIG5vdCBtYXRjaGVzOlxuJiM0MzsgICAgICAgIHJldHVybiAwXG4mIzQzOyAgICBpZiAmIzM5O21jLXVzZXJzJiMzOTsgbm90IGluIG1hdGNoZXNbMF06XG4mIzQzOyAgICAgICAgcmV0dXJuIE5vbmVcbiYjNDM7XG4mIzQzOyAgICByZXR1cm4gbWF0Y2hlc1swXVsmIzM5O21jLXVzZXJzJiMzOTtdXG4mIzQzO1xuIFxuIGRlZiBkdW1wX21jYWRkcl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbiAgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4tICAgIFZlcmlmeSB0aGF0IGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UgaGFzIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcy5cbi0gICAgQXQgbGVhc3QgdGhlIGxvb3BiYWNrIGludGVyZmFjZSBzaG91bGQgaGF2ZSB0aGlzIGFkZHJlc3MuXG4mIzQzOyAgICBWZXJpZnkgSVB2NCBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCB0aGVpciB1c2VyIGNvdW50cyBpbiBSVE1fR0VUTVVMVElDQVNULlxuJiM0MzsgICAgXCYjMzQ7XCYjMzQ7XCYjMzQ7XG4mIzQzO1xuJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOlxuJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbiYjNDM7ICAgICAgICAgICAgaXAoXCYjMzQ7bGluayBzZXQgbG8gdXBcJiMzNDspXG4mIzQzOyAgICAgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4mIzQzOyAgICAgICAgICAgIGxvX2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM5O2xvJiMzOTspXG4mIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcJiMzNDtpZmEtZmFtaWx5XCYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSlcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4mIzQzOyAgICAgICAgICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3Nlc1xuJiM0MzsgICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1RcbiYjNDM7ICAgICAgICAgICAgXVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgXCYjMzQ7Tm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXCYjMzQ7KVxuJiM0MztcbiYjNDM7ICAgICAgICAgICAgbXJlcSA9IElQVjRfVEVTVF9NVUxUSUNBU1QgJiM0Mzsgc29ja2V0LmluZXRfYXRvbigmIzM5OzEyNy4wLjAuMSYjMzk7KVxuJiM0MzsgICAgICAgICAgICBiZWZvcmUgPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULCBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4mIzQzOyAgICAgICAgICAgIGlmIGJlZm9yZSBpcyBOb25lOlxuJiM0MzsgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wmIzM0OylcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHRyeTpcbiYjNDM7ICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcbiYjNDM7ICAgICAgICAgICAgICAgIHMyLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcbiYjNDM7XG4mIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCxcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbiYjNDM7ICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLFxuJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICBmXCYjMzQ7dXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZcJiMzNDsoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuJiM0MztcbiYjNDM7XG4mIzQzO2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4mIzQzOyAgICBcJiMzNDtcJiMzNDtcJiMzNDtcbiYjNDM7ICAgIFZlcmlmeSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuIFxuLSAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuLSAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCYjMzQ7aWZhLWZhbWlseVwmIzM0Ozogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpXG4mIzQzOyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4mIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxuJiM0MzsgICAgICAgICAgICBpcChcJiMzNDtsaW5rIHNldCBsbyB1cFwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbiYjNDM7ICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCYjMzk7bG8mIzM5OylcbiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNl9URVNUX01VTFRJQ0FTVCwgbG9faWR4KVxuJiM0MzsgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcJiMzNDspXG4mIzQzO1xuJiM0MzsgICAgICAgICAgICBtcmVxID0gSVBWNl9URVNUX01VTFRJQ0FTVCAmIzQzOyBzdHJ1Y3QucGFjaygmIzM5Oz1JJiMzOTssIGxvX2lkeClcbiYjNDM7ICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pXG4mIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuJiM0MzsgICAgICAgICAgICB0cnk6XG4mIzQzOyAgICAgICAgICAgICAgICBzMS5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4mIzQzOyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4gXG4tICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWyYjMzk7bXVsdGljYXN0JiMzOTtdID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxuLSAgICBdXG4mIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4mIzQzOyAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlwmIzM0OylcbiYjNDM7ICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZlwmIzM0O0lQdjYgdXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCYjMzQ7XG4mIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGZcJiMzNDsoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCYjMzQ7KVxuJiM0MzsgICAgICAgICAgICBmaW5hbGx5OlxuJiM0MzsgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuLSAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbi0gICAgICAgICAgICBcJiMzNDtObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3NcJiMzNDspXG4gXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXHUwMDNlIE5vbmU6XG4gICAgIFwmIzM0O1wmIzM0O1wmIzM0O1xuQEAgLTU2LDcgJiM0MzsxMzUsNyBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgIGZcJiMzNDtObyAmIzM5O2ZvcndhcmRpbmcgb24mIzM5OyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cJiMzNDspXG4gXG4gZGVmIG1haW4oKSAtXHUwMDNlIE5vbmU6XG4tICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4mIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pXG4gICAgIGtzZnRfZXhpdCgpXG4gXG4gaWYgX19uYW1lX18gPT0gXCYjMzQ7X19tYWluX19cJiMzNDs6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SVBWNiYjMzQ7LAogICAgJiMzNDtJUF9NVUxUSUNBU1QmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpbmV0X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldF9pZm1jYWRkcl9ub3RpZnkmIzM0OywKICAgICYjMzQ7aW5ldDZfZmlsbF9pZm1jYWRkciYjMzQ7LAogICAgJiMzNDtpbmV0Nl9pZm1jYWRkcl9ub3RpZnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSBJRkFfTUNfVVNFUlMgdG8gSVB2NCBhbmQgSVB2NiBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucy4gSXQgbW9kaWZpZXMgdGhlIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMzAgMTY6NDI6MDEgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbAppbmRleCAxNjNhMTA2YzQxYmI0NS4uMGVjYmQyNGM4OTBjNmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbApAQCAtMTIzLDYgJiM0MzsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czoKICAgICAgIC0KICAgICAgICAgbmFtZTogcHJvdG8KICAgICAgICAgdHlwZTogdTgKJiM0MzsgICAgICAtCiYjNDM7ICAgICAgICBuYW1lOiBtYy11c2VycwomIzQzOyAgICAgICAgdHlwZTogdTMyCiAKIAogb3BlcmF0aW9uczoKQEAgLTE3Niw2ICYjNDM7MTc5LDcgQEAgb3BlcmF0aW9uczoKICAgICAgICAgICB2YWx1ZTogNTgKICAgICAgICAgICBhdHRyaWJ1dGVzOiAmYW1wO21jYWRkci1hdHRycwogICAgICAgICAgICAgLSBtdWx0aWNhc3QKJiM0MzsgICAgICAgICAgICAtIG1jLXVzZXJzCiAgICAgICAgICAgICAtIGNhY2hlaW5mbwogICAgICAgZHVtcDoKICAgICAgICAgcmVxdWVzdDoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oCkBAIC0zNiw2ICYjNDM7MzYsNyBAQCBlbnVtIHsKIAlJRkFfUlRfUFJJT1JJVFksCS8qIHUzMiwgcHJpb3JpdHkvbWV0cmljIGZvciBwcmVmaXggcm91dGUgKi8KIAlJRkFfVEFSR0VUX05FVE5TSUQsCiAJSUZBX1BST1RPLAkJLyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi8KJiM0MzsJSUZBX01DX1VTRVJTLAkJLyogdTMyLCBtdWx0aWNhc3QgZ3JvdXAgdXNlcnMgKi8KIAlfX0lGQV9NQVgsCiB9OwogCmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmMKaW5kZXggYjYzMzdhNDdjMTQxODUuLjExNmNlN2NlYzgwZWRhIDEwMDY0NAotLS0gYS9uZXQvaXB2NC9pZ21wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2lwdjQvaWdtcC5jCkBAIC0xNDczLDYgJiM0MzsxNDczLDcgQEAgaW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCWNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTsKIAogCWlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS0mZ3Q7bXVsdGlhZGRyKSAmbHQ7IDAgfHwKJiM0MzsJICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tJmd0O3VzZXJzKSkgJmx0OyAwIHx8CiAJICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCAmYW1wO2NpKSAmbHQ7IDApIHsKIAkJbmxtc2dfY2FuY2VsKHNrYiwgbmxoKTsKIAkJcmV0dXJuIC1FTVNHU0laRTsKQEAgLTE0OTQsNiAmIzQzOzE0OTUsNyBAQCBzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCiAJc2tiID0gbmxtc2dfbmV3KE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkgJiM0MzsKIAkJCW5sYV90b3RhbF9zaXplKHNpemVvZihfX2JlMzIpKSAmIzQzOwomIzQzOwkJCW5sYV90b3RhbF9zaXplKHNpemVvZih1MzIpKSAmIzQzOwogCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmFfY2FjaGVpbmZvKSksCiAJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIXNrYikKZGlmZiAtLWdpdCBhL25ldC9pcHY2L2FkZHJjb25mLmMgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDQKLS0tIGEvbmV0L2lwdjYvYWRkcmNvbmYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvaXB2Ni9hZGRyY29uZi5jCkBAIC01MjY0LDYgJiM0Mzs1MjY0LDcgQEAgaW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwKIAogCXB1dF9pZmFkZHJtc2cobmxoLCAxMjgsIElGQV9GX1BFUk1BTkVOVCwgc2NvcGUsIGlmaW5kZXgpOwogCWlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgJmFtcDtpZm1jYS0mZ3Q7bWNhX2FkZHIpICZsdDsgMCB8fAomIzQzOwkgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpZm1jYS0mZ3Q7bWNhX3VzZXJzKSkgJmx0OyAwIHx8CiAJICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS0mZ3Q7bWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLSZndDttY2FfdHN0YW1wKSwKIAkJCSAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpICZsdDsgMCkgewogCQlubG1zZ19jYW5jZWwoc2tiLCBubGgpOwpkaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmMKaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NAotLS0gYS9uZXQvaXB2Ni9tY2FzdC5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9pcHY2L21jYXN0LmMKQEAgLTkwOCw2ICYjNDM7OTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAKIAlza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSAmIzQzOwogCQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICYjNDM7CiYjNDM7CQkJbmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICYjNDM7CiAJCQlubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSwKIAkJCUdGUF9LRVJORUwpOwogCWlmICghc2tiKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKaW5kZXggMzYyMjQxM2Q3OTNkYTkuLjBjNjdjN2MwMGQ4NDFjIDEwMDc1NQotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5CiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHkKQEAgLTIsMjcgJiM0MzsyLDEwNiBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogCiBpbXBvcnQgc29ja2V0CiYjNDM7aW1wb3J0IHN0cnVjdAogaW1wb3J0IHRpbWUKLWZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXgKJiM0Mztmcm9tIGxpYi5weSBpbXBvcnQgYmtnLCBpcCwga3NmdF9leGl0LCBrc2Z0X3J1biwga3NmdF9lcSwga3NmdF9nZSwga3NmdF90cnVlLCBLc2Z0U2tpcEV4CiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseQogCiBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QgPSBiJiMzOTtceGUwXHgwMFx4MDBceDAxJiMzOTsKJiM0MztJUFY0X1RFU1RfTVVMVElDQVNUID0gYiYjMzk7XHhlZlx4MDFceDAxXHgwMSYjMzk7CiYjNDM7SVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJiMzOTtmZjAyMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDEyMyYjMzk7KQomIzQzOwomIzQzOwomIzQzO2RlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KToKJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7UmV0dXJuIG1jLXVzZXJzIGZvciBncnAgb24gaWZpbmRleCwgb3IgMCBpZiBhYnNlbnQuJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIGFkZHJzID0gcnRubC5nZXRtdWx0aWNhc3QoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBmYW1pbHl9LCBkdW1wPVRydWUpCiYjNDM7ICAgIG1hdGNoZXMgPSBbYWRkciBmb3IgYWRkciBpbiBhZGRycwomIzQzOyAgICAgICAgICAgICAgIGlmIGFkZHJbJiMzOTttdWx0aWNhc3QmIzM5O10gPT0gZ3JwIGFuZCBhZGRyWyYjMzk7aWZhLWluZGV4JiMzOTtdID09IGlmaW5kZXhdCiYjNDM7ICAgIGlmIG5vdCBtYXRjaGVzOgomIzQzOyAgICAgICAgcmV0dXJuIDAKJiM0MzsgICAgaWYgJiMzOTttYy11c2VycyYjMzk7IG5vdCBpbiBtYXRjaGVzWzBdOgomIzQzOyAgICAgICAgcmV0dXJuIE5vbmUKJiM0MzsKJiM0MzsgICAgcmV0dXJuIG1hdGNoZXNbMF1bJiMzOTttYy11c2VycyYjMzk7XQomIzQzOwogCiBkZWYgZHVtcF9tY2FkZHJfY2hlY2soKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwotICAgIFZlcmlmeSB0aGF0IGF0IGxlYXN0IG9uZSBpbnRlcmZhY2UgaGFzIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcy4KLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy4KJiM0MzsgICAgVmVyaWZ5IElQdjQgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC4KJiM0MzsgICAgJiMzNDsmIzM0OyYjMzQ7CiYjNDM7CiYjNDM7ICAgIHdpdGggTmV0TlMoKSBhcyBuczoKJiM0MzsgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKToKJiM0MzsgICAgICAgICAgICBpcCgmIzM0O2xpbmsgc2V0IGxvIHVwJiMzNDspCiYjNDM7ICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KCkKJiM0MzsgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJiMzOTtsbyYjMzk7KQomIzQzOyAgICAgICAgICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHsmIzM0O2lmYS1mYW1pbHkmIzM0Ozogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpCiYjNDM7CiYjNDM7ICAgICAgICAgICAgYWxsX2hvc3RfbXVsdGljYXN0cyA9IFsKJiM0MzsgICAgICAgICAgICAgICAgYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXMKJiM0MzsgICAgICAgICAgICAgICAgaWYgYWRkclsmIzM5O211bHRpY2FzdCYjMzk7XSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1QKJiM0MzsgICAgICAgICAgICBdCiYjNDM7CiYjNDM7ICAgICAgICAgICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAmIzM0O05vIGludGVyZmFjZSBmb3VuZCB3aXRoIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzcyYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIG1yZXEgPSBJUFY0X1RFU1RfTVVMVElDQVNUICYjNDM7IHNvY2tldC5pbmV0X2F0b24oJiMzOTsxMjcuMC4wLjEmIzM5OykKJiM0MzsgICAgICAgICAgICBiZWZvcmUgPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULCBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pCiYjNDM7ICAgICAgICAgICAgczIgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSkKJiM0MzsgICAgICAgICAgICB0cnk6CiYjNDM7ICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSkKJiM0MzsgICAgICAgICAgICAgICAgczIuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX0FERF9NRU1CRVJTSElQLCBtcmVxKQomIzQzOwomIzQzOyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCwKJiM0MzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSVBWNF9URVNUX01VTFRJQ0FTVCwgbG9faWR4KQomIzQzOyAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMmIzM0OykKJiM0MzsgICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGYmIzM0O3VzZXJzIGRlbHRhICE9IDIgYWZ0ZXIgdHdvIGpvaW5zICYjMzQ7CiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZiYjMzQ7KGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KSYjMzQ7KQomIzQzOyAgICAgICAgICAgIGZpbmFsbHk6CiYjNDM7ICAgICAgICAgICAgICAgIHMxLmNsb3NlKCkKJiM0MzsgICAgICAgICAgICAgICAgczIuY2xvc2UoKQomIzQzOwomIzQzOwomIzQzO2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtJmd0OyBOb25lOgomIzQzOyAgICAmIzM0OyYjMzQ7JiMzNDsKJiM0MzsgICAgVmVyaWZ5IElQdjYgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC4KICAgICAmIzM0OyYjMzQ7JiMzNDsKIAotICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpCi0gICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3QoeyYjMzQ7aWZhLWZhbWlseSYjMzQ7OiBzb2NrZXQuQUZfSU5FVH0sIGR1bXA9VHJ1ZSkKJiM0MzsgICAgd2l0aCBOZXROUygpIGFzIG5zOgomIzQzOyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOgomIzQzOyAgICAgICAgICAgIGlwKCYjMzQ7bGluayBzZXQgbG8gdXAmIzM0OykKJiM0MzsgICAgICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKQomIzQzOyAgICAgICAgICAgIGxvX2lkeCA9IHNvY2tldC5pZl9uYW1ldG9pbmRleCgmIzM5O2xvJiMzOTspCiYjNDM7ICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6CiYjNDM7ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NiYjMzQ7KQomIzQzOwomIzQzOyAgICAgICAgICAgIG1yZXEgPSBJUFY2X1RFU1RfTVVMVElDQVNUICYjNDM7IHN0cnVjdC5wYWNrKCYjMzk7PUkmIzM5OywgbG9faWR4KQomIzQzOyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKQomIzQzOyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKQomIzQzOyAgICAgICAgICAgIHRyeToKJiM0MzsgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9KT0lOX0dST1VQLCBtcmVxKQomIzQzOyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpCiAKLSAgICBhbGxfaG9zdF9tdWx0aWNhc3RzID0gWwotICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWyYjMzk7bXVsdGljYXN0JiMzOTtdID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVAotICAgIF0KJiM0MzsgICAgICAgICAgICAgICAgYWZ0ZXJfam9pbiA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQ2LAomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpCiYjNDM7ICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZToKJiM0MzsgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NiYjMzQ7KQomIzQzOyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsCiYjNDM7ICAgICAgICAgICAgICAgICAgICAgICAgZiYjMzQ7SVB2NiB1c2VycyBkZWx0YSAhPSAyIGFmdGVyIHR3byBqb2lucyAmIzM0OwomIzQzOyAgICAgICAgICAgICAgICAgICAgICAgIGYmIzM0OyhiZWZvcmU9e2JlZm9yZX0sIGFmdGVyPXthZnRlcl9qb2lufSkmIzM0OykKJiM0MzsgICAgICAgICAgICBmaW5hbGx5OgomIzQzOyAgICAgICAgICAgICAgICBzMS5jbG9zZSgpCiYjNDM7ICAgICAgICAgICAgICAgIHMyLmNsb3NlKCkKIAotICAgIGtzZnRfZ2UobGVuKGFsbF9ob3N0X211bHRpY2FzdHMpLCAxLAotICAgICAgICAgICAgJiMzNDtObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3MmIzM0OykKIAogZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtJmd0OyBOb25lOgogICAgICYjMzQ7JiMzNDsmIzM0OwpAQCAtNTYsNyAmIzQzOzEzNSw3IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLSZndDsgTm9uZToKICAgICAgICAgICAgICAgZiYjMzQ7Tm8gJiMzOTtmb3J3YXJkaW5nIG9uJiMzOTsgbm90aWZpY2lhdGlvbiBmb3VuZCBmb3IgaW50ZXJmYWNlIHtpZm5hbWV9JiMzNDspCiAKIGRlZiBtYWluKCkgLSZndDsgTm9uZToKLSAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKQomIzQzOyAgICBrc2Z0X3J1bihbZHVtcF9tY2FkZHJfY2hlY2ssIGR1bXBfbWNhZGRyNl9jaGVjaywgaXB2NF9kZXZjb25mX25vdGlmeV0pCiAgICAga3NmdF9leGl0KCkKIAogaWYgX19uYW1lX18gPT0gJiMzNDtfX21haW5fXyYjMzQ7Ogo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODAwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMzM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBsZXQmIzM5O3MgZGlnIGEgbGl0dGxlIGRlZXBlci4gVGhlIGNvcmUgaWRlYSBpcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCByZWxhdGVkIHRvIG11bHRpY2FzdCBhZGRyZXNzZXMuIEl0JiMzOTtzIHRvdWNoaW5nIGBydC1hZGRyLnlhbWxgIGFuZCBgaWZfYWRkci5oYCwgd2hpY2ggaXMgdHlwaWNhbCBmb3IgYWRkaW5nIG5ldyBhdHRyaWJ1dGVzIHRvIHRoZSBuZXRsaW5rIGludGVyZmFjZS4KClRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGluZXRfZmlsbF9pZm1jYWRkcmAgKGluIGBuZXQvaXB2NC9pZ21wLmNgKSBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIChpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiB3ZSByZXF1ZXN0IG9yIGdldCBub3RpZmljYXRpb25zIGFib3V0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gVGhlIHBhdGNoIGlzIGluY2x1ZGluZyB0aGUgYElGQV9NQ19VU0VSU2AgYXR0cmlidXRlIHRoZXJlLiBJdCYjMzk7cyBhbHNvIG1ha2luZyBhZGp1c3RtZW50cyB0byBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YCwgd2hpY2ggc3VnZ2VzdHMgd2UmIzM5O3JlIGVuc3VyaW5nIHRoYXQgdGhlIGFsbG9jYXRlZCBidWZmZXIgc3BhY2UgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhpcyBuZXcgYXR0cmlidXRlIGluIG5vdGlmaWNhdGlvbnMuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0JiMzOTtzIHByZXR0eSBsb3ctbGV2ZWwuIEl0JiMzOTtzIGdvaW5nIHRvIGFmZmVjdCBtdWx0aWNhc3QgYWRkcmVzcyBkdW1wcyBhbmQgbm90aWZpY2F0aW9ucy4gU28sIGFueXRoaW5nIHRoYXQgcXVlcmllcyBvciBsaXN0ZW5zIGZvciBtdWx0aWNhc3QgZ3JvdXAgaW5mb3JtYXRpb24gdmlhIG5ldGxpbmsgc29ja2V0cyAoc3BlY2lmaWNhbGx5IGBSVE1fR0VUTVVMVElDQVNUYCkgd2lsbCBiZSBpbXBhY3RlZCwgYXMgd2VsbCBhcyBtdWx0aWNhc3QgZ3JvdXAgam9pbnMgYW5kIGxlYXZlcy4KCk5vdywgbGV0JiMzOTtzIHRha2UgYSBjbG9zZXIgbG9vayBhdCB0aG9zZSBmdW5jdGlvbiBtb2RpZmljYXRpb25zLiBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29udGV4dCwgc3BlY2lmaWNhbGx5OgoKKiAgIGBpbmV0X2ZpbGxfaWZtY2FkZHJgCiogICBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgCiogICBgaW5ldDZfZmlsbF9pZm1jYWRkcmAKKiAgIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgCgpJIGFtIGFsc28gaW50ZXJlc3RlZCBpbiBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBvbiBhbGwgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbmVlZCB0byBiZSBlbmFibGVkIGZvciB0aGlzIHBhdGNoIHRvIGZ1bmN0aW9uIGNvcnJlY3RseS4gSSYjMzk7bGwgZG8gYSBxdWljayBncmVwLiBTaW5jZSBpdCBpcyBpbiBgbmV0L2lwdjQvaWdtcC5jYCwgSSYjMzk7bGwgbG9vayBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aWdtcFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9NYWtlZmlsZT02PW9iai15ICAgICA6PSByb3V0ZS5vIGluZXRwZWVyLm8gcHJvdG9jb2wubyBcXFxuLS1cbm5ldC9pcHY0L01ha2VmaWxlLTEzLVx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcdCAgICAgdWRwX29mZmxvYWQubyBhcnAubyBpY21wLm8gZGV2aW5ldC5vIGFmX2luZXQubyBpZ21wLm8gXFxcbm5ldC9pcHY0L01ha2VmaWxlLTE1LVx0ICAgICBmaWJfZnJvbnRlbmQubyBmaWJfc2VtYW50aWNzLm8gZmliX3RyaWUubyBmaWJfbm90aWZpZXIubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NzgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0JiMzOTtzIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBJR01QIE1vZHVsZSBDb21waWxhdGlvbioqCgpSaWdodCwgc28gYGlnbXAub2AuLi4gdGhhdCYjMzk7cyBhbHdheXMgYnVpbHQgd2l0aCBJUHY0LCBubyBzdXJwcmlzZXMgdGhlcmUuIEJ1dCwgSSBuZWVkIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBob3cgdGhlIG11bHRpY2FzdCBjb25maWd1cmF0aW9uIGludGVyYWN0cyB3aXRoIHRoaXMuIFNwZWNpZmljYWxseSwgd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBfTVVMVElDQVNUYD8gTGV0JiMzOTtzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYnkgZGl2aW5nIGludG8gdGhlIHNvdXJjZSBmb3IgYG5ldC9pcHY0L2lnbXAuY2AuIFRoYXQgc2hvdWxkIGdpdmUgbWUgdGhlIGRlZmluaXRpdmUgYW5zd2VyLiBJIGV4cGVjdCB0aGVyZSB3aWxsIGJlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24sIHByb2JhYmx5IGd1YXJkZWQgYnkgdGhhdCBtYWNyby4gSSYjMzk7bGwgZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzIHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGUgbXVsdGljYXN0IHN1cHBvcnQgaXMgZW5hYmxlZCBhcyBJIGV4cGVjdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBfTVVMVElDQVNUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYy0xMDktXG5uZXQvaXB2NC9pZ21wLmM6MTEwOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTExLS8qIFBhcmFtZXRlciBuYW1lcyBhbmQgdmFsdWVzIGFyZSB0YWtlbiBmcm9tIGlnbXAtdjItMDYgZHJhZnQgKi9cbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjAxPXN0YXRpYyB2b2lkIGlwX3NmX2xpc3RfY2xlYXJfYWxsKHN0cnVjdCBpcF9zZl9saXN0ICpwc2YpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMS1cbm5ldC9pcHY0L2lnbXAuYzoyMTI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMTMtXG4tLVxubmV0L2lwdjQvaWdtcC5jPTExNzk9c3RhdGljIHZvaWQgaXBfbWNfZmlsdGVyX2RlbChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyKVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMTg3LVxubmV0L2lwdjQvaWdtcC5jOjExODg6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMTg5LS8qXG4tLVxubmV0L2lwdjQvaWdtcC5jPTEzMDg9c3RhdGljIHZvaWQgX19pZ21wX2dyb3VwX2Ryb3BwZWQoc3RydWN0IGlwX21jX2xpc3QgKmltLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzMTAtXHRzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYgPSBpbS1cdTAwM2VpbnRlcmZhY2U7XG5uZXQvaXB2NC9pZ21wLmM6MTMxMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzMTItXHRzdHJ1Y3QgbmV0ICpuZXQgPSBkZXZfbmV0KGluX2Rldi1cdTAwM2VkZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xMzIwLVxubmV0L2lwdjQvaWdtcC5jOjEzMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xMzIyLVx0aWYgKGltLVx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTM1Mj1zdGF0aWMgdm9pZCBpZ21wX2dyb3VwX2FkZGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSlcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTM1NC1cdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IGltLVx1MDAzZWludGVyZmFjZTtcbm5ldC9pcHY0L2lnbXAuYzoxMzU1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTM1Ni1cdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVx1MDAzZWRldik7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTEzNjMtXG5uZXQvaXB2NC9pZ21wLmM6MTM2NDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTEzNjUtXHRpZiAoaW0tXHUwMDNlbXVsdGlhZGRyID09IElHTVBfQUxMX0hPU1RTKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTU2NS1cdHNwaW5fbG9ja19pbml0KFx1MDAyNmltLVx1MDAzZWxvY2spO1xubmV0L2lwdjQvaWdtcC5jOjE1NjY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNTY3LVx0dGltZXJfc2V0dXAoXHUwMDI2aW0tXHUwMDNldGltZXIsIGlnbXBfdGltZXJfZXhwaXJlLCAwKTtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTU3NS1cbm5ldC9pcHY0L2lnbXAuYzoxNTc2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTU3Ny1cdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNzQ0PXN0YXRpYyB2b2lkIGlwX21jX3Jlam9pbl9ncm91cHMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxubmV0L2lwdjQvaWdtcC5jLTE3NDUte1xubmV0L2lwdjQvaWdtcC5jOjE3NDY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xNzQ3LVx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODI2PXZvaWQgaXBfbWNfcmVtYXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODMyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxODMzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTgzNC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODQyPXZvaWQgaXBfbWNfZG93bihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE4NTAtXG5uZXQvaXB2NC9pZ21wLmM6MTg1MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE4NTItXHRXUklURV9PTkNFKGluX2Rldi1cdTAwM2Vtcl9pZmNfY291bnQsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYy0xODYyLVxubmV0L2lwdjQvaWdtcC5jOjE4NjM6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xODY0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTg3OD12b2lkIGlwX21jX2luaXRfZGV2KHN0cnVjdCBpbl9kZXZpY2UgKmluX2Rldilcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTg4MS1cbm5ldC9pcHY0L2lnbXAuYzoxODgyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTg4My1cdHRpbWVyX3NldHVwKFx1MDAyNmluX2Rldi1cdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xODkzPXZvaWQgaXBfbWNfdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTAyLVx0Zm9yX2VhY2hfcG1jX3J0bmwoaW5fZGV2LCBwbWMpIHtcbm5ldC9pcHY0L2lnbXAuYzoxOTAzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMTkwNC1cdFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTE0PXZvaWQgaXBfbWNfZGVzdHJveV9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xOTIxLVx0aXBfbWNfZG93bihpbl9kZXYpO1xubmV0L2lwdjQvaWdtcC5jOjE5MjI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0xOTIzLVx0aWdtcHYzX2NsZWFyX2RlbHJlYyhpbl9kZXYpO1xuLS1cbm5ldC9pcHY0L2lnbXAuYz0xOTcxPXN0YXRpYyBpbnQgaXBfbWNfZGVsMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTk5MS1cdGlmICghcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0lOQ0xVREVdIFx1MDAyNlx1MDAyNiAhcHNmLVx1MDAzZXNmX2NvdW50W01DQVNUX0VYQ0xVREVdKSB7XG5uZXQvaXB2NC9pZ21wLmM6MTk5MjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTE5OTMtXHRcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cdTAwM2VpbnRlcmZhY2U7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXHRcdFx0cG1jLVx1MDAzZXNvdXJjZXMgPSBwc2YtXHUwMDNlc2ZfbmV4dDtcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjAwMy1cdFx0aWYgKHBzZi1cdTAwM2VzZl9vbGRpbiBcdTAwMjZcdTAwMjZcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjAxNS1cbm5ldC9pcHY0L2lnbXAuYzoyMDE2OiNpZm5kZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwMTctI2RlZmluZSBpZ21wX2lmY19ldmVudCh4KVx0ZG8geyB9IHdoaWxlICgwKVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMDIwPXN0YXRpYyBpbnQgaXBfbWNfZGVsX3NyYyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiAqcG1jYSwgaW50IHNmbW9kZSxcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA0MC1cdHJjdV9yZWFkX3VubG9jaygpO1xubmV0L2lwdjQvaWdtcC5jOjIwNDE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMDQyLVx0c2ZfbWFya3N0YXRlKHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIwNjAtXHQgICAgcG1jLVx1MDAzZXNmY291bnRbTUNBU1RfSU5DTFVERV0pIHtcbm5ldC9pcHY0L2lnbXAuYzoyMDYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjA2Mi1cdFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjA2Ny1cdFx0cG1jLVx1MDAzZXNmbW9kZSA9IE1DQVNUX0lOQ0xVREU7XG5uZXQvaXB2NC9pZ21wLmM6MjA2ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIwNjktXHRcdHBtYy1cdTAwM2VjcmNvdW50ID0gaW5fZGV2LVx1MDAzZW1yX3FydiA/OiBSRUFEX09OQ0UobmV0LVx1MDAzZWlwdjQuc3lzY3RsX2lnbXBfcXJ2KTtcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MjA4Nj1zdGF0aWMgaW50IGlwX21jX2FkZDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIxMTMtXG5uZXQvaXB2NC9pZ21wLmM6MjExNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxubmV0L2lwdjQvaWdtcC5jLTIxMTUtc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTIxOTI9c3RhdGljIGludCBpcF9tY19hZGRfc3JjKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyICpwbWNhLCBpbnQgc2Ztb2RlLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yMjEzLVxubmV0L2lwdjQvaWdtcC5jOjIyMTQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yMjE1LVx0c2ZfbWFya3N0YXRlKHBtYyk7XG4tLVxubmV0L2lwdjQvaWdtcC5jLTIyMzMtXHR9IGVsc2UgaWYgKGlzZXhjbHVkZSAhPSAocG1jLVx1MDAzZXNmY291bnRbTUNBU1RfRVhDTFVERV0gIT0gMCkpIHtcbm5ldC9pcHY0L2lnbXAuYzoyMjM0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjIzNS1cdFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMjI0NC1cdFx0XHRwbWMtXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcbm5ldC9pcHY0L2lnbXAuYzoyMjQ1OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXG5uZXQvaXB2NC9pZ21wLmMtMjI0Ni1cdFx0LyogZWxzZSBubyBmaWx0ZXJzOyBrZWVwIG9sZCBtb2RlIGZvciByZXBvcnRzICovXG4tLVxubmV0L2lwdjQvaWdtcC5jPTI5NTk9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm5ldC9pcHY0L2lnbXAuYy0yOTcwLVxubmV0L2lwdjQvaWdtcC5jOjI5NzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1Rcbm5ldC9pcHY0L2lnbXAuYy0yOTcyLVx0XHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVx1MDAzZWluX2RldikgPyBcJiMzNDtWMVwmIzM0OyA6XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODg1MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDIwNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBJUHY0IGFuZCBJUHY2IE11bHRpY2FzdCBBZGRyZXNzIENvbmZpZ3VyYXRpb24qKgoKQWxyaWdodCwgc28gSSYjMzk7bSBzZWVpbmcgYSBiaXQgb2YgYSBxdWlyayBoZXJlIHdpdGggdGhlIGtlcm5lbCYjMzk7cyBtdWx0aWNhc3QgYWRkcmVzcyBoYW5kbGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19JUF9NVUxUSUNBU1RgIGlzLCBvYnZpb3VzbHksIHJlbGF0ZWQgdG8gSUdNUC4gQnV0IHRoZW4gSSBub3RpY2VkIHRoYXQgYGluZXRfZmlsbF9pZm1jYWRkcmAgaXMgY29tcGlsZWQgcmVnYXJkbGVzcyBvZiB0aGF0IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBIbW0sIHRoYXQmIzM5O3Mgb2RkLiBMZXQgbWUgZG91YmxlLWNoZWNrIC0gb2ggcmlnaHQsIGl0JiMzOTtzIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYWx3YXlzIGluY2x1ZGVkLiBUaGF0IG1ha2VzIHNlbnNlLgoKU28sIHNpbmNlIGl0JiMzOTtzIGluIHRoZSBJR01QIGNvZGUsIEkgbmVlZCB0byBsb29rIGF0IElQdjYgYXMgd2VsbC4gSSYjMzk7bGwgY2hlY2sgYG5ldC9pcHY2L2FkZHJjb25mLmNgIGFuZCBgbmV0L2lwdjYvbWNhc3QuY2AuIE9rYXksIGJvdGggb2YgdGhlc2UgYXJlICphbHdheXMqIGNvbXBpbGVkIGZvciBJUHY2LCBhcyBleHBlY3RlZC4gVGhpcyBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIElQdjYgYmVpbmcgYSByZXF1aXJlbWVudCBmb3IgdGhpcy4gSSBndWVzcyB0aGF0IG1ha2VzIHNlbnNlLgoKTm93IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbXVsdGljYXN0IGFkZHJlc3MgbWFuYWdlbWVudCBhY3R1YWxseSB3b3Jrcy4gSSBuZWVkIHRvIGxvb2sgYXQgdGhlc2UgZnVuY3Rpb25zIHNwZWNpZmljYWxseTogYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBJJiMzOTtsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2ZpbGxfaWZtY2FkZHImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2lwdjQvZGV2aW5ldC5jPTE4NDE9c3RhdGljIGludCBpbl9kZXZfZHVtcF9pZm1jYWRkcihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTUtXHRcdH1cbm5ldC9pcHY0L2RldmluZXQuYzoxODU2Olx0XHRlcnIgPSBpbmV0X2ZpbGxfaWZtY2FkZHIoc2tiLCBpbl9kZXYtXHUwMDNlZGV2LCBpbSwgZmlsbGFyZ3MpO1xubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTctXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE0MzY9c3RhdGljIHZvaWQgaXBfbWNfaGFzaF9yZW1vdmUoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNDQ5LVxubmV0L2lwdjQvaWdtcC5jOjE0NTA6aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0NTEtXHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE0ODY9c3RhdGljIHZvaWQgaW5ldF9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTUwMy1cbm5ldC9pcHY0L2lnbXAuYzoxNTA0Olx0ZXJyID0gaW5ldF9maWxsX2lmbWNhZGRyKHNrYiwgZGV2LCBpbSwgXHUwMDI2ZmlsbGFyZ3MpO1xubmV0L2lwdjQvaWdtcC5jLTE1MDUtXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oPTU9c3RydWN0IGluZXRfZmlsbF9hcmdzIHtcbi0tXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmgtMTMtXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmg6MTQ6aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTE1LVx0XHQgICAgICAgY29uc3Qgc3RydWN0IGlwX21jX2xpc3QgKmltLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5MDIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkludmVzdGlnYXRpbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIFJldHJpZXZhbCBQcm9jZXNzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBpbnRvIGhvdyBtdWx0aWNhc3QgaW50ZXJmYWNlIGFkZHJlc3NlcyBhcmUgaGFuZGxlZC4gSXQgc2VlbXMgdGhlIGZ1bmN0aW9uIGBpbl9kZXZfZHVtcF9pZm1jYWRkcmAgaXMgdGhlIGtleSBzdGFydGluZyBwb2ludCBmb3IgdGhpcyBzcGVjaWZpYyB0cmFjZSwgYW5kIGl0JiMzOTtzIGJlaW5nIGNhbGxlZCBmcm9tIGBpbmV0X2R1bXBfaWZtY2FkZHJgLCB3aGljaCBpcyBpdHNlbGYgdGhlIGhhbmRsZXIgZm9yIHRoZSBgUlRNX0dFVE1VTFRJQ0FTVGAgcm91dGluZyBtZXNzYWdlLiBUaGF0IGdpdmVzIG1lIGEgZ29vZCBlbnRyeSBwb2ludC4gVGhlbiBJIGNhbiBzZWUgdGhhdCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGlzIGNhbGxlZCB3aGVuZXZlciBhIGdyb3VwIGlzIGVpdGhlciBhZGRlZCBvciBkcm9wcGVkLCB3aXRoIGEgZGlyZWN0IGNhbGwgZnJvbSBgaWdtcF9ncm91cF9hZGRlZGAgYW5kIGBpZ21wX2dyb3VwX2Ryb3BwZWRgLiBUaG9zZSBmdW5jdGlvbiBjYWxscywgd2hpY2ggYXJlIGFsc28gcmVmZXJlbmNlZCBhcyBgaXBfbWNfaW5jX2dyb3VwYCBhbmQgYGlwX21jX2RlY19ncm91cGAsIG1ha2Ugc2Vuc2UuCgpOb3csIEkgbmVlZCB0byBjaGVjayB0aGUgSVB2NiBjb3VudGVycGFydHMgdG8gc2VlIGlmIHRoZXkgZm9sbG93IGEgc2ltaWxhciBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIEkmIzM5O2xsIG5lZWQgdG8gZXhhbWluZSBgaW5ldDZfZmlsbF9pZm1jYWRkcmAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgIHRvIHVuZGVyc3RhbmQgaG93IElQdjYgaGFuZGxlcyB0aGVzZSBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCBub3RpZmljYXRpb25zLiBUaGV5IHNob3VsZCBnaXZlIG1lIGEgcGFyYWxsZWwgdmlldyBvZiB0aGUgcHJvY2VzcywgYW5kIHRoZW4gSSBjYW4gY29tcGFyZSB0aGVtIGZvciBwb3NzaWJsZSBkaWZmZXJlbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5ldDZfZmlsbF9pZm1jYWRkciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9hZGRyY29uZi5jPTUxNjQ9c3RhdGljIGludCBpbmV0Nl9maWxsX2lmYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI0MS1cbm5ldC9pcHY2L2FkZHJjb25mLmM6NTI0MjppbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjQzLVx0XHRcdGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLFxuLS1cbm5ldC9pcHY2L2FkZHJjb25mLmM9NTMxND1zdGF0aWMgaW50IGluNl9kdW1wX2FkZHJzKGNvbnN0IHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsIHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01MzQ5LVx0XHRcdFx0Y29udGludWU7XG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUzNTA6XHRcdFx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBmaWxsYXJncyk7XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUzNTEtXHRcdFx0aWYgKGVyciBcdTAwM2MgMClcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTg5ND1zdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTkxNi1cbm5ldC9pcHY2L21jYXN0LmM6OTE3Olx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBcdTAwMjZmaWxsYXJncyk7XG5uZXQvaXB2Ni9tY2FzdC5jLTkxOC1cdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA2ODgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA4MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyBNdWx0aWNhc3QgQ29uZmlndXJhdGlvbiBEZXBlbmRlbmNpZXMqKgoKQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIHNlZW0gdG8gYmUgYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY3JpdGljYWwgcGllY2VzIGZvciBtYW5hZ2luZyBtdWx0aWNhc3QgYWRkcmVzc2VzLCBib3RoIElQdjQgYW5kIElQdjYuCgpNeSBpbW1lZGlhdGUgY29uY2VybiBpcyBJUHY2LiBJIGtub3cgYENPTkZJR19JUFY2YCBpcyBhIGdpdmVuLCB0aGF0JiMzOTtzIGp1c3QgZnVuZGFtZW50YWwuIEJ1dCB0aGUgcXVlc3Rpb24gaXMsICp3aGF0IGVsc2UqIGRvIEkgbmVlZCBlbmFibGVkIGluIHRoZSBrZXJuZWwgY29uZmlnIHRvIGhhdmUgYSBmdW5jdGlvbmFsIG11bHRpY2FzdCBzZXR1cCBmb3IgSVB2Nj8gVGhlcmUgaGFzIHRvIGJlIG1vcmUgdG8gaXQgdGhhbiBqdXN0IHRoYXQuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgdGhlIGRlcGVuZGVuY2llcy4gSXQmIzM5O3MgdGltZSB0byBleHBsb3JlIHRoZSBjb25maWcgc3BhY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2luZXQ2X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9tY2FzdC5jPTg2Mz1zdGF0aWMgc3RydWN0IGlmbWNhZGRyNiAqbWNhX2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXG4tLVxubmV0L2lwdjYvbWNhc3QuYy04OTMtXG5uZXQvaXB2Ni9tY2FzdC5jOjg5NDpzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbm5ldC9pcHY2L21jYXN0LmMtODk1LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgaWZtY2FkZHI2ICppZm1jYSwgaW50IGV2ZW50KVxuLS1cbm5ldC9pcHY2L21jYXN0LmM9OTMzPXN0YXRpYyBpbnQgX19pcHY2X2Rldl9tY19pbmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jLTk3My1cdGlnbXA2X2dyb3VwX2FkZGVkKG1jKTtcbm5ldC9pcHY2L21jYXN0LmM6OTc0Olx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGRldiwgbWMsIFJUTV9ORVdNVUxUSUNBU1QpO1xubmV0L2lwdjYvbWNhc3QuYy05NzUtXHRtdXRleF91bmxvY2soXHUwMDI2aWRldi1cdTAwM2VtY19sb2NrKTtcbi0tXG5uZXQvaXB2Ni9tY2FzdC5jPTk4OT1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxuLS1cbm5ldC9pcHY2L21jYXN0LmMtMTAwNS1cdFx0XHRcdGlnbXA2X2dyb3VwX2Ryb3BwZWQobWEpO1xubmV0L2lwdjYvbWNhc3QuYzoxMDA2Olx0XHRcdFx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGlkZXYtXHUwMDNlZGV2LCBtYSxcbm5ldC9pcHY2L21jYXN0LmMtMTAwNy1cdFx0XHRcdFx0XHQgICAgICBSVE1fREVMTVVMVElDQVNUKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEzNzMKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBGb2N1cyBmb3IgTXVsdGljYXN0IEFkZHJlc3MgSGFuZGxpbmcqKgoKT2theSwgc28gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFkeSB0byBnbzsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIGZ1enppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFyZToKCiogICBgaW5ldF9maWxsX2lmbWNhZGRyYAoqICAgYGluZXRfaWZtY2FkZHJfbm90aWZ5YAoqICAgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgCiogICBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YAoKTm93LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLi4uIGBpbmV0X2ZpbGxfaWZtY2FkZHJgIGFuZCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAgYXJlIHBhcnQgb2YgbmV0bGluayBkdW1wcy4gTmV0bGluayBkdW1wcyBhcmVuJiMzOTt0IGV4YWN0bHkgaG90LCBoaWdoLXBlcmZvcm1hbmNlIHBhdGhzIGluIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBtdWx0aWNhc3QgYWRkcmVzcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgX25vdGlmeWAgdmFyaWFudHMsIGxpa2UgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAsIGFyZSB0cmlnZ2VyZWQgd2hlbiBtdWx0aWNhc3QgZ3JvdXBzIGFyZSBqb2luZWQgb3IgbGVmdCwgd2hpY2ggaXNuJiMzOTt0IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGF0aCBlaXRoZXIuCgpJIHNob3VsZCB2ZXJpZnkgdGhhdCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcmVxdWlyZWQgZm9yIHRoZSBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgIGZ1bmN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpbmV0X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0ODUtXG5uZXQvaXB2NC9pZ21wLmM6MTQ4NjpzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxubmV0L2lwdjQvaWdtcC5jLTE0ODctXHRcdFx0XHQgY29uc3Qgc3RydWN0IGlwX21jX2xpc3QgKmltLCBpbnQgZXZlbnQpXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1MjA9c3RhdGljIHZvaWQgX19fX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLFxuLS1cbm5ldC9pcHY0L2lnbXAuYy0xNTc5LVx0aWdtcF9ncm91cF9hZGRlZChpbSk7XG5uZXQvaXB2NC9pZ21wLmM6MTU4MDpcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cdTAwM2VkZXYsIGltLCBSVE1fTkVXTVVMVElDQVNUKTtcbm5ldC9pcHY0L2lnbXAuYy0xNTgxLVx0aWYgKCFpbl9kZXYtXHUwMDNlZGVhZClcbi0tXG5uZXQvaXB2NC9pZ21wLmM9MTc3OD12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTc5Ny1cdFx0XHRcdF9faWdtcF9ncm91cF9kcm9wcGVkKGksIGdmcCk7XG5uZXQvaXB2NC9pZ21wLmM6MTc5ODpcdFx0XHRcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cdTAwM2VkZXYsIGksXG5uZXQvaXB2NC9pZ21wLmMtMTc5OS1cdFx0XHRcdFx0XHQgICAgIFJUTV9ERUxNVUxUSUNBU1QpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjI0OQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDc3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2Vzcywgc3VtbWFyaXplZCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgRnVuY3Rpb24gQ2FsbCBDb250ZXh0KioKCk9rYXksIHNvIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgaXMgY2FsbGVkIGZyb20gdHdvIG90aGVyIGZ1bmN0aW9ucywgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGFuZCBgX19pcF9tY19kZWNfZ3JvdXBgLiBUaGF0JiMzOTtzIHRoZSBzdGFydGluZyBwb2ludC4gVGhlIGludGVyZXN0aW5nIHRoaW5nIGlzIHRoYXQgKmJvdGgqIG9mIHRoZXNlIHNlZW0gdG8gYmUgY29tcGlsZWQgaW4gcmVnYXJkbGVzcyBvZiB0aGUgYENPTkZJR19JUF9NVUxUSUNBU1RgIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gVGhhdCBmZWVscyBhIGJpdCBvZGQsIGFuZCBwb3RlbnRpYWxseSBpbmVmZmljaWVudCBpZiB3ZSYjMzk7cmUgbm90IGFjdHVhbGx5IHVzaW5nIG11bHRpY2FzdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFNvLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hldGhlciBvciBub3QgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUYCBibG9jay4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0IG9yIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX19faXBfbWNfaW5jX2dyb3VwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2lwdjQvaWdtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE1MTktICovXG5uZXQvaXB2NC9pZ21wLmM6MTUyMDpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXG5uZXQvaXB2NC9pZ21wLmMtMTUyMS1cdFx0XHRcdHVuc2lnbmVkIGludCBtb2RlLCBnZnBfdCBnZnApXG4tLVxubmV0L2lwdjQvaWdtcC5jPTE1ODc9dm9pZCBfX2lwX21jX2luY19ncm91cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIF9fYmUzMiBhZGRyLCBnZnBfdCBnZnApXG5uZXQvaXB2NC9pZ21wLmMtMTU4OC17XG5uZXQvaXB2NC9pZ21wLmM6MTU4OTpcdF9fX19pcF9tY19pbmNfZ3JvdXAoaW5fZGV2LCBhZGRyLCBNQ0FTVF9FWENMVURFLCBnZnApO1xubmV0L2lwdjQvaWdtcC5jLTE1OTAtfVxuLS1cbm5ldC9pcHY0L2lnbXAuYz0yMjgxPXN0YXRpYyBpbnQgX19pcF9tY19qb2luX2dyb3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IGlwX21yZXFuICppbXIsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTIzMjQtXHRyY3VfYXNzaWduX3BvaW50ZXIoaW5ldC1cdTAwM2VtY19saXN0LCBpbWwpO1xubmV0L2lwdjQvaWdtcC5jOjIzMjU6XHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgbW9kZSwgR0ZQX0tFUk5FTCk7XG5uZXQvaXB2NC9pZ21wLmMtMjMyNi1cdGVyciA9IDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTQ4CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTgwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk11bHRpY2FzdCBHcm91cCBNYW5hZ2VtZW50OiBBIENvbmZpZyBDb251bmRydW0qKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gdGhpcyBtdWx0aWNhc3Qgc3R1ZmYsIHNwZWNpZmljYWxseSBob3cgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBnZXRzIHRyaWdnZXJlZC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBtdWx0aWNhc3QgZ3JvdXAgbWFuYWdlbWVudCwgdGhlIGpvaW5pbmcgYW5kIGxlYXZpbmcgb2YgZ3JvdXBzIGhhbmRsZWQgYnkgc29tZXRoaW5nIGxpa2UgYF9fX19pcF9tY19pbmNfZ3JvdXBgLCBpcyBhbHdheXMgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBObyBtYXR0ZXIgd2hhdC4gVGhhdCYjMzk7cyBldmlkZW50IGZyb20gdGhlIGZhY3QgdGhhdCBgbmV0L2lwdjQvaWdtcC5jYCBhbmQgdGhhdCBmdW5jdGlvbiBhcmUgYWx3YXlzIGluY2x1ZGVkLiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZG9lcyBlbmFibGUgSUdNUCBwcm90b2NvbCBzcGVjaWZpYyBmZWF0dXJlcywgd2hpY2ggYXJlIG9idmlvdXNseSBzZXBhcmF0ZS4KClNvLCBpbiB0aGVvcnksIEkgZG9uJiMzOTt0ICpuZWVkKiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZW5hYmxlZCBmb3IgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCB0byBiZSBjYWxsZWQuIFN0aWxsLCBpdCBmZWVscyBsaWtlIGEgZ29vZCBpZGVhIHRvIGluY2x1ZGUgaXQsIGp1c3QgaW4gY2FzZSB0aGVyZSBhcmUgc29tZSBzdWJ0bGUgZGVwZW5kZW5jaWVzIEkmIzM5O20gbm90IHNlZWluZyByaWdodCBub3cuIEFuZCByZWFsaXN0aWNhbGx5LCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zIGFueXdheS4gV2UgY2FuIHByb2JhYmx5IGp1c3QgYXNzdW1lIGl0JiMzOTtzIGFscmVhZHkgb24uCgpIb3dldmVyLCBJUHY2IGlzIGFuIGVudGlyZWx5IHNlcGFyYXRlIGJlYXN0LiBJICprbm93KiBgbmV0L2lwdjYvbWNhc3QuY2AgaXMgaW52b2x2ZWQgZm9yIElQdjYgbXVsdGljYXN0LiBTbyBsZXQmIzM5O3MgY2hlY2sgaXQgb3ZlciB0byBsb29rIGZvciB0aG9zZSBjb25maWcgb3B0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfSVBWNiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9pcHY2L21jYXN0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzQ0OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB1bmRlcnN0YW5kaW5nLCBmcmFtZWQgYXMgbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOgoKKipSZXZpZXdpbmcgSVB2NiBNdWx0aWNhc3QgaW4gdGhlIEtlcm5lbCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG5ldC9pcHY2L21jYXN0LmNgLiBUaGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhlIG9idmlvdXM6IHRoaXMgZmlsZSwgYW5kIHRoZSBtdWx0aWNhc3QgZnVuY3Rpb25hbGl0eSBpdCBpbXBsZW1lbnRzLCBpcyAqb25seSogY29tcGlsZWQgaW50byB0aGUga2VybmVsIGlmIGBDT05GSUdfSVBWNmAgaXMgZW5hYmxlZC4gVGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLiBXaXRob3V0IElQdjYgc3VwcG9ydCBhcyBhIHdob2xlLCB0aGVyZSYjMzk7cyBubyBuZWVkIGZvciBJUHY2IG11bHRpY2FzdCBzcGVjaWZpY2FsbHkuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeS4gSXQmIzM5O3MgYSBjb3JlIGJ1aWxkaW5nIGJsb2NrIHRpZWQgdG8gdGhlIGJyb2FkZXIgSVB2NiBhcmNoaXRlY3R1cmUsIHNvIEkmIzM5O2QgZXhwZWN0IHRoaXMuIEdvb2QgdG8gc2VlIHRoaXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGV4cGxpY2l0bHkgZGVmaW5lZCwga2VlcGluZyB0aGUga2VybmVsIGxlYW4gd2hlcmUgaXQgY2FuLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttY2FzdFxcLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2Ni9NYWtlZmlsZT04PWlwdjYteSA6PVx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcbi0tXG5uZXQvaXB2Ni9NYWtlZmlsZS0xMC1cdFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlOjExOlx0XHRyYXcubyBpY21wLm8gbWNhc3QubyByZWFzc2VtYmx5Lm8gdGNwX2lwdjYubyBwaW5nLm8gXFxcbm5ldC9pcHY2L01ha2VmaWxlLTEyLVx0XHRleHRoZHJzLm8gZGF0YWdyYW0ubyBpcDZfZmxvd2xhYmVsLm8gaW5ldDZfY29ubmVjdGlvbl9zb2NrLm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MjcKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYG1jYXN0Lm9gIGFuZCBSZWxhdGVkIENvbmZpZ3VyYXRpb25zKioKClJpZ2h0LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYG1jYXN0Lm9gIG1vZHVsZS4gSXQmIzM5O3MgcHJldHR5IGNsZWFyIHRoYXQgaXQmIzM5O3MgKmFsd2F5cyogY29tcGlsZWQgd2hlbiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQmIzM5O3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLgoKU28sIGRpZ2dpbmcgZGVlcGVyLCB0aGUgdHdvIGtleSBjb25maWd1cmF0aW9ucyB0aWVkIHRvIHRoaXMgYXJlIGNsZWFybHkgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYC4gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRob3NlIHR3by4gVGhleSYjMzk7cmUgb2J2aW91c2x5IGNvdXBsZWQgaGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3QgbWlzc2luZyBhbnkgc3VidGxldGllcy4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIHJlYWxseSBkb3VibGUtY2hlY2sgaWYgdGhhdCBgSUZBX01DX1VTRVJTYCBzeW1ib2wgaXMgdXRpbGl6ZWQgZWxzZXdoZXJlIGluIHRoZSBrZXJuZWwgc291cmNlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCBpdHMgYnJvYWRlciBjb250ZXh0IGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGRlcGVuZGVuY2llcyBhdCBwbGF5LiBJdCYjMzk7cyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgYW5kIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBkbyBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUZBX01DX1VTRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg9MjY9ZW51bSB7XG4tLVxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0zOC1cdElGQV9QUk9UTyxcdFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmg6Mzk6XHRJRkFfTUNfVVNFUlMsXHRcdC8qIHUzMiwgbXVsdGljYXN0IGdyb3VwIHVzZXJzICovXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oLTQwLVx0X19JRkFfTUFYLFxuLS1cbm5ldC9pcHY0L2lnbXAuYz0xNDUwPWludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5uZXQvaXB2NC9pZ21wLmMtMTQ3NS1cdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC9pZ21wLmM6MTQ3NjpcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGltLVx1MDAzZXVzZXJzKSkgXHUwMDNjIDAgfHxcbm5ldC9pcHY0L2lnbXAuYy0xNDc3LVx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcdTAwMjZjaSkgXHUwMDNjIDApIHtcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jPTUyNDI9aW50IGluZXQ2X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYixcbi0tXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjYtXHRpZiAobmxhX3B1dF9pbjZfYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIFx1MDAyNmlmbWNhLVx1MDAzZW1jYV9hZGRyKSBcdTAwM2MgMCB8fFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjY3Olx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3VzZXJzKSkgXHUwMDNjIDAgfHxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI2OC1cdCAgICBwdXRfY2FjaGVpbmZvKHNrYiwgaWZtY2EtXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV90c3RhbXApLFxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk9Mjk9ZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTEtICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjUyOiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS01My1cbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTYyLSAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5OjYzOiAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcJiMzNDtrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wmIzM0OylcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNjQtICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbi0tXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTcyPWRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXHUwMDNlIE5vbmU6XG4tLVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04NC0gICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk6ODU6ICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCYjMzQ7a2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcJiMzNDspXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTg2LVxuLS1cbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTYtICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk6OTc6ICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFwmIzM0O2tlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTIGZvciBJUHY2XCYjMzQ7KVxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS05OC0gICAgICAgICAgICAgICAga3NmdF9lcShhZnRlcl9qb2luIC0gYmVmb3JlLCAyLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8zMCAxNjo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTA3NwoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDY3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE11bHRpY2FzdCBBZGRyZXNzIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbmFsIGluIG5hdHVyZSBhbmQgZGVmaW5pdGVseSB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZSBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSByZWxldmFudCBjb25maWd1cmF0aW9ucyBhcmUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYC4gSSBzaG91bGQgYWxzbyBxdWlja2x5IHZlcmlmeSBpZiBgSVBWNl9NUk9VVEVgIG9yIGFueSByZWxhdGVkIG9wdGlvbiBpcyBuZWVkZWQsIGJ1dCBteSBleHBlY3RhdGlvbiBpcyB0aGF0IGl0IGlzbiYjMzk7dC4gWWVhaCwgYG1jYXN0LmNgIGFuZCBgYWRkcmNvbmYuY2AgYXJlIGNvbnNpc3RlbnRseSBjb21waWxlZCB3aXRoIGBJUFY2YCwgc28gdGhhdCYjMzk7cyBoYW5kbGVkLgoKSSB3YW50IHRvIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBzbyBJJiMzOTtsbCByZXZpZXcgdGhlIGRpZmYuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUuIE5vdyB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBtaW5pbWFsLCBzaW1wbHkgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGluIHRoZSByZXNwb25zZS4KCkdpdmVuIHRoYXQgdGhpcyBpcyBhICpuZXcqIG5ldGxpbmsgYXR0cmlidXRlLCBldmVuIGEgc21hbGwgY2hhbmdlIGxpa2UgdGhpcyBjb3VsZCBiZSBzaWduaWZpY2FudCBmb3IgZnV6emluZzsgbmV0bGluayBtZXNzYWdlcyBhcmUgYSBnb29kIHNvdXJjZSBvZiBidWdzLiBUaGUga2VybmVsIGlzIG5vdyBzZW5kaW5nIGBJRkFfTUNfVVNFUlNgIHRvIHVzZXIgc3BhY2UuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhpcyBpcyBiZWluZyBoYW5kbGVkIGNvcnJlY3RseSBpbiB1c2VyIHNwYWNlIChhbmQga2VybmVsIHNwYWNlKSwgc28gSSB3aWxsIGNoZWNrIHRoZSBrZXJuZWwgY29kZSB0byBzZWUgaWYgdGhpcyBuZXcgYXR0cmlidXRlIGlzIHBhcnNlZCB0aGVyZS4gSSBkb24mIzM5O3Qgc2VlIHBhcnNpbmcsIHNvIGl0IHNlZW1zIHRoZSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgaXMgb25seSBhZGRlZCB0byByZXNwb25zZXMuIEkgc3RpbGwgd2FudCB0byBmdXp6IHRoaXMsIHNpbmNlIGl0JiMzOTtzIGEgbmV3IGF0dHJpYnV0ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7SUZBX01DX1VTRVJTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4tLVxubmV0L2lwdjQvaWdtcC5jLTE0NzUtXHRpZiAobmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgaW0tXHUwMDNlbXVsdGlhZGRyKSBcdTAwM2MgMCB8fFxubmV0L2lwdjQvaWdtcC5jOjE0NzY6XHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cdTAwM2V1c2VycykpIFx1MDAzYyAwIHx8XG5uZXQvaXB2NC9pZ21wLmMtMTQ3Ny1cdCAgICBubGFfcHV0KHNrYiwgSUZBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgXHUwMDI2Y2kpIFx1MDAzYyAwKSB7XG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYz01MjQyPWludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXG4tLVxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjY2LVx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcdTAwMjZpZm1jYS1cdTAwM2VtY2FfYWRkcikgXHUwMDNjIDAgfHxcbm5ldC9pcHY2L2FkZHJjb25mLmM6NTI2NzpcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV91c2VycykpIFx1MDAzYyAwIHx8XG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjgtXHQgICAgcHV0X2NhY2hlaW5mbyhza2IsIGlmbWNhLVx1MDAzZW1jYV9jc3RhbXAsIFJFQURfT05DRShpZm1jYS1cdTAwM2VtY2FfdHN0YW1wKSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMzAgMTY6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTY1MTMKCQkJCQkJCW91dHB1dDogMTIyCgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgSnVzdGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUga2VybmVsICpvbmx5KiBzZW5kcyB0aGUgZGF0YSwgYnV0IHRoYXQmIzM5O3MgZW5vdWdoIHRvIHdhcnJhbnQgYSBjbG9zZXIgbG9vay4gSXMgdGhpcyBwYXRjaCBmdXp6LXdvcnRoeT8gQWJzb2x1dGVseS4gSXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgdG91Y2hpbmcgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byBuZXRsaW5rIGR1bXBzLCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIHRoZSBoYW5kbGluZyBvZiBtdWx0aWNhc3QgYWRkcmVzc2VzLiBFdmVuIGlmIGl0JiMzOTtzICYjMzQ7anVzdCYjMzQ7IHNlbmRpbmcgZGF0YSwgaXQmIzM5O3MgYSBuZXcgYXR0cmlidXRlLCBgSUZBX01DX1VTRVJTYCwgYW5kIHRoYXQgKmFsd2F5cyogaW1wYWN0cyB0aGUgc2l6ZSBvZiB0aGUgbmV0bGluayBtZXNzYWdlLiBUaGlzIHBhdGNoIGFsc28gdG91Y2hlcyBjcnVjaWFsIGFsbG9jYXRpb24gc2l6ZXMgd2l0aGluIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBJZiB0aG9zZSBhbGxvY2F0aW9ucyBhcmUgb2ZmLCBpdCBjb3VsZCBsZWFkIHRvIGEgbmFzdHkgYnVmZmVyIG92ZXJmbG93IG9yLCBhdCB0aGUgdmVyeSBsZWFzdCwgYSBjb25jZXJuaW5nIHdhcm5pbmcsIGFuZCB0aGF0IGhhcyB0byBiZSBpbnZlc3RpZ2F0ZWQuCgpUaGVyZWZvcmUsIEkmIzM5O20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVG8gZW5zdXJlIHRob3JvdWdoIGNvdmVyYWdlLCBJIHdpbGwgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCB0byBib3RoIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IG1vZGlmaWVzIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGRlZXAgd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBGb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLCB0aGUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGVuYWJsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzMwIDE2OjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJUFY2JiMzNDssCiAgICAmIzM0O0lQX01VTFRJQ0FTVCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2luZXRfZmlsbF9pZm1jYWRkciYjMzQ7LAogICAgJiMzNDtpbmV0X2lmbWNhZGRyX25vdGlmeSYjMzQ7LAogICAgJiMzNDtpbmV0Nl9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXQ2X2lmbWNhZGRyX25vdGlmeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIElGQV9NQ19VU0VSUyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzIGFuZCBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIGFsbG9jYXRpb24gc2l6ZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lQVjYmIzM0OywKICAgICYjMzQ7SVBfTVVMVElDQVNUJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW5ldF9maWxsX2lmbWNhZGRyJiMzNDssCiAgICAmIzM0O2luZXRfaWZtY2FkZHJfbm90aWZ5JiMzNDssCiAgICAmIzM0O2luZXQ2X2ZpbGxfaWZtY2FkZHImIzM0OywKICAgICYjMzQ7aW5ldDZfaWZtY2FkZHJfbm90aWZ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjAzLjEyNzU2ODA5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc1MTg0MzExMDEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MDMuMTI3NTc4MTE4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NDc4MTc0NTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVuIDMwIDE2OjQyOjAxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWwgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0bGluay9zcGVjcy9ydC1hZGRyLnlhbWxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sXFxuQEAgLTEyMyw2ICsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czpcXG4gICAgICAgLVxcbiAgICAgICAgIG5hbWU6IHByb3RvXFxuICAgICAgICAgdHlwZTogdThcXG4rICAgICAgLVxcbisgICAgICAgIG5hbWU6IG1jLXVzZXJzXFxuKyAgICAgICAgdHlwZTogdTMyXFxuIFxcbiBcXG4gb3BlcmF0aW9uczpcXG5AQCAtMTc2LDYgKzE3OSw3IEBAIG9wZXJhdGlvbnM6XFxuICAgICAgICAgICB2YWx1ZTogNThcXG4gICAgICAgICAgIGF0dHJpYnV0ZXM6IFxcdTAwMjZtY2FkZHItYXR0cnNcXG4gICAgICAgICAgICAgLSBtdWx0aWNhc3RcXG4rICAgICAgICAgICAgLSBtYy11c2Vyc1xcbiAgICAgICAgICAgICAtIGNhY2hlaW5mb1xcbiAgICAgICBkdW1wOlxcbiAgICAgICAgIHJlcXVlc3Q6XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmggYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuaW5kZXggYWE3OTU4YjRlNDFkMDQuLjdmYjYzMGI3ZmUzMTFhIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcXG4rKysgYi9pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oXFxuQEAgLTM2LDYgKzM2LDcgQEAgZW51bSB7XFxuIFxcdElGQV9SVF9QUklPUklUWSxcXHQvKiB1MzIsIHByaW9yaXR5L21ldHJpYyBmb3IgcHJlZml4IHJvdXRlICovXFxuIFxcdElGQV9UQVJHRVRfTkVUTlNJRCxcXG4gXFx0SUZBX1BST1RPLFxcdFxcdC8qIHU4LCBhZGRyZXNzIHByb3RvY29sICovXFxuK1xcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbiBcXHRfX0lGQV9NQVgsXFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9uZXQvaXB2NC9pZ21wLmMgYi9uZXQvaXB2NC9pZ21wLmNcXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uMTE2Y2U3Y2VjODBlZGEgMTAwNjQ0XFxuLS0tIGEvbmV0L2lwdjQvaWdtcC5jXFxuKysrIGIvbmV0L2lwdjQvaWdtcC5jXFxuQEAgLTE0NzMsNiArMTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0Y2kuaWZhX3ZhbGlkID0gSU5GSU5JVFlfTElGRV9USU1FO1xcbiBcXG4gXFx0aWYgKG5sYV9wdXRfaW5fYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIGltLVxcdTAwM2VtdWx0aWFkZHIpIFxcdTAwM2MgMCB8fFxcbitcXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cXHUwMDNldXNlcnMpKSBcXHUwMDNjIDAgfHxcXG4gXFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcXHUwMDI2Y2kpIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xcbiBcXHRcXHRyZXR1cm4gLUVNU0dTSVpFO1xcbkBAIC0xNDk0LDYgKzE0OTUsNyBAQCBzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gXFx0c2tiID0gbmxtc2dfbmV3KE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkgK1xcbiBcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2YoX19iZTMyKSkgK1xcbitcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xcbiBcXHRcXHRcXHRubGFfdG90YWxfc2l6ZShzaXplb2Yoc3RydWN0IGlmYV9jYWNoZWluZm8pKSxcXG4gXFx0XFx0XFx0R0ZQX0tFUk5FTCk7XFxuIFxcdGlmICghc2tiKVxcbmRpZmYgLS1naXQgYS9uZXQvaXB2Ni9hZGRyY29uZi5jIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcXG4tLS0gYS9uZXQvaXB2Ni9hZGRyY29uZi5jXFxuKysrIGIvbmV0L2lwdjYvYWRkcmNvbmYuY1xcbkBAIC01MjY0LDYgKzUyNjQsNyBAQCBpbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXG4gXFx0cHV0X2lmYWRkcm1zZyhubGgsIDEyOCwgSUZBX0ZfUEVSTUFORU5ULCBzY29wZSwgaWZpbmRleCk7XFxuIFxcdGlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgXFx1MDAyNmlmbWNhLVxcdTAwM2VtY2FfYWRkcikgXFx1MDAzYyAwIHx8XFxuK1xcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdXNlcnMpKSBcXHUwMDNjIDAgfHxcXG4gXFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdHN0YW1wKSxcXG4gXFx0XFx0XFx0ICBJTkZJTklUWV9MSUZFX1RJTUUsIElORklOSVRZX0xJRkVfVElNRSkgXFx1MDAzYyAwKSB7XFxuIFxcdFxcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XFxuZGlmZiAtLWdpdCBhL25ldC9pcHY2L21jYXN0LmMgYi9uZXQvaXB2Ni9tY2FzdC5jXFxuaW5kZXggMDRiODExYjNiZTk3OGUuLjc3NGY0YzcyYTZmYTljIDEwMDY0NFxcbi0tLSBhL25ldC9pcHY2L21jYXN0LmNcXG4rKysgYi9uZXQvaXB2Ni9tY2FzdC5jXFxuQEAgLTkwOCw2ICs5MDgsNyBAQCBzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFxuIFxcdHNrYiA9IG5sbXNnX25ldyhOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpICtcXG4gXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICtcXG4rXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHUzMikpICtcXG4gXFx0XFx0XFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpZmFfY2FjaGVpbmZvKSksXFxuIFxcdFxcdFxcdEdGUF9LRVJORUwpO1xcbiBcXHRpZiAoIXNrYilcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5pbmRleCAzNjIyNDEzZDc5M2RhOS4uMGM2N2M3YzAwZDg0MWMgMTAwNzU1XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weVxcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcXG5AQCAtMiwyNyArMiwxMDYgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBcXG4gaW1wb3J0IHNvY2tldFxcbitpbXBvcnQgc3RydWN0XFxuIGltcG9ydCB0aW1lXFxuLWZyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcXG4rZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZXEsIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxcbiBcXG4gSVBWNF9BTExfSE9TVFNfTVVMVElDQVNUID0gYidcXFxceGUwXFxcXHgwMFxcXFx4MDBcXFxceDAxJ1xcbitJUFY0X1RFU1RfTVVMVElDQVNUID0gYidcXFxceGVmXFxcXHgwMVxcXFx4MDFcXFxceDAxJ1xcbitJUFY2X1RFU1RfTVVMVElDQVNUID0gYnl0ZXMuZnJvbWhleCgnZmYwMjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAxMjMnKVxcbitcXG4rXFxuK2RlZiBfdXNlcnNfZm9yKHJ0bmw6IFJ0bmxBZGRyRmFtaWx5LCBmYW1pbHk6IGludCwgZ3JwOiBieXRlcywgaWZpbmRleDogaW50KTpcXG4rICAgIFxcXCJcXFwiXFxcIlJldHVybiBtYy11c2VycyBmb3IgZ3JwIG9uIGlmaW5kZXgsIG9yIDAgaWYgYWJzZW50LlxcXCJcXFwiXFxcIlxcbitcXG4rICAgIGFkZHJzID0gcnRubC5nZXRtdWx0aWNhc3Qoe1xcXCJpZmEtZmFtaWx5XFxcIjogZmFtaWx5fSwgZHVtcD1UcnVlKVxcbisgICAgbWF0Y2hlcyA9IFthZGRyIGZvciBhZGRyIGluIGFkZHJzXFxuKyAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IGdycCBhbmQgYWRkclsnaWZhLWluZGV4J10gPT0gaWZpbmRleF1cXG4rICAgIGlmIG5vdCBtYXRjaGVzOlxcbisgICAgICAgIHJldHVybiAwXFxuKyAgICBpZiAnbWMtdXNlcnMnIG5vdCBpbiBtYXRjaGVzWzBdOlxcbisgICAgICAgIHJldHVybiBOb25lXFxuK1xcbisgICAgcmV0dXJuIG1hdGNoZXNbMF1bJ21jLXVzZXJzJ11cXG4rXFxuIFxcbiBkZWYgZHVtcF9tY2FkZHJfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuLSAgICBWZXJpZnkgdGhhdCBhdCBsZWFzdCBvbmUgaW50ZXJmYWNlIGhhcyB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3MuXFxuLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy5cXG4rICAgIFZlcmlmeSBJUHY0IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXFxuKyAgICBcXFwiXFxcIlxcXCJcXG4rXFxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XFxuKyAgICAgICAgd2l0aCBOZXROU0VudGVyKHN0cihucykpOlxcbisgICAgICAgICAgICBpcChcXFwibGluayBzZXQgbG8gdXBcXFwiKVxcbisgICAgICAgICAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxcbisgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJ2xvJylcXG4rICAgICAgICAgICAgYWRkcmVzc2VzID0gcnRubC5nZXRtdWx0aWNhc3Qoe1xcXCJpZmEtZmFtaWx5XFxcIjogc29ja2V0LkFGX0lORVR9LCBkdW1wPVRydWUpXFxuK1xcbisgICAgICAgICAgICBhbGxfaG9zdF9tdWx0aWNhc3RzID0gW1xcbisgICAgICAgICAgICAgICAgYWRkciBmb3IgYWRkciBpbiBhZGRyZXNzZXNcXG4rICAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxcbisgICAgICAgICAgICBdXFxuK1xcbisgICAgICAgICAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcXG4rICAgICAgICAgICAgICAgICAgICBcXFwiTm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXFxcIilcXG4rXFxuKyAgICAgICAgICAgIG1yZXEgPSBJUFY0X1RFU1RfTVVMVElDQVNUICsgc29ja2V0LmluZXRfYXRvbignMTI3LjAuMC4xJylcXG4rICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCwgSVBWNF9URVNUX01VTFRJQ0FTVCwgbG9faWR4KVxcbisgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXFxcIilcXG4rXFxuKyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVCwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHRyeTpcXG4rICAgICAgICAgICAgICAgIHMxLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcXG4rICAgICAgICAgICAgICAgIHMyLnNldHNvY2tvcHQoc29ja2V0LklQUFJPVE9fSVAsIHNvY2tldC5JUF9BRERfTUVNQkVSU0hJUCwgbXJlcSlcXG4rXFxuKyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVCxcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1xcXCIpXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwidXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXFxcIlxcbisgICAgICAgICAgICAgICAgICAgICAgICBmXFxcIihiZWZvcmU9e2JlZm9yZX0sIGFmdGVyPXthZnRlcl9qb2lufSlcXFwiKVxcbisgICAgICAgICAgICBmaW5hbGx5OlxcbisgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxcbisgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxcbitcXG4rXFxuK2RlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbisgICAgXFxcIlxcXCJcXFwiXFxuKyAgICBWZXJpZnkgSVB2NiBtdWx0aWNhc3QgYWRkcmVzc2VzIGFuZCB0aGVpciB1c2VyIGNvdW50cyBpbiBSVE1fR0VUTVVMVElDQVNULlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuIFxcbi0gICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4tICAgIGFkZHJlc3NlcyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcXFwiaWZhLWZhbWlseVxcXCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxcbisgICAgd2l0aCBOZXROUygpIGFzIG5zOlxcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcXG4rICAgICAgICAgICAgaXAoXFxcImxpbmsgc2V0IGxvIHVwXFxcIilcXG4rICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcXG4rICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCdsbycpXFxuKyAgICAgICAgICAgIGJlZm9yZSA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQ2LFxcbisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XFxuKyAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxuK1xcbisgICAgICAgICAgICBtcmVxID0gSVBWNl9URVNUX01VTFRJQ0FTVCArIHN0cnVjdC5wYWNrKCc9SScsIGxvX2lkeClcXG4rICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVUNiwgc29ja2V0LlNPQ0tfREdSQU0pXFxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxcbisgICAgICAgICAgICB0cnk6XFxuKyAgICAgICAgICAgICAgICBzMS5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXFxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXFxuIFxcbi0gICAgYWxsX2hvc3RfbXVsdGljYXN0cyA9IFtcXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1RcXG4tICAgIF1cXG4rICAgICAgICAgICAgICAgIGFmdGVyX2pvaW4gPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVUNixcXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG4rICAgICAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwiSVB2NiB1c2VycyBkZWx0YSAhPSAyIGFmdGVyIHR3byBqb2lucyBcXFwiXFxuKyAgICAgICAgICAgICAgICAgICAgICAgIGZcXFwiKGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KVxcXCIpXFxuKyAgICAgICAgICAgIGZpbmFsbHk6XFxuKyAgICAgICAgICAgICAgICBzMS5jbG9zZSgpXFxuKyAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXFxuIFxcbi0gICAga3NmdF9nZShsZW4oYWxsX2hvc3RfbXVsdGljYXN0cyksIDEsXFxuLSAgICAgICAgICAgIFxcXCJObyBpbnRlcmZhY2UgZm91bmQgd2l0aCB0aGUgSVB2NCBhbGwtaG9zdHMgbXVsdGljYXN0IGFkZHJlc3NcXFwiKVxcbiBcXG4gZGVmIGlwdjRfZGV2Y29uZl9ub3RpZnkoKSAtXFx1MDAzZSBOb25lOlxcbiAgICAgXFxcIlxcXCJcXFwiXFxuQEAgLTU2LDcgKzEzNSw3IEBAIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVxcdTAwM2UgTm9uZTpcXG4gICAgICAgICAgICAgICBmXFxcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cXFwiKVxcbiBcXG4gZGVmIG1haW4oKSAtXFx1MDAzZSBOb25lOlxcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4rICAgIGtzZnRfcnVuKFtkdW1wX21jYWRkcl9jaGVjaywgZHVtcF9tY2FkZHI2X2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcXG4gICAgIGtzZnRfZXhpdCgpXFxuIFxcbiBpZiBfX25hbWVfXyA9PSBcXFwiX19tYWluX19cXFwiOlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjowMy44NzcxMjk5MDVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc0NDM0NzI0NDc3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4ZDA0MzQ5Y2Q2NGUyMTk4Y2VjYjkzODE4ZmQ4YmU4OTEyOGMyMDhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBKdW4gMzAgMTY6NDI6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldGxpbmsvc3BlY3MvcnQtYWRkci55YW1sIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuaW5kZXggMTYzYTEwNmM0MWJiNDUuLjBlY2JkMjRjODkwYzZiIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXRsaW5rL3NwZWNzL3J0LWFkZHIueWFtbFxuQEAgLTEyMyw2ICsxMjMsOSBAQCBhdHRyaWJ1dGUtc2V0czpcbiAgICAgICAtXG4gICAgICAgICBuYW1lOiBwcm90b1xuICAgICAgICAgdHlwZTogdThcbisgICAgICAtXG4rICAgICAgICBuYW1lOiBtYy11c2Vyc1xuKyAgICAgICAgdHlwZTogdTMyXG4gXG4gXG4gb3BlcmF0aW9uczpcbkBAIC0xNzYsNiArMTc5LDcgQEAgb3BlcmF0aW9uczpcbiAgICAgICAgICAgdmFsdWU6IDU4XG4gICAgICAgICAgIGF0dHJpYnV0ZXM6IFx1MDAyNm1jYWRkci1hdHRyc1xuICAgICAgICAgICAgIC0gbXVsdGljYXN0XG4rICAgICAgICAgICAgLSBtYy11c2Vyc1xuICAgICAgICAgICAgIC0gY2FjaGVpbmZvXG4gICAgICAgZHVtcDpcbiAgICAgICAgIHJlcXVlc3Q6XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaCBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbmluZGV4IGFhNzk1OGI0ZTQxZDA0Li43ZmI2MzBiN2ZlMzExYSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmhcbkBAIC0zNiw2ICszNiw3IEBAIGVudW0ge1xuIFx0SUZBX1JUX1BSSU9SSVRZLFx0LyogdTMyLCBwcmlvcml0eS9tZXRyaWMgZm9yIHByZWZpeCByb3V0ZSAqL1xuIFx0SUZBX1RBUkdFVF9ORVROU0lELFxuIFx0SUZBX1BST1RPLFx0XHQvKiB1OCwgYWRkcmVzcyBwcm90b2NvbCAqL1xuK1x0SUZBX01DX1VTRVJTLFx0XHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xuIFx0X19JRkFfTUFYLFxuIH07XG4gXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjQvaWdtcC5jIGIvbmV0L2lwdjQvaWdtcC5jXG5pbmRleCBiNjMzN2E0N2MxNDE4NS4uMTE2Y2U3Y2VjODBlZGEgMTAwNjQ0XG4tLS0gYS9uZXQvaXB2NC9pZ21wLmNcbisrKyBiL25ldC9pcHY0L2lnbXAuY1xuQEAgLTE0NzMsNiArMTQ3Myw3IEBAIGludCBpbmV0X2ZpbGxfaWZtY2FkZHIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdGNpLmlmYV92YWxpZCA9IElORklOSVRZX0xJRkVfVElNRTtcbiBcbiBcdGlmIChubGFfcHV0X2luX2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBpbS1cdTAwM2VtdWx0aWFkZHIpIFx1MDAzYyAwIHx8XG4rXHQgICAgbmxhX3B1dF91MzIoc2tiLCBJRkFfTUNfVVNFUlMsIFJFQURfT05DRShpbS1cdTAwM2V1c2VycykpIFx1MDAzYyAwIHx8XG4gXHQgICAgbmxhX3B1dChza2IsIElGQV9DQUNIRUlORk8sIHNpemVvZihjaSksIFx1MDAyNmNpKSBcdTAwM2MgMCkge1xuIFx0XHRubG1zZ19jYW5jZWwoc2tiLCBubGgpO1xuIFx0XHRyZXR1cm4gLUVNU0dTSVpFO1xuQEAgLTE0OTQsNiArMTQ5NSw3IEBAIHN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSArXG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKF9fYmUzMikpICtcbitcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvYWRkcmNvbmYuYyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbmluZGV4IGNiZTY4MWRlMzgxODgyLi5mMWZlOWVkZTFlZGIzNyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L2FkZHJjb25mLmNcbisrKyBiL25ldC9pcHY2L2FkZHJjb25mLmNcbkBAIC01MjY0LDYgKzUyNjQsNyBAQCBpbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIFx0cHV0X2lmYWRkcm1zZyhubGgsIDEyOCwgSUZBX0ZfUEVSTUFORU5ULCBzY29wZSwgaWZpbmRleCk7XG4gXHRpZiAobmxhX3B1dF9pbjZfYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIFx1MDAyNmlmbWNhLVx1MDAzZW1jYV9hZGRyKSBcdTAwM2MgMCB8fFxuK1x0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXHUwMDNlbWNhX3VzZXJzKSkgXHUwMDNjIDAgfHxcbiBcdCAgICBwdXRfY2FjaGVpbmZvKHNrYiwgaWZtY2EtXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVx1MDAzZW1jYV90c3RhbXApLFxuIFx0XHRcdCAgSU5GSU5JVFlfTElGRV9USU1FLCBJTkZJTklUWV9MSUZFX1RJTUUpIFx1MDAzYyAwKSB7XG4gXHRcdG5sbXNnX2NhbmNlbChza2IsIG5saCk7XG5kaWZmIC0tZ2l0IGEvbmV0L2lwdjYvbWNhc3QuYyBiL25ldC9pcHY2L21jYXN0LmNcbmluZGV4IDA0YjgxMWIzYmU5NzhlLi43NzRmNGM3MmE2ZmE5YyAxMDA2NDRcbi0tLSBhL25ldC9pcHY2L21jYXN0LmNcbisrKyBiL25ldC9pcHY2L21jYXN0LmNcbkBAIC05MDgsNiArOTA4LDcgQEAgc3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gXHRza2IgPSBubG1zZ19uZXcoTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBpZmFkZHJtc2cpKSArXG4gXHRcdFx0bmxhX3RvdGFsX3NpemUoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpICtcbitcdFx0XHRubGFfdG90YWxfc2l6ZShzaXplb2YodTMyKSkgK1xuIFx0XHRcdG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgaWZhX2NhY2hlaW5mbykpLFxuIFx0XHRcdEdGUF9LRVJORUwpO1xuIFx0aWYgKCFza2IpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weSBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbmluZGV4IDM2MjI0MTNkNzkzZGE5Li4wYzY3YzdjMDBkODQxYyAxMDA3NTVcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHlcbkBAIC0yLDI3ICsyLDEwNiBAQFxuICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbiBcbiBpbXBvcnQgc29ja2V0XG4raW1wb3J0IHN0cnVjdFxuIGltcG9ydCB0aW1lXG4tZnJvbSBsaWIucHkgaW1wb3J0IGJrZywgaXAsIGtzZnRfZXhpdCwga3NmdF9ydW4sIGtzZnRfZ2UsIGtzZnRfdHJ1ZSwgS3NmdFNraXBFeFxuK2Zyb20gbGliLnB5IGltcG9ydCBia2csIGlwLCBrc2Z0X2V4aXQsIGtzZnRfcnVuLCBrc2Z0X2VxLCBrc2Z0X2dlLCBrc2Z0X3RydWUsIEtzZnRTa2lwRXhcbiBmcm9tIGxpYi5weSBpbXBvcnQgQ21kRXhpdEZhaWx1cmUsIE5ldE5TLCBOZXROU0VudGVyLCBSdG5sQWRkckZhbWlseVxuIFxuIElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVCA9IGInXFx4ZTBcXHgwMFxceDAwXFx4MDEnXG4rSVBWNF9URVNUX01VTFRJQ0FTVCA9IGInXFx4ZWZcXHgwMVxceDAxXFx4MDEnXG4rSVBWNl9URVNUX01VTFRJQ0FTVCA9IGJ5dGVzLmZyb21oZXgoJ2ZmMDIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMTIzJylcbitcbitcbitkZWYgX3VzZXJzX2ZvcihydG5sOiBSdG5sQWRkckZhbWlseSwgZmFtaWx5OiBpbnQsIGdycDogYnl0ZXMsIGlmaW5kZXg6IGludCk6XG4rICAgIFwiXCJcIlJldHVybiBtYy11c2VycyBmb3IgZ3JwIG9uIGlmaW5kZXgsIG9yIDAgaWYgYWJzZW50LlwiXCJcIlxuK1xuKyAgICBhZGRycyA9IHJ0bmwuZ2V0bXVsdGljYXN0KHtcImlmYS1mYW1pbHlcIjogZmFtaWx5fSwgZHVtcD1UcnVlKVxuKyAgICBtYXRjaGVzID0gW2FkZHIgZm9yIGFkZHIgaW4gYWRkcnNcbisgICAgICAgICAgICAgICBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBncnAgYW5kIGFkZHJbJ2lmYS1pbmRleCddID09IGlmaW5kZXhdXG4rICAgIGlmIG5vdCBtYXRjaGVzOlxuKyAgICAgICAgcmV0dXJuIDBcbisgICAgaWYgJ21jLXVzZXJzJyBub3QgaW4gbWF0Y2hlc1swXTpcbisgICAgICAgIHJldHVybiBOb25lXG4rXG4rICAgIHJldHVybiBtYXRjaGVzWzBdWydtYy11c2VycyddXG4rXG4gXG4gZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbi0gICAgVmVyaWZ5IHRoYXQgYXQgbGVhc3Qgb25lIGludGVyZmFjZSBoYXMgdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzLlxuLSAgICBBdCBsZWFzdCB0aGUgbG9vcGJhY2sgaW50ZXJmYWNlIHNob3VsZCBoYXZlIHRoaXMgYWRkcmVzcy5cbisgICAgVmVyaWZ5IElQdjQgbXVsdGljYXN0IGFkZHJlc3NlcyBhbmQgdGhlaXIgdXNlciBjb3VudHMgaW4gUlRNX0dFVE1VTFRJQ0FTVC5cbisgICAgXCJcIlwiXG4rXG4rICAgIHdpdGggTmV0TlMoKSBhcyBuczpcbisgICAgICAgIHdpdGggTmV0TlNFbnRlcihzdHIobnMpKTpcbisgICAgICAgICAgICBpcChcImxpbmsgc2V0IGxvIHVwXCIpXG4rICAgICAgICAgICAgcnRubCA9IFJ0bmxBZGRyRmFtaWx5KClcbisgICAgICAgICAgICBsb19pZHggPSBzb2NrZXQuaWZfbmFtZXRvaW5kZXgoJ2xvJylcbisgICAgICAgICAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuK1xuKyAgICAgICAgICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4rICAgICAgICAgICAgICAgIGFkZHIgZm9yIGFkZHIgaW4gYWRkcmVzc2VzXG4rICAgICAgICAgICAgICAgIGlmIGFkZHJbJ211bHRpY2FzdCddID09IElQVjRfQUxMX0hPU1RTX01VTFRJQ0FTVFxuKyAgICAgICAgICAgIF1cbitcbisgICAgICAgICAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbisgICAgICAgICAgICAgICAgICAgIFwiTm8gaW50ZXJmYWNlIGZvdW5kIHdpdGggdGhlIElQdjQgYWxsLWhvc3RzIG11bHRpY2FzdCBhZGRyZXNzXCIpXG4rXG4rICAgICAgICAgICAgbXJlcSA9IElQVjRfVEVTVF9NVUxUSUNBU1QgKyBzb2NrZXQuaW5ldF9hdG9uKCcxMjcuMC4wLjEnKVxuKyAgICAgICAgICAgIGJlZm9yZSA9IF91c2Vyc19mb3IocnRubCwgc29ja2V0LkFGX0lORVQsIElQVjRfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbisgICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcbisgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXCIpXG4rXG4rICAgICAgICAgICAgczEgPSBzb2NrZXQuc29ja2V0KHNvY2tldC5BRl9JTkVULCBzb2NrZXQuU09DS19ER1JBTSlcbisgICAgICAgICAgICBzMiA9IHNvY2tldC5zb2NrZXQoc29ja2V0LkFGX0lORVQsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUCwgc29ja2V0LklQX0FERF9NRU1CRVJTSElQLCBtcmVxKVxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQLCBzb2NrZXQuSVBfQUREX01FTUJFUlNISVAsIG1yZXEpXG4rXG4rICAgICAgICAgICAgICAgIGFmdGVyX2pvaW4gPSBfdXNlcnNfZm9yKHJ0bmwsIHNvY2tldC5BRl9JTkVULFxuKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY0X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4rICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcbisgICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSU1wiKVxuKyAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXG4rICAgICAgICAgICAgICAgICAgICAgICAgZlwidXNlcnMgZGVsdGEgIT0gMiBhZnRlciB0d28gam9pbnMgXCJcbisgICAgICAgICAgICAgICAgICAgICAgICBmXCIoYmVmb3JlPXtiZWZvcmV9LCBhZnRlcj17YWZ0ZXJfam9pbn0pXCIpXG4rICAgICAgICAgICAgZmluYWxseTpcbisgICAgICAgICAgICAgICAgczEuY2xvc2UoKVxuKyAgICAgICAgICAgICAgICBzMi5jbG9zZSgpXG4rXG4rXG4rZGVmIGR1bXBfbWNhZGRyNl9jaGVjaygpIC1cdTAwM2UgTm9uZTpcbisgICAgXCJcIlwiXG4rICAgIFZlcmlmeSBJUHY2IG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIHRoZWlyIHVzZXIgY291bnRzIGluIFJUTV9HRVRNVUxUSUNBU1QuXG4gICAgIFwiXCJcIlxuIFxuLSAgICBydG5sID0gUnRubEFkZHJGYW1pbHkoKVxuLSAgICBhZGRyZXNzZXMgPSBydG5sLmdldG11bHRpY2FzdCh7XCJpZmEtZmFtaWx5XCI6IHNvY2tldC5BRl9JTkVUfSwgZHVtcD1UcnVlKVxuKyAgICB3aXRoIE5ldE5TKCkgYXMgbnM6XG4rICAgICAgICB3aXRoIE5ldE5TRW50ZXIoc3RyKG5zKSk6XG4rICAgICAgICAgICAgaXAoXCJsaW5rIHNldCBsbyB1cFwiKVxuKyAgICAgICAgICAgIHJ0bmwgPSBSdG5sQWRkckZhbWlseSgpXG4rICAgICAgICAgICAgbG9faWR4ID0gc29ja2V0LmlmX25hbWV0b2luZGV4KCdsbycpXG4rICAgICAgICAgICAgYmVmb3JlID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJUFY2X1RFU1RfTVVMVElDQVNULCBsb19pZHgpXG4rICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XG4rICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlwiKVxuK1xuKyAgICAgICAgICAgIG1yZXEgPSBJUFY2X1RFU1RfTVVMVElDQVNUICsgc3RydWN0LnBhY2soJz1JJywgbG9faWR4KVxuKyAgICAgICAgICAgIHMxID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHMyID0gc29ja2V0LnNvY2tldChzb2NrZXQuQUZfSU5FVDYsIHNvY2tldC5TT0NLX0RHUkFNKVxuKyAgICAgICAgICAgIHRyeTpcbisgICAgICAgICAgICAgICAgczEuc2V0c29ja29wdChzb2NrZXQuSVBQUk9UT19JUFY2LCBzb2NrZXQuSVBWNl9KT0lOX0dST1VQLCBtcmVxKVxuKyAgICAgICAgICAgICAgICBzMi5zZXRzb2Nrb3B0KHNvY2tldC5JUFBST1RPX0lQVjYsIHNvY2tldC5JUFY2X0pPSU5fR1JPVVAsIG1yZXEpXG4gXG4tICAgIGFsbF9ob3N0X211bHRpY2FzdHMgPSBbXG4tICAgICAgICBhZGRyIGZvciBhZGRyIGluIGFkZHJlc3NlcyBpZiBhZGRyWydtdWx0aWNhc3QnXSA9PSBJUFY0X0FMTF9IT1NUU19NVUxUSUNBU1Rcbi0gICAgXVxuKyAgICAgICAgICAgICAgICBhZnRlcl9qb2luID0gX3VzZXJzX2ZvcihydG5sLCBzb2NrZXQuQUZfSU5FVDYsXG4rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElQVjZfVEVTVF9NVUxUSUNBU1QsIGxvX2lkeClcbisgICAgICAgICAgICAgICAgaWYgYWZ0ZXJfam9pbiBpcyBOb25lOlxuKyAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTIGZvciBJUHY2XCIpXG4rICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcbisgICAgICAgICAgICAgICAgICAgICAgICBmXCJJUHY2IHVzZXJzIGRlbHRhICE9IDIgYWZ0ZXIgdHdvIGpvaW5zIFwiXG4rICAgICAgICAgICAgICAgICAgICAgICAgZlwiKGJlZm9yZT17YmVmb3JlfSwgYWZ0ZXI9e2FmdGVyX2pvaW59KVwiKVxuKyAgICAgICAgICAgIGZpbmFsbHk6XG4rICAgICAgICAgICAgICAgIHMxLmNsb3NlKClcbisgICAgICAgICAgICAgICAgczIuY2xvc2UoKVxuIFxuLSAgICBrc2Z0X2dlKGxlbihhbGxfaG9zdF9tdWx0aWNhc3RzKSwgMSxcbi0gICAgICAgICAgICBcIk5vIGludGVyZmFjZSBmb3VuZCB3aXRoIHRoZSBJUHY0IGFsbC1ob3N0cyBtdWx0aWNhc3QgYWRkcmVzc1wiKVxuIFxuIGRlZiBpcHY0X2RldmNvbmZfbm90aWZ5KCkgLVx1MDAzZSBOb25lOlxuICAgICBcIlwiXCJcbkBAIC01Niw3ICsxMzUsNyBAQCBkZWYgaXB2NF9kZXZjb25mX25vdGlmeSgpIC1cdTAwM2UgTm9uZTpcbiAgICAgICAgICAgICAgIGZcIk5vICdmb3J3YXJkaW5nIG9uJyBub3RpZmljaWF0aW9uIGZvdW5kIGZvciBpbnRlcmZhY2Uge2lmbmFtZX1cIilcbiBcbiBkZWYgbWFpbigpIC1cdTAwM2UgTm9uZTpcbi0gICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBpcHY0X2RldmNvbmZfbm90aWZ5XSlcbisgICAga3NmdF9ydW4oW2R1bXBfbWNhZGRyX2NoZWNrLCBkdW1wX21jYWRkcjZfY2hlY2ssIGlwdjRfZGV2Y29uZl9ub3RpZnldKVxuICAgICBrc2Z0X2V4aXQoKVxuIFxuIGlmIF9fbmFtZV9fID09IFwiX19tYWluX19cIjpcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjAzLjg3NzEzNTE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY3Njc4Nzg3MTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNdWx0aWNhc3QgQWRkcmVzcyBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2guIEl0IHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2ggb24gdGhlIHN1cmZhY2UsIGJ1dCBsZXQncyBkaWcgYSBsaXR0bGUgZGVlcGVyLiBUaGUgY29yZSBpZGVhIGlzIGFkZGluZyBhIG5ldyBuZXRsaW5rIGF0dHJpYnV0ZSwgYElGQV9NQ19VU0VSU2AsIHJlbGF0ZWQgdG8gbXVsdGljYXN0IGFkZHJlc3Nlcy4gSXQncyB0b3VjaGluZyBgcnQtYWRkci55YW1sYCBhbmQgYGlmX2FkZHIuaGAsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGFkZGluZyBuZXcgYXR0cmlidXRlcyB0byB0aGUgbmV0bGluayBpbnRlcmZhY2UuXG5cblRoZSBtZWF0IG9mIGl0IHNlZW1zIHRvIGJlIGluIHRoZSBjb2RlIGNoYW5nZXMsIHNwZWNpZmljYWxseSBtb2RpZnlpbmcgYGluZXRfZmlsbF9pZm1jYWRkcmAgKGluIGBuZXQvaXB2NC9pZ21wLmNgKSBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIChpbiBgbmV0L2lwdjYvYWRkcmNvbmYuY2ApLiBUaGVzZSBmdW5jdGlvbnMgYXJlIHJlc3BvbnNpYmxlIGZvciBjb25zdHJ1Y3RpbmcgdGhlIG5ldGxpbmsgbWVzc2FnZXMgd2hlbiB3ZSByZXF1ZXN0IG9yIGdldCBub3RpZmljYXRpb25zIGFib3V0IG11bHRpY2FzdCBncm91cCBtZW1iZXJzaGlwcy4gVGhlIHBhdGNoIGlzIGluY2x1ZGluZyB0aGUgYElGQV9NQ19VU0VSU2AgYXR0cmlidXRlIHRoZXJlLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIHRvIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLCB3aGljaCBzdWdnZXN0cyB3ZSdyZSBlbnN1cmluZyB0aGF0IHRoZSBhbGxvY2F0ZWQgYnVmZmVyIHNwYWNlIGlzIGxhcmdlIGVub3VnaCB0byBjb250YWluIHRoaXMgbmV3IGF0dHJpYnV0ZSBpbiBub3RpZmljYXRpb25zLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGl0J3MgcHJldHR5IGxvdy1sZXZlbC4gSXQncyBnb2luZyB0byBhZmZlY3QgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIFNvLCBhbnl0aGluZyB0aGF0IHF1ZXJpZXMgb3IgbGlzdGVucyBmb3IgbXVsdGljYXN0IGdyb3VwIGluZm9ybWF0aW9uIHZpYSBuZXRsaW5rIHNvY2tldHMgKHNwZWNpZmljYWxseSBgUlRNX0dFVE1VTFRJQ0FTVGApIHdpbGwgYmUgaW1wYWN0ZWQsIGFzIHdlbGwgYXMgbXVsdGljYXN0IGdyb3VwIGpvaW5zIGFuZCBsZWF2ZXMuXG5cbk5vdywgbGV0J3MgdGFrZSBhIGNsb3NlciBsb29rIGF0IHRob3NlIGZ1bmN0aW9uIG1vZGlmaWNhdGlvbnMuIEkgd2FudCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LCBzcGVjaWZpY2FsbHk6XG5cbiogICBgaW5ldF9maWxsX2lmbWNhZGRyYFxuKiAgIGBpbmV0X2lmbWNhZGRyX25vdGlmeWBcbiogICBgaW5ldDZfZmlsbF9pZm1jYWRkcmBcbiogICBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YFxuXG5JIGFtIGFsc28gaW50ZXJlc3RlZCBpbiBjb25maWcgb3B0aW9ucyB0byBtYWtlIHN1cmUgaXQgd2lsbCB3b3JrIGNvcnJlY3RseSBvbiBhbGwgY29uZmlndXJhdGlvbnMuIEknbGwgbmVlZCB0byBrbm93IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIHRoaXMgcGF0Y2ggdG8gZnVuY3Rpb24gY29ycmVjdGx5LiBJJ2xsIGRvIGEgcXVpY2sgZ3JlcC4gU2luY2UgaXQgaXMgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIEknbGwgbG9vayBpbnRvIGBuZXQvaXB2NC9NYWtlZmlsZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ4MDAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMzgsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxMC42NDUwMTk1MzlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3MDM5NTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImlnbXBcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvTWFrZWZpbGU9Nj1vYmoteSAgICAgOj0gcm91dGUubyBpbmV0cGVlci5vIHByb3RvY29sLm8gXFxcXFxcbi0tXFxubmV0L2lwdjQvTWFrZWZpbGUtMTMtXFx0ICAgICB0Y3Bfb2ZmbG9hZC5vIHRjcF9wbGIubyBkYXRhZ3JhbS5vIHJhdy5vIHVkcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZToxNDpcXHQgICAgIHVkcF9vZmZsb2FkLm8gYXJwLm8gaWNtcC5vIGRldmluZXQubyBhZl9pbmV0Lm8gaWdtcC5vIFxcXFxcXG5uZXQvaXB2NC9NYWtlZmlsZS0xNS1cXHQgICAgIGZpYl9mcm9udGVuZC5vIGZpYl9zZW1hbnRpY3MubyBmaWJfdHJpZS5vIGZpYl9ub3RpZmllci5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MTAuNzgyMDY5ODk2WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE1NzA0MTkzMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQncyBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBJR01QIE1vZHVsZSBDb21waWxhdGlvbioqXG5cblJpZ2h0LCBzbyBgaWdtcC5vYC4uLiB0aGF0J3MgYWx3YXlzIGJ1aWx0IHdpdGggSVB2NCwgbm8gc3VycHJpc2VzIHRoZXJlLiBCdXQsIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gaG93IHRoZSBtdWx0aWNhc3QgY29uZmlndXJhdGlvbiBpbnRlcmFjdHMgd2l0aCB0aGlzLiBTcGVjaWZpY2FsbHksIHdoYXQncyB0aGUgZGVhbCB3aXRoIGBDT05GSUdfSVBfTVVMVElDQVNUYD8gTGV0J3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBieSBkaXZpbmcgaW50byB0aGUgc291cmNlIGZvciBgbmV0L2lwdjQvaWdtcC5jYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGVmaW5pdGl2ZSBhbnN3ZXIuIEkgZXhwZWN0IHRoZXJlIHdpbGwgYmUgc29tZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiwgcHJvYmFibHkgZ3VhcmRlZCBieSB0aGF0IG1hY3JvLiBJJ2xsIGZvY3VzIG9uIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcyB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhlIG11bHRpY2FzdCBzdXBwb3J0IGlzIGVuYWJsZWQgYXMgSSBleHBlY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NzgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxMy45MzkxMTU3MDVaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA0OTM1MzY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19JUF9NVUxUSUNBU1RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYy0xMDktXFxubmV0L2lwdjQvaWdtcC5jOjExMDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMTEtLyogUGFyYW1ldGVyIG5hbWVzIGFuZCB2YWx1ZXMgYXJlIHRha2VuIGZyb20gaWdtcC12Mi0wNiBkcmFmdCAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTIwMT1zdGF0aWMgdm9pZCBpcF9zZl9saXN0X2NsZWFyX2FsbChzdHJ1Y3QgaXBfc2ZfbGlzdCAqcHNmKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIxMS1cXG5uZXQvaXB2NC9pZ21wLmM6MjEyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMy1cXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMTc5PXN0YXRpYyB2b2lkIGlwX21jX2ZpbHRlcl9kZWwoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xMTg3LVxcbm5ldC9pcHY0L2lnbXAuYzoxMTg4OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTExODktLypcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzA4PXN0YXRpYyB2b2lkIF9faWdtcF9ncm91cF9kcm9wcGVkKHN0cnVjdCBpcF9tY19saXN0ICppbSwgZ2ZwX3QgZ2ZwKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzMTAtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTMxMTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzEyLVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzMjAtXFxubmV0L2lwdjQvaWdtcC5jOjEzMjE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTMyMi1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xMzUyPXN0YXRpYyB2b2lkIGlnbXBfZ3JvdXBfYWRkZWQoc3RydWN0IGlwX21jX2xpc3QgKmltKVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNTQtXFx0c3RydWN0IGluX2RldmljZSAqaW5fZGV2ID0gaW0tXFx1MDAzZWludGVyZmFjZTtcXG5uZXQvaXB2NC9pZ21wLmM6MTM1NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xMzU2LVxcdHN0cnVjdCBuZXQgKm5ldCA9IGRldl9uZXQoaW5fZGV2LVxcdTAwM2VkZXYpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTEzNjMtXFxubmV0L2lwdjQvaWdtcC5jOjEzNjQ6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTM2NS1cXHRpZiAoaW0tXFx1MDAzZW11bHRpYWRkciA9PSBJR01QX0FMTF9IT1NUUylcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTY1LVxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZpbS1cXHUwMDNlbG9jayk7XFxubmV0L2lwdjQvaWdtcC5jOjE1NjY6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTU2Ny1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW0tXFx1MDAzZXRpbWVyLCBpZ21wX3RpbWVyX2V4cGlyZSwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTU3NS1cXG5uZXQvaXB2NC9pZ21wLmM6MTU3NjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xNTc3LVxcdGlnbXB2M19kZWxfZGVscmVjKGluX2RldiwgaW0pO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE3NDQ9c3RhdGljIHZvaWQgaXBfbWNfcmVqb2luX2dyb3VwcyhzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxubmV0L2lwdjQvaWdtcC5jLTE3NDUte1xcbm5ldC9pcHY0L2lnbXAuYzoxNzQ2OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE3NDctXFx0c3RydWN0IGlwX21jX2xpc3QgKmltO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4MjY9dm9pZCBpcF9tY19yZW1hcChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTgzMi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxODMzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4MzQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4NDI9dm9pZCBpcF9tY19kb3duKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xODUwLVxcbm5ldC9pcHY0L2lnbXAuYzoxODUxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE4NTItXFx0V1JJVEVfT05DRShpbl9kZXYtXFx1MDAzZW1yX2lmY19jb3VudCwgMCk7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTg2Mi1cXG5uZXQvaXB2NC9pZ21wLmM6MTg2MzojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xODY0LXN0YXRpYyB2b2lkIGlwX21jX3Jlc2V0KHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldilcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xODc4PXZvaWQgaXBfbWNfaW5pdF9kZXYoc3RydWN0IGluX2RldmljZSAqaW5fZGV2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE4ODEtXFxubmV0L2lwdjQvaWdtcC5jOjE4ODI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTg4My1cXHR0aW1lcl9zZXR1cChcXHUwMDI2aW5fZGV2LVxcdTAwM2Vtcl9ncV90aW1lciwgaWdtcF9ncV90aW1lcl9leHBpcmUsIDApO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE4OTM9dm9pZCBpcF9tY191cChzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkwMi1cXHRmb3JfZWFjaF9wbWNfcnRubChpbl9kZXYsIHBtYykge1xcbm5ldC9pcHY0L2lnbXAuYzoxOTAzOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTE5MDQtXFx0XFx0aWdtcHYzX2RlbF9kZWxyZWMoaW5fZGV2LCBwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE5MTQ9dm9pZCBpcF9tY19kZXN0cm95X2RldihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTkyMS1cXHRpcF9tY19kb3duKGluX2Rldik7XFxubmV0L2lwdjQvaWdtcC5jOjE5MjI6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMTkyMy1cXHRpZ21wdjNfY2xlYXJfZGVscmVjKGluX2Rldik7XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTk3MT1zdGF0aWMgaW50IGlwX21jX2RlbDFfc3JjKHN0cnVjdCBpcF9tY19saXN0ICpwbWMsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTk5MS1cXHRpZiAoIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfSU5DTFVERV0gXFx1MDAyNlxcdTAwMjYgIXBzZi1cXHUwMDNlc2ZfY291bnRbTUNBU1RfRVhDTFVERV0pIHtcXG5uZXQvaXB2NC9pZ21wLmM6MTk5MjojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0xOTkzLVxcdFxcdHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiA9IHBtYy1cXHUwMDNlaW50ZXJmYWNlO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwMDEtXFx0XFx0XFx0cG1jLVxcdTAwM2Vzb3VyY2VzID0gcHNmLVxcdTAwM2VzZl9uZXh0O1xcbm5ldC9pcHY0L2lnbXAuYzoyMDAyOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwMDMtXFx0XFx0aWYgKHBzZi1cXHUwMDNlc2Zfb2xkaW4gXFx1MDAyNlxcdTAwMjZcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDE1LVxcbm5ldC9pcHY0L2lnbXAuYzoyMDE2OiNpZm5kZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDE3LSNkZWZpbmUgaWdtcF9pZmNfZXZlbnQoeClcXHRkbyB7IH0gd2hpbGUgKDApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjAyMD1zdGF0aWMgaW50IGlwX21jX2RlbF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjA0MC1cXHRyY3VfcmVhZF91bmxvY2soKTtcXG5uZXQvaXB2NC9pZ21wLmM6MjA0MTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDQyLVxcdHNmX21hcmtzdGF0ZShwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIwNjAtXFx0ICAgIHBtYy1cXHUwMDNlc2Zjb3VudFtNQ0FTVF9JTkNMVURFXSkge1xcbm5ldC9pcHY0L2lnbXAuYzoyMDYxOiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIwNjItXFx0XFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMDY3LVxcdFxcdHBtYy1cXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcXG5uZXQvaXB2NC9pZ21wLmM6MjA2ODojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMDY5LVxcdFxcdHBtYy1cXHUwMDNlY3Jjb3VudCA9IGluX2Rldi1cXHUwMDNlbXJfcXJ2ID86IFJFQURfT05DRShuZXQtXFx1MDAzZWlwdjQuc3lzY3RsX2lnbXBfcXJ2KTtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0yMDg2PXN0YXRpYyBpbnQgaXBfbWNfYWRkMV9zcmMoc3RydWN0IGlwX21jX2xpc3QgKnBtYywgaW50IHNmbW9kZSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMTEzLVxcbm5ldC9pcHY0L2lnbXAuYzoyMTE0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIxMTUtc3RhdGljIHZvaWQgc2ZfbWFya3N0YXRlKHN0cnVjdCBpcF9tY19saXN0ICpwbWMpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjE5Mj1zdGF0aWMgaW50IGlwX21jX2FkZF9zcmMoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgKnBtY2EsIGludCBzZm1vZGUsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMjIxMy1cXG5uZXQvaXB2NC9pZ21wLmM6MjIxNDojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMjE1LVxcdHNmX21hcmtzdGF0ZShwbWMpO1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIyMzMtXFx0fSBlbHNlIGlmIChpc2V4Y2x1ZGUgIT0gKHBtYy1cXHUwMDNlc2Zjb3VudFtNQ0FTVF9FWENMVURFXSAhPSAwKSkge1xcbm5ldC9pcHY0L2lnbXAuYzoyMjM0OiNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUXFxubmV0L2lwdjQvaWdtcC5jLTIyMzUtXFx0XFx0c3RydWN0IGlwX3NmX2xpc3QgKnBzZjtcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0yMjQ0LVxcdFxcdFxcdHBtYy1cXHUwMDNlc2Ztb2RlID0gTUNBU1RfSU5DTFVERTtcXG5uZXQvaXB2NC9pZ21wLmM6MjI0NTojaWZkZWYgQ09ORklHX0lQX01VTFRJQ0FTVFxcbm5ldC9pcHY0L2lnbXAuYy0yMjQ2LVxcdFxcdC8qIGVsc2Ugbm8gZmlsdGVyczsga2VlcCBvbGQgbW9kZSBmb3IgcmVwb3J0cyAqL1xcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTI5NTk9c3RhdGljIGludCBpZ21wX21jX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTI5NzAtXFxubmV0L2lwdjQvaWdtcC5jOjI5NzE6I2lmZGVmIENPTkZJR19JUF9NVUxUSUNBU1RcXG5uZXQvaXB2NC9pZ21wLmMtMjk3Mi1cXHRcXHRxdWVyaWVyID0gSUdNUF9WMV9TRUVOKHN0YXRlLVxcdTAwM2Vpbl9kZXYpID8gXFxcIlYxXFxcIiA6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjE0LjA0NDA2MDE2NFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4OTkyMjM1MTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIElQdjQgYW5kIElQdjYgTXVsdGljYXN0IEFkZHJlc3MgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIEknbSBzZWVpbmcgYSBiaXQgb2YgYSBxdWlyayBoZXJlIHdpdGggdGhlIGtlcm5lbCdzIG11bHRpY2FzdCBhZGRyZXNzIGhhbmRsaW5nLCBhbmQgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGRlcGVuZGVuY2llcy4gSXQgbG9va3MgbGlrZSBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMsIG9idmlvdXNseSwgcmVsYXRlZCB0byBJR01QLiBCdXQgdGhlbiBJIG5vdGljZWQgdGhhdCBgaW5ldF9maWxsX2lmbWNhZGRyYCBpcyBjb21waWxlZCByZWdhcmRsZXNzIG9mIHRoYXQgY29uZmlndXJhdGlvbiBvcHRpb24uIEhtbSwgdGhhdCdzIG9kZC4gTGV0IG1lIGRvdWJsZS1jaGVjayAtIG9oIHJpZ2h0LCBpdCdzIGRlZmluZWQgaW4gYG5ldC9pcHY0L2lnbXAuY2AsIHdoaWNoLCBhcyBJIHJlY2FsbCwgaXMgYWx3YXlzIGluY2x1ZGVkLiBUaGF0IG1ha2VzIHNlbnNlLlxuXG5Tbywgc2luY2UgaXQncyBpbiB0aGUgSUdNUCBjb2RlLCBJIG5lZWQgdG8gbG9vayBhdCBJUHY2IGFzIHdlbGwuIEknbGwgY2hlY2sgYG5ldC9pcHY2L2FkZHJjb25mLmNgIGFuZCBgbmV0L2lwdjYvbWNhc3QuY2AuIE9rYXksIGJvdGggb2YgdGhlc2UgYXJlICphbHdheXMqIGNvbXBpbGVkIGZvciBJUHY2LCBhcyBleHBlY3RlZC4gVGhpcyBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggSVB2NiBiZWluZyBhIHJlcXVpcmVtZW50IGZvciB0aGlzLiBJIGd1ZXNzIHRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5vdyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIG11bHRpY2FzdCBhZGRyZXNzIG1hbmFnZW1lbnQgYWN0dWFsbHkgd29ya3MuIEkgbmVlZCB0byBsb29rIGF0IHRoZXNlIGZ1bmN0aW9ucyBzcGVjaWZpY2FsbHk6IGBpbmV0X2ZpbGxfaWZtY2FkZHJgLCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgLCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAsIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YC4gSSdsbCBkbyBhIHF1aWNrIHNlYXJjaCBpbiB0aGUga2VybmVsIHNvdXJjZSB0byBzZWUgd2hlcmUgdGhlc2UgZnVuY3Rpb25zIGFyZSBhY3R1YWxseSBjYWxsZWQgdG8gZ2V0IHRoZSBjb250ZXh0IEkgbmVlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODg1MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MjoxOC45NDMyODc5NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1MzI5NjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2lwdjQvZGV2aW5ldC5jPTE4NDE9c3RhdGljIGludCBpbl9kZXZfZHVtcF9pZm1jYWRkcihzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsIHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2NC9kZXZpbmV0LmMtMTg1NS1cXHRcXHR9XFxubmV0L2lwdjQvZGV2aW5ldC5jOjE4NTY6XFx0XFx0ZXJyID0gaW5ldF9maWxsX2lmbWNhZGRyKHNrYiwgaW5fZGV2LVxcdTAwM2VkZXYsIGltLCBmaWxsYXJncyk7XFxubmV0L2lwdjQvZGV2aW5ldC5jLTE4NTctXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTQzNj1zdGF0aWMgdm9pZCBpcF9tY19oYXNoX3JlbW92ZShzdHJ1Y3QgaW5fZGV2aWNlICppbl9kZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ0OS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQ1MDppbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaWdtcC5jLTE0NTEtXFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBpcF9tY19saXN0ICppbSxcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUwMy1cXG5uZXQvaXB2NC9pZ21wLmM6MTUwNDpcXHRlcnIgPSBpbmV0X2ZpbGxfaWZtY2FkZHIoc2tiLCBkZXYsIGltLCBcXHUwMDI2ZmlsbGFyZ3MpO1xcbm5ldC9pcHY0L2lnbXAuYy0xNTA1LVxcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuLS1cXG5uZXQvaXB2NC9pZ21wX2ludGVybmFsLmg9NT1zdHJ1Y3QgaW5ldF9maWxsX2FyZ3Mge1xcbi0tXFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTEzLVxcbm5ldC9pcHY0L2lnbXBfaW50ZXJuYWwuaDoxNDppbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxubmV0L2lwdjQvaWdtcF9pbnRlcm5hbC5oLTE1LVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjE5LjEyODYyODkzNFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ3NzQwMTI0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBNdWx0aWNhc3QgQWRkcmVzcyBSZXRyaWV2YWwgUHJvY2VzcyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGludG8gaG93IG11bHRpY2FzdCBpbnRlcmZhY2UgYWRkcmVzc2VzIGFyZSBoYW5kbGVkLiBJdCBzZWVtcyB0aGUgZnVuY3Rpb24gYGluX2Rldl9kdW1wX2lmbWNhZGRyYCBpcyB0aGUga2V5IHN0YXJ0aW5nIHBvaW50IGZvciB0aGlzIHNwZWNpZmljIHRyYWNlLCBhbmQgaXQncyBiZWluZyBjYWxsZWQgZnJvbSBgaW5ldF9kdW1wX2lmbWNhZGRyYCwgd2hpY2ggaXMgaXRzZWxmIHRoZSBoYW5kbGVyIGZvciB0aGUgYFJUTV9HRVRNVUxUSUNBU1RgIHJvdXRpbmcgbWVzc2FnZS4gVGhhdCBnaXZlcyBtZSBhIGdvb2QgZW50cnkgcG9pbnQuIFRoZW4gSSBjYW4gc2VlIHRoYXQgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBpcyBjYWxsZWQgd2hlbmV2ZXIgYSBncm91cCBpcyBlaXRoZXIgYWRkZWQgb3IgZHJvcHBlZCwgd2l0aCBhIGRpcmVjdCBjYWxsIGZyb20gYGlnbXBfZ3JvdXBfYWRkZWRgIGFuZCBgaWdtcF9ncm91cF9kcm9wcGVkYC4gVGhvc2UgZnVuY3Rpb24gY2FsbHMsIHdoaWNoIGFyZSBhbHNvIHJlZmVyZW5jZWQgYXMgYGlwX21jX2luY19ncm91cGAgYW5kIGBpcF9tY19kZWNfZ3JvdXBgLCBtYWtlIHNlbnNlLlxuXG5Ob3csIEkgbmVlZCB0byBjaGVjayB0aGUgSVB2NiBjb3VudGVycGFydHMgdG8gc2VlIGlmIHRoZXkgZm9sbG93IGEgc2ltaWxhciBwYXR0ZXJuLiBTcGVjaWZpY2FsbHksIEknbGwgbmVlZCB0byBleGFtaW5lIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAgdG8gdW5kZXJzdGFuZCBob3cgSVB2NiBoYW5kbGVzIHRoZXNlIG11bHRpY2FzdCBhZGRyZXNzZXMgYW5kIG5vdGlmaWNhdGlvbnMuIFRoZXkgc2hvdWxkIGdpdmUgbWUgYSBwYXJhbGxlbCB2aWV3IG9mIHRoZSBwcm9jZXNzLCBhbmQgdGhlbiBJIGNhbiBjb21wYXJlIHRoZW0gZm9yIHBvc3NpYmxlIGRpZmZlcmVuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5OTAyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjIzLjkwMjY0Nzg0NVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUwNTM5ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L2FkZHJjb25mLmM9NTE2ND1zdGF0aWMgaW50IGluZXQ2X2ZpbGxfaWZhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNDEtXFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjQyOmludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjQzLVxcdFxcdFxcdGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01MzE0PXN0YXRpYyBpbnQgaW42X2R1bXBfYWRkcnMoY29uc3Qgc3RydWN0IGluZXQ2X2RldiAqaWRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTM0OS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUzNTA6XFx0XFx0XFx0ZXJyID0gaW5ldDZfZmlsbF9pZm1jYWRkcihza2IsIGlmbWNhLCBmaWxsYXJncyk7XFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MzUxLVxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYz04OTQ9c3RhdGljIHZvaWQgaW5ldDZfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTkxNi1cXG5uZXQvaXB2Ni9tY2FzdC5jOjkxNzpcXHRlcnIgPSBpbmV0Nl9maWxsX2lmbWNhZGRyKHNrYiwgaWZtY2EsIFxcdTAwMjZmaWxsYXJncyk7XFxubmV0L2lwdjYvbWNhc3QuYy05MTgtXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MjQuMDUzMjA2NjVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MzY0NjQyNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLlxuXG4qKkludmVzdGlnYXRpbmcgTXVsdGljYXN0IENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCB0aGlzIHN0cmFpZ2h0IGluIG15IGhlYWQuIFRoZSBjb3JlIGZ1bmN0aW9ucyBoZXJlIHNlZW0gdG8gYmUgYGluZXRfZmlsbF9pZm1jYWRkcmAsIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAsIGBpbmV0Nl9maWxsX2lmbWNhZGRyYCwgYW5kIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgLiBUaG9zZSBhcmUgY2xlYXJseSB0aGUgY3JpdGljYWwgcGllY2VzIGZvciBtYW5hZ2luZyBtdWx0aWNhc3QgYWRkcmVzc2VzLCBib3RoIElQdjQgYW5kIElQdjYuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuIGlzIElQdjYuIEkga25vdyBgQ09ORklHX0lQVjZgIGlzIGEgZ2l2ZW4sIHRoYXQncyBqdXN0IGZ1bmRhbWVudGFsLiBCdXQgdGhlIHF1ZXN0aW9uIGlzLCAqd2hhdCBlbHNlKiBkbyBJIG5lZWQgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZyB0byBoYXZlIGEgZnVuY3Rpb25hbCBtdWx0aWNhc3Qgc2V0dXAgZm9yIElQdjY/IFRoZXJlIGhhcyB0byBiZSBtb3JlIHRvIGl0IHRoYW4ganVzdCB0aGF0LiBJIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBkZXBlbmRlbmNpZXMuIEl0J3MgdGltZSB0byBleHBsb3JlIHRoZSBjb25maWcgc3BhY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNjg4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MjcuNzQ2ODU2Nzk3WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDgzMzQ5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW5ldDZfaWZtY2FkZHJfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2Ni9tY2FzdC5jPTg2Mz1zdGF0aWMgc3RydWN0IGlmbWNhZGRyNiAqbWNhX2FsbG9jKHN0cnVjdCBpbmV0Nl9kZXYgKmlkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTg5My1cXG5uZXQvaXB2Ni9tY2FzdC5jOjg5NDpzdGF0aWMgdm9pZCBpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG5uZXQvaXB2Ni9tY2FzdC5jLTg5NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBpZm1jYWRkcjYgKmlmbWNhLCBpbnQgZXZlbnQpXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTkzMz1zdGF0aWMgaW50IF9faXB2Nl9kZXZfbWNfaW5jKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jLTk3My1cXHRpZ21wNl9ncm91cF9hZGRlZChtYyk7XFxubmV0L2lwdjYvbWNhc3QuYzo5NzQ6XFx0aW5ldDZfaWZtY2FkZHJfbm90aWZ5KGRldiwgbWMsIFJUTV9ORVdNVUxUSUNBU1QpO1xcbm5ldC9pcHY2L21jYXN0LmMtOTc1LVxcdG11dGV4X3VubG9jayhcXHUwMDI2aWRldi1cXHUwMDNlbWNfbG9jayk7XFxuLS1cXG5uZXQvaXB2Ni9tY2FzdC5jPTk4OT1pbnQgX19pcHY2X2Rldl9tY19kZWMoc3RydWN0IGluZXQ2X2RldiAqaWRldiwgY29uc3Qgc3RydWN0IGluNl9hZGRyICphZGRyKVxcbi0tXFxubmV0L2lwdjYvbWNhc3QuYy0xMDA1LVxcdFxcdFxcdFxcdGlnbXA2X2dyb3VwX2Ryb3BwZWQobWEpO1xcbm5ldC9pcHY2L21jYXN0LmM6MTAwNjpcXHRcXHRcXHRcXHRpbmV0Nl9pZm1jYWRkcl9ub3RpZnkoaWRldi1cXHUwMDNlZGV2LCBtYSxcXG5uZXQvaXB2Ni9tY2FzdC5jLTEwMDctXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgUlRNX0RFTE1VTFRJQ0FTVCk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjI3Ljk1NTIxNDgxNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODE3NTU5NTI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgRm9jdXMgZm9yIE11bHRpY2FzdCBBZGRyZXNzIEhhbmRsaW5nKipcblxuT2theSwgc28gdGhlc2UgZnVuY3Rpb25hbCBjaGFuZ2VzIGFyZSByZWFkeSB0byBnbzsgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIGZ1enppbmcuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIHByZWNpc2UgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIHRoZSBwcmltYXJ5IHRhcmdldHMgZm9yIGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyB0aGF0IGltbWVkaWF0ZWx5IHNwcmluZyB0byBtaW5kIGFyZTpcblxuKiAgIGBpbmV0X2ZpbGxfaWZtY2FkZHJgXG4qICAgYGluZXRfaWZtY2FkZHJfbm90aWZ5YFxuKiAgIGBpbmV0Nl9maWxsX2lmbWNhZGRyYFxuKiAgIGBpbmV0Nl9pZm1jYWRkcl9ub3RpZnlgXG5cbk5vdywgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4uLiBgaW5ldF9maWxsX2lmbWNhZGRyYCBhbmQgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgIGFyZSBwYXJ0IG9mIG5ldGxpbmsgZHVtcHMuIE5ldGxpbmsgZHVtcHMgYXJlbid0IGV4YWN0bHkgaG90LCBoaWdoLXBlcmZvcm1hbmNlIHBhdGhzIGluIHRoZSBrZXJuZWwuIEhvd2V2ZXIsIHRoZXNlIGZ1bmN0aW9ucyAqYXJlKiBjYWxsZWQgZm9yIGV2ZXJ5IHNpbmdsZSBtdWx0aWNhc3QgYWRkcmVzcy4gT24gdGhlIG90aGVyIGhhbmQsIHRoZSBgX25vdGlmeWAgdmFyaWFudHMsIGxpa2UgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAsIGFyZSB0cmlnZ2VyZWQgd2hlbiBtdWx0aWNhc3QgZ3JvdXBzIGFyZSBqb2luZWQgb3IgbGVmdCwgd2hpY2ggaXNuJ3QgYSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwYXRoIGVpdGhlci5cblxuSSBzaG91bGQgdmVyaWZ5IHRoYXQgYENPTkZJR19JUF9NVUxUSUNBU1RgIGlzIHJlcXVpcmVkIGZvciB0aGUgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBmdW5jdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEzNzMsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MzMuNzcyNzgwMDU0WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODE2MzgyOTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluZXRfaWZtY2FkZHJfbm90aWZ5XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ4NS1cXG5uZXQvaXB2NC9pZ21wLmM6MTQ4NjpzdGF0aWMgdm9pZCBpbmV0X2lmbWNhZGRyX25vdGlmeShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbm5ldC9pcHY0L2lnbXAuYy0xNDg3LVxcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3QgaXBfbWNfbGlzdCAqaW0sIGludCBldmVudClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTIwPXN0YXRpYyB2b2lkIF9fX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkcixcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNTc5LVxcdGlnbXBfZ3JvdXBfYWRkZWQoaW0pO1xcbm5ldC9pcHY0L2lnbXAuYzoxNTgwOlxcdGluZXRfaWZtY2FkZHJfbm90aWZ5KGluX2Rldi1cXHUwMDNlZGV2LCBpbSwgUlRNX05FV01VTFRJQ0FTVCk7XFxubmV0L2lwdjQvaWdtcC5jLTE1ODEtXFx0aWYgKCFpbl9kZXYtXFx1MDAzZWRlYWQpXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MTc3OD12b2lkIF9faXBfbWNfZGVjX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYy0xNzk3LVxcdFxcdFxcdFxcdF9faWdtcF9ncm91cF9kcm9wcGVkKGksIGdmcCk7XFxubmV0L2lwdjQvaWdtcC5jOjE3OTg6XFx0XFx0XFx0XFx0aW5ldF9pZm1jYWRkcl9ub3RpZnkoaW5fZGV2LVxcdTAwM2VkZXYsIGksXFxubmV0L2lwdjQvaWdtcC5jLTE3OTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBSVE1fREVMTVVMVElDQVNUKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6MzUuNTg5MTczNTI1WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM1Mzk1MjI3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgRnVuY3Rpb24gQ2FsbCBDb250ZXh0KipcblxuT2theSwgc28gYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBpcyBjYWxsZWQgZnJvbSB0d28gb3RoZXIgZnVuY3Rpb25zLCBgX19fX2lwX21jX2luY19ncm91cGAgYW5kIGBfX2lwX21jX2RlY19ncm91cGAuIFRoYXQncyB0aGUgc3RhcnRpbmcgcG9pbnQuIFRoZSBpbnRlcmVzdGluZyB0aGluZyBpcyB0aGF0ICpib3RoKiBvZiB0aGVzZSBzZWVtIHRvIGJlIGNvbXBpbGVkIGluIHJlZ2FyZGxlc3Mgb2YgdGhlIGBDT05GSUdfSVBfTVVMVElDQVNUYCBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIFRoYXQgZmVlbHMgYSBiaXQgb2RkLCBhbmQgcG90ZW50aWFsbHkgaW5lZmZpY2llbnQgaWYgd2UncmUgbm90IGFjdHVhbGx5IHVzaW5nIG11bHRpY2FzdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIFNvLCBsZXQgbWUganVzdCBkb3VibGUtY2hlY2sgd2hldGhlciBvciBub3QgYF9fX19pcF9tY19pbmNfZ3JvdXBgIGlzIGFjdHVhbGx5IGd1YXJkZWQgYnkgYW4gYCNpZmRlZiBDT05GSUdfSVBfTVVMVElDQVNUYCBibG9jay4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0IG9yIGEgZGVsaWJlcmF0ZSBkZXNpZ24gZGVjaXNpb24uIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjI0OSwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjM5LjEyODcwMDEzN1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg2ODc2MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fX19pcF9tY19pbmNfZ3JvdXBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjQvaWdtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L2lnbXAuYz0xNDg2PXN0YXRpYyB2b2lkIGluZXRfaWZtY2FkZHJfbm90aWZ5KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTUxOS0gKi9cXG5uZXQvaXB2NC9pZ21wLmM6MTUyMDpzdGF0aWMgdm9pZCBfX19faXBfbWNfaW5jX2dyb3VwKHN0cnVjdCBpbl9kZXZpY2UgKmluX2RldiwgX19iZTMyIGFkZHIsXFxubmV0L2lwdjQvaWdtcC5jLTE1MjEtXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IG1vZGUsIGdmcF90IGdmcClcXG4tLVxcbm5ldC9pcHY0L2lnbXAuYz0xNTg3PXZvaWQgX19pcF9tY19pbmNfZ3JvdXAoc3RydWN0IGluX2RldmljZSAqaW5fZGV2LCBfX2JlMzIgYWRkciwgZ2ZwX3QgZ2ZwKVxcbm5ldC9pcHY0L2lnbXAuYy0xNTg4LXtcXG5uZXQvaXB2NC9pZ21wLmM6MTU4OTpcXHRfX19faXBfbWNfaW5jX2dyb3VwKGluX2RldiwgYWRkciwgTUNBU1RfRVhDTFVERSwgZ2ZwKTtcXG5uZXQvaXB2NC9pZ21wLmMtMTU5MC19XFxuLS1cXG5uZXQvaXB2NC9pZ21wLmM9MjI4MT1zdGF0aWMgaW50IF9faXBfbWNfam9pbl9ncm91cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBpcF9tcmVxbiAqaW1yLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTIzMjQtXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGluZXQtXFx1MDAzZW1jX2xpc3QsIGltbCk7XFxubmV0L2lwdjQvaWdtcC5jOjIzMjU6XFx0X19fX2lwX21jX2luY19ncm91cChpbl9kZXYsIGFkZHIsIG1vZGUsIEdGUF9LRVJORUwpO1xcbm5ldC9pcHY0L2lnbXAuYy0yMzI2LVxcdGVyciA9IDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjM5LjgxNTYyMDc3OVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2Mzk0MjM1NDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk11bHRpY2FzdCBHcm91cCBNYW5hZ2VtZW50OiBBIENvbmZpZyBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgbXVsdGljYXN0IHN0dWZmLCBzcGVjaWZpY2FsbHkgaG93IGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgZ2V0cyB0cmlnZ2VyZWQuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgbXVsdGljYXN0IGdyb3VwIG1hbmFnZW1lbnQsIHRoZSBqb2luaW5nIGFuZCBsZWF2aW5nIG9mIGdyb3VwcyBoYW5kbGVkIGJ5IHNvbWV0aGluZyBsaWtlIGBfX19faXBfbWNfaW5jX2dyb3VwYCwgaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gbWF0dGVyIHdoYXQuIFRoYXQncyBldmlkZW50IGZyb20gdGhlIGZhY3QgdGhhdCBgbmV0L2lwdjQvaWdtcC5jYCBhbmQgdGhhdCBmdW5jdGlvbiBhcmUgYWx3YXlzIGluY2x1ZGVkLiBgQ09ORklHX0lQX01VTFRJQ0FTVGAgZG9lcyBlbmFibGUgSUdNUCBwcm90b2NvbCBzcGVjaWZpYyBmZWF0dXJlcywgd2hpY2ggYXJlIG9idmlvdXNseSBzZXBhcmF0ZS5cblxuU28sIGluIHRoZW9yeSwgSSBkb24ndCAqbmVlZCogYENPTkZJR19JUF9NVUxUSUNBU1RgIGVuYWJsZWQgZm9yIGBpbmV0X2lmbWNhZGRyX25vdGlmeWAgdG8gYmUgY2FsbGVkLiBTdGlsbCwgaXQgZmVlbHMgbGlrZSBhIGdvb2QgaWRlYSB0byBpbmNsdWRlIGl0LCBqdXN0IGluIGNhc2UgdGhlcmUgYXJlIHNvbWUgc3VidGxlIGRlcGVuZGVuY2llcyBJJ20gbm90IHNlZWluZyByaWdodCBub3cuIEFuZCByZWFsaXN0aWNhbGx5LCBgQ09ORklHX0lQX01VTFRJQ0FTVGAgaXMgcHJldHR5IG11Y2ggYSBnaXZlbiBpbiBtb3N0IGNvbmZpZ3VyYXRpb25zIGFueXdheS4gV2UgY2FuIHByb2JhYmx5IGp1c3QgYXNzdW1lIGl0J3MgYWxyZWFkeSBvbi5cblxuSG93ZXZlciwgSVB2NiBpcyBhbiBlbnRpcmVseSBzZXBhcmF0ZSBiZWFzdC4gSSAqa25vdyogYG5ldC9pcHY2L21jYXN0LmNgIGlzIGludm9sdmVkIGZvciBJUHY2IG11bHRpY2FzdC4gU28gbGV0J3MgY2hlY2sgaXQgb3ZlciB0byBsb29rIGZvciB0aG9zZSBjb25maWcgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5NDgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NDYuMjA5ODYwMDdaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU1NDM5NDE2NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX0lQVjZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2lwdjYvbWNhc3QuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NDYuNzY0MjcxMTM2WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0ODY4MDczNDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdW5kZXJzdGFuZGluZywgZnJhbWVkIGFzIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczpcblxuKipSZXZpZXdpbmcgSVB2NiBNdWx0aWNhc3QgaW4gdGhlIEtlcm5lbCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBuZXQvaXB2Ni9tY2FzdC5jYC4gVGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoZSBvYnZpb3VzOiB0aGlzIGZpbGUsIGFuZCB0aGUgbXVsdGljYXN0IGZ1bmN0aW9uYWxpdHkgaXQgaW1wbGVtZW50cywgaXMgKm9ubHkqIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBpZiBgQ09ORklHX0lQVjZgIGlzIGVuYWJsZWQuIFRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZS4gV2l0aG91dCBJUHY2IHN1cHBvcnQgYXMgYSB3aG9sZSwgdGhlcmUncyBubyBuZWVkIGZvciBJUHY2IG11bHRpY2FzdCBzcGVjaWZpY2FsbHkuIEl0J3MgYSBmdW5kYW1lbnRhbCBkZXBlbmRlbmN5LiBJdCdzIGEgY29yZSBidWlsZGluZyBibG9jayB0aWVkIHRvIHRoZSBicm9hZGVyIElQdjYgYXJjaGl0ZWN0dXJlLCBzbyBJJ2QgZXhwZWN0IHRoaXMuIEdvb2QgdG8gc2VlIHRoaXMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmN5IGlzIGV4cGxpY2l0bHkgZGVmaW5lZCwga2VlcGluZyB0aGUga2VybmVsIGxlYW4gd2hlcmUgaXQgY2FuLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzQ0OCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTMwVDE2OjQyOjUwLjI1MTA5MTg2M1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjU1MTE0NDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1jYXN0XFxcXC5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY2L01ha2VmaWxlPTg9aXB2Ni15IDo9XFx0YWZfaW5ldDYubyBhbnljYXN0Lm8gaXA2X291dHB1dC5vIGlwNl9pbnB1dC5vIGFkZHJjb25mLm8gXFxcXFxcbi0tXFxubmV0L2lwdjYvTWFrZWZpbGUtMTAtXFx0XFx0cm91dGUubyBpcDZfZmliLm8gaXB2Nl9zb2NrZ2x1ZS5vIG5kaXNjLm8gdWRwLm8gXFxcXFxcbm5ldC9pcHY2L01ha2VmaWxlOjExOlxcdFxcdHJhdy5vIGljbXAubyBtY2FzdC5vIHJlYXNzZW1ibHkubyB0Y3BfaXB2Ni5vIHBpbmcubyBcXFxcXFxubmV0L2lwdjYvTWFrZWZpbGUtMTItXFx0XFx0ZXh0aGRycy5vIGRhdGFncmFtLm8gaXA2X2Zsb3dsYWJlbC5vIGluZXQ2X2Nvbm5lY3Rpb25fc29jay5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NTAuNTA2MjE2ODk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNjQ4NDc1MDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgbWNhc3Qub2AgYW5kIFJlbGF0ZWQgQ29uZmlndXJhdGlvbnMqKlxuXG5SaWdodCwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgYG1jYXN0Lm9gIG1vZHVsZS4gSXQncyBwcmV0dHkgY2xlYXIgdGhhdCBpdCdzICphbHdheXMqIGNvbXBpbGVkIHdoZW4gYENPTkZJR19JUFY2YCBpcyBlbmFibGVkLiBUaGF0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8ga2VlcCB0aGF0IGZpcm1seSBpbiBtaW5kLlxuXG5TbywgZGlnZ2luZyBkZWVwZXIsIHRoZSB0d28ga2V5IGNvbmZpZ3VyYXRpb25zIHRpZWQgdG8gdGhpcyBhcmUgY2xlYXJseSBgSVBWNmAgYW5kIGBJUF9NVUxUSUNBU1RgLiBJdCdzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiB0aG9zZSB0d28uIFRoZXkncmUgb2J2aW91c2x5IGNvdXBsZWQgaGVyZSwgYnV0IEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGV0aWVzLlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCByZWFsbHkgZG91YmxlLWNoZWNrIGlmIHRoYXQgYElGQV9NQ19VU0VSU2Agc3ltYm9sIGlzIHV0aWxpemVkIGVsc2V3aGVyZSBpbiB0aGUga2VybmVsIHNvdXJjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgaXRzIGJyb2FkZXIgY29udGV4dCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBkZXBlbmRlbmNpZXMgYXQgcGxheS4gSXQncyBhbHdheXMgc21hcnQgdG8gY29uZmlybSBhc3N1bXB0aW9ucywgYW5kIHRoaXMgZmVlbHMgbGlrZSBhIGdvb2Qgc3BvdCB0byBkbyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4MjcsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0Mjo1My43NzEwNzA4NDdaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYwMDkwMjEzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSUZBX01DX1VTRVJTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oPTI2PWVudW0ge1xcbi0tXFxuaW5jbHVkZS91YXBpL2xpbnV4L2lmX2FkZHIuaC0zOC1cXHRJRkFfUFJPVE8sXFx0XFx0LyogdTgsIGFkZHJlc3MgcHJvdG9jb2wgKi9cXG5pbmNsdWRlL3VhcGkvbGludXgvaWZfYWRkci5oOjM5OlxcdElGQV9NQ19VU0VSUyxcXHRcXHQvKiB1MzIsIG11bHRpY2FzdCBncm91cCB1c2VycyAqL1xcbmluY2x1ZGUvdWFwaS9saW51eC9pZl9hZGRyLmgtNDAtXFx0X19JRkFfTUFYLFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jPTE0NTA9aW50IGluZXRfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxubmV0L2lwdjQvaWdtcC5jLTE0NzUtXFx0aWYgKG5sYV9wdXRfaW5fYWRkcihza2IsIElGQV9NVUxUSUNBU1QsIGltLVxcdTAwM2VtdWx0aWFkZHIpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L2lnbXAuYzoxNDc2OlxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGltLVxcdTAwM2V1c2VycykpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L2lnbXAuYy0xNDc3LVxcdCAgICBubGFfcHV0KHNrYiwgSUZBX0NBQ0hFSU5GTywgc2l6ZW9mKGNpKSwgXFx1MDAyNmNpKSBcXHUwMDNjIDApIHtcXG4tLVxcbm5ldC9pcHY2L2FkZHJjb25mLmM9NTI0Mj1pbnQgaW5ldDZfZmlsbF9pZm1jYWRkcihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYy01MjY2LVxcdGlmIChubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgXFx1MDAyNmlmbWNhLVxcdTAwM2VtY2FfYWRkcikgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjYvYWRkcmNvbmYuYzo1MjY3OlxcdCAgICBubGFfcHV0X3UzMihza2IsIElGQV9NQ19VU0VSUywgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdXNlcnMpKSBcXHUwMDNjIDAgfHxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjgtXFx0ICAgIHB1dF9jYWNoZWluZm8oc2tiLCBpZm1jYS1cXHUwMDNlbWNhX2NzdGFtcCwgUkVBRF9PTkNFKGlmbWNhLVxcdTAwM2VtY2FfdHN0YW1wKSxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHk9Mjk9ZGVmIGR1bXBfbWNhZGRyX2NoZWNrKCkgLVxcdTAwM2UgTm9uZTpcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTEtICAgICAgICAgICAgaWYgYmVmb3JlIGlzIE5vbmU6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weTo1MjogICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwia2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlNcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktNTMtXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTYyLSAgICAgICAgICAgICAgICBpZiBhZnRlcl9qb2luIGlzIE5vbmU6XFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weTo2MzogICAgICAgICAgICAgICAgICAgIHJhaXNlIEtzZnRTa2lwRXgoXFxcImtlcm5lbCBkb2VzIG5vdCBleHBvc2UgSUZBX01DX1VTRVJTXFxcIilcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5LTY0LSAgICAgICAgICAgICAgICBrc2Z0X2VxKGFmdGVyX2pvaW4gLSBiZWZvcmUsIDIsXFxuLS1cXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5PTcyPWRlZiBkdW1wX21jYWRkcjZfY2hlY2soKSAtXFx1MDAzZSBOb25lOlxcbi0tXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04NC0gICAgICAgICAgICBpZiBiZWZvcmUgaXMgTm9uZTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5Ojg1OiAgICAgICAgICAgICAgICByYWlzZSBLc2Z0U2tpcEV4KFxcXCJrZXJuZWwgZG9lcyBub3QgZXhwb3NlIElGQV9NQ19VU0VSUyBmb3IgSVB2NlxcXCIpXFxudG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbmV0L3J0bmV0bGluay5weS04Ni1cXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTYtICAgICAgICAgICAgICAgIGlmIGFmdGVyX2pvaW4gaXMgTm9uZTpcXG50b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9uZXQvcnRuZXRsaW5rLnB5Ojk3OiAgICAgICAgICAgICAgICAgICAgcmFpc2UgS3NmdFNraXBFeChcXFwia2VybmVsIGRvZXMgbm90IGV4cG9zZSBJRkFfTUNfVVNFUlMgZm9yIElQdjZcXFwiKVxcbnRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL25ldC9ydG5ldGxpbmsucHktOTgtICAgICAgICAgICAgICAgIGtzZnRfZXEoYWZ0ZXJfam9pbiAtIGJlZm9yZSwgMixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDI6NTkuNzgwMTA2NjM2WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwNTI2NDE5NTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTXVsdGljYXN0IEFkZHJlc3MgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIGNoYW5nZXMsIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGV5IGFyZSBmdW5jdGlvbmFsIGluIG5hdHVyZSBhbmQgZGVmaW5pdGVseSB3YXJyYW50IGZ1enppbmcuIFRoZSBrZXkgc3ltYm9scyBJJ20gZm9jdXNpbmcgb24gYXJlIGBpbmV0X2ZpbGxfaWZtY2FkZHJgLCBgaW5ldF9pZm1jYWRkcl9ub3RpZnlgLCBgaW5ldDZfZmlsbF9pZm1jYWRkcmAsIGFuZCBgaW5ldDZfaWZtY2FkZHJfbm90aWZ5YC4gVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIGFyZSBgSVBWNmAgYW5kIGBJUF9NVUxUSUNBU1RgLiBJIHNob3VsZCBhbHNvIHF1aWNrbHkgdmVyaWZ5IGlmIGBJUFY2X01ST1VURWAgb3IgYW55IHJlbGF0ZWQgb3B0aW9uIGlzIG5lZWRlZCwgYnV0IG15IGV4cGVjdGF0aW9uIGlzIHRoYXQgaXQgaXNuJ3QuIFllYWgsIGBtY2FzdC5jYCBhbmQgYGFkZHJjb25mLmNgIGFyZSBjb25zaXN0ZW50bHkgY29tcGlsZWQgd2l0aCBgSVBWNmAsIHNvIHRoYXQncyBoYW5kbGVkLlxuXG5JIHdhbnQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnl0aGluZywgc28gSSdsbCByZXZpZXcgdGhlIGRpZmYuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpbnZvbHZlcyBhZGRpbmcgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUuIE5vdyB0aGF0IEkgdW5kZXJzdGFuZCB0aGUgcGF0Y2gsIGl0IHNlZW1zIHRoZSBjaGFuZ2VzIGFyZSBtaW5pbWFsLCBzaW1wbHkgYWRkaW5nIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGluIHRoZSByZXNwb25zZS5cblxuR2l2ZW4gdGhhdCB0aGlzIGlzIGEgKm5ldyogbmV0bGluayBhdHRyaWJ1dGUsIGV2ZW4gYSBzbWFsbCBjaGFuZ2UgbGlrZSB0aGlzIGNvdWxkIGJlIHNpZ25pZmljYW50IGZvciBmdXp6aW5nOyBuZXRsaW5rIG1lc3NhZ2VzIGFyZSBhIGdvb2Qgc291cmNlIG9mIGJ1Z3MuIFRoZSBrZXJuZWwgaXMgbm93IHNlbmRpbmcgYElGQV9NQ19VU0VSU2AgdG8gdXNlciBzcGFjZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGJlaW5nIGhhbmRsZWQgY29ycmVjdGx5IGluIHVzZXIgc3BhY2UgKGFuZCBrZXJuZWwgc3BhY2UpLCBzbyBJIHdpbGwgY2hlY2sgdGhlIGtlcm5lbCBjb2RlIHRvIHNlZSBpZiB0aGlzIG5ldyBhdHRyaWJ1dGUgaXMgcGFyc2VkIHRoZXJlLiBJIGRvbid0IHNlZSBwYXJzaW5nLCBzbyBpdCBzZWVtcyB0aGUgbmV3IG5ldGxpbmsgYXR0cmlidXRlIGlzIG9ubHkgYWRkZWQgdG8gcmVzcG9uc2VzLiBJIHN0aWxsIHdhbnQgdG8gZnV6eiB0aGlzLCBzaW5jZSBpdCdzIGEgbmV3IGF0dHJpYnV0ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUwNzcsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMzBUMTY6NDM6MTAuMzA2NTMzNzdaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc0MDA2NDkxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJJRkFfTUNfVVNFUlNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC9pZ21wLmM9MTQ1MD1pbnQgaW5ldF9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuLS1cXG5uZXQvaXB2NC9pZ21wLmMtMTQ3NS1cXHRpZiAobmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZBX01VTFRJQ0FTVCwgaW0tXFx1MDAzZW11bHRpYWRkcikgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjQvaWdtcC5jOjE0NzY6XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaW0tXFx1MDAzZXVzZXJzKSkgXFx1MDAzYyAwIHx8XFxubmV0L2lwdjQvaWdtcC5jLTE0NzctXFx0ICAgIG5sYV9wdXQoc2tiLCBJRkFfQ0FDSEVJTkZPLCBzaXplb2YoY2kpLCBcXHUwMDI2Y2kpIFxcdTAwM2MgMCkge1xcbi0tXFxubmV0L2lwdjYvYWRkcmNvbmYuYz01MjQyPWludCBpbmV0Nl9maWxsX2lmbWNhZGRyKHN0cnVjdCBza19idWZmICpza2IsXFxuLS1cXG5uZXQvaXB2Ni9hZGRyY29uZi5jLTUyNjYtXFx0aWYgKG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkFfTVVMVElDQVNULCBcXHUwMDI2aWZtY2EtXFx1MDAzZW1jYV9hZGRyKSBcXHUwMDNjIDAgfHxcXG5uZXQvaXB2Ni9hZGRyY29uZi5jOjUyNjc6XFx0ICAgIG5sYV9wdXRfdTMyKHNrYiwgSUZBX01DX1VTRVJTLCBSRUFEX09OQ0UoaWZtY2EtXFx1MDAzZW1jYV91c2VycykpIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY2L2FkZHJjb25mLmMtNTI2OC1cXHQgICAgcHV0X2NhY2hlaW5mbyhza2IsIGlmbWNhLVxcdTAwM2VtY2FfY3N0YW1wLCBSRUFEX09OQ0UoaWZtY2EtXFx1MDAzZW1jYV90c3RhbXApLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MzoxMS4wNDY2MTQ5NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njk5OTU4ODc2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIEp1c3RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUga2VybmVsICpvbmx5KiBzZW5kcyB0aGUgZGF0YSwgYnV0IHRoYXQncyBlbm91Z2ggdG8gd2FycmFudCBhIGNsb3NlciBsb29rLiBJcyB0aGlzIHBhdGNoIGZ1enotd29ydGh5PyBBYnNvbHV0ZWx5LiBJdCdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHRvdWNoaW5nIGNvcmUga2VybmVsIGxvZ2ljIHJlbGF0ZWQgdG8gbmV0bGluayBkdW1wcywgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyB0aGUgaGFuZGxpbmcgb2YgbXVsdGljYXN0IGFkZHJlc3Nlcy4gRXZlbiBpZiBpdCdzIFwianVzdFwiIHNlbmRpbmcgZGF0YSwgaXQncyBhIG5ldyBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCBhbmQgdGhhdCAqYWx3YXlzKiBpbXBhY3RzIHRoZSBzaXplIG9mIHRoZSBuZXRsaW5rIG1lc3NhZ2UuIFRoaXMgcGF0Y2ggYWxzbyB0b3VjaGVzIGNydWNpYWwgYWxsb2NhdGlvbiBzaXplcyB3aXRoaW4gYGluZXRfaWZtY2FkZHJfbm90aWZ5YCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIElmIHRob3NlIGFsbG9jYXRpb25zIGFyZSBvZmYsIGl0IGNvdWxkIGxlYWQgdG8gYSBuYXN0eSBidWZmZXIgb3ZlcmZsb3cgb3IsIGF0IHRoZSB2ZXJ5IGxlYXN0LCBhIGNvbmNlcm5pbmcgd2FybmluZywgYW5kIHRoYXQgaGFzIHRvIGJlIGludmVzdGlnYXRlZC5cblxuVGhlcmVmb3JlLCBJJ20gc2V0dGluZyBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVG8gZW5zdXJlIHRob3JvdWdoIGNvdmVyYWdlLCBJIHdpbGwgZm9jdXMgb24gdGhlIGZvbGxvd2luZyBzeW1ib2xzOiBgaW5ldF9maWxsX2lmbWNhZGRyYCwgYGluZXRfaWZtY2FkZHJfbm90aWZ5YCwgYGluZXQ2X2ZpbGxfaWZtY2FkZHJgLCBhbmQgYGluZXQ2X2lmbWNhZGRyX25vdGlmeWAuIFRoZSB1bmRlcmx5aW5nIHJlYXNvbmluZyBpcyBjbGVhcjogdGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUsIGBJRkFfTUNfVVNFUlNgLCB0byBib3RoIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMsIGFuZCBjcnVjaWFsbHksIGl0IG1vZGlmaWVzIG1lc3NhZ2UgY29uc3RydWN0aW9uIGFuZCBhbGxvY2F0aW9uIHNpemVzIGRlZXAgd2l0aGluIGNvcmUgbmV0d29ya2luZyBjb2RlLiBGb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLCB0aGUgYElQVjZgIGFuZCBgSVBfTVVMVElDQVNUYCBjb25maWd1cmF0aW9ucyB3aWxsIGJlIGVuYWJsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NTEzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0zMFQxNjo0MzoxOC4wNDYyMDc5NDhaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNjU2MzczNzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIklQVjZcIixcbiAgICBcIklQX01VTFRJQ0FTVFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImluZXRfZmlsbF9pZm1jYWRkclwiLFxuICAgIFwiaW5ldF9pZm1jYWRkcl9ub3RpZnlcIixcbiAgICBcImluZXQ2X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXQ2X2lmbWNhZGRyX25vdGlmeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBuZXcgbmV0bGluayBhdHRyaWJ1dGUgSUZBX01DX1VTRVJTIHRvIElQdjQgYW5kIElQdjYgbXVsdGljYXN0IGFkZHJlc3MgZHVtcHMgYW5kIG5vdGlmaWNhdGlvbnMuIEl0IG1vZGlmaWVzIHRoZSBtZXNzYWdlIGNvbnN0cnVjdGlvbiBhbmQgYWxsb2NhdGlvbiBzaXplcyBpbiBjb3JlIG5ldHdvcmtpbmcgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJUFY2XCIsXG4gICAgXCJJUF9NVUxUSUNBU1RcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpbmV0X2ZpbGxfaWZtY2FkZHJcIixcbiAgICBcImluZXRfaWZtY2FkZHJfbm90aWZ5XCIsXG4gICAgXCJpbmV0Nl9maWxsX2lmbWNhZGRyXCIsXG4gICAgXCJpbmV0Nl9pZm1jYWRkcl9ub3RpZnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgbmV3IG5ldGxpbmsgYXR0cmlidXRlIElGQV9NQ19VU0VSUyB0byBJUHY0IGFuZCBJUHY2IG11bHRpY2FzdCBhZGRyZXNzIGR1bXBzIGFuZCBub3RpZmljYXRpb25zLiBJdCBtb2RpZmllcyB0aGUgbWVzc2FnZSBjb25zdHJ1Y3Rpb24gYW5kIGFsbG9jYXRpb24gc2l6ZXMgaW4gY29yZSBuZXR3b3JraW5nIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[1] Phase: Succeeded StartedAt: 2026-06-30 16:43:30 +0000 UTC FinishedAt: 2026-06-30 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-30 16:43:30 +0000 UTC FinishedAt: 2026-06-30 16:43:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2] Phase: Succeeded StartedAt: 2026-06-30 16:43:30 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-30 16:43:31 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-30 16:43:31 +0000 UTC FinishedAt: 2026-06-30 16:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-30 16:43:31 +0000 UTC FinishedAt: 2026-06-30 16:44:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow2k4ql/series-workflow2k4ql-convert-artifact-3700339579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-30 16:44:11 +0000 UTC FinishedAt: 2026-06-30 17:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-30 16:44:12 +0000 UTC FinishedAt: 2026-06-30 17:13:08 +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:*110846da-68de-4b0d-9f1f-6a524b25ea26,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-workflow2k4ql/series-workflow2k4ql-convert-artifact-3700339579/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": "d6f8a15f-2685-4dd7-973a-392b10402e2c", "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-workflow2k4ql/series-workflow2k4ql-build-action-4036059833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-30 16:44:12 +0000 UTC FinishedAt: 2026-06-30 17:11:43 +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:*110846da-68de-4b0d-9f1f-6a524b25ea26,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-workflow2k4ql/series-workflow2k4ql-convert-artifact-3700339579/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": "d6f8a15f-2685-4dd7-973a-392b10402e2c", "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-workflow2k4ql/series-workflow2k4ql-build-action-4036059833/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-30 17:13:08 +0000 UTC FinishedAt: 2026-06-30 17:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-30 17:13:08 +0000 UTC FinishedAt: 2026-06-30 17:13:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-30 17:13:08 +0000 UTC FinishedAt: 2026-06-30 17:14:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-30 17:13:08 +0000 UTC FinishedAt: 2026-06-30 17:14:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow2k4ql/series-workflow2k4ql-convert-artifact-4025366738/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-30 17:14:35 +0000 UTC FinishedAt: 2026-06-30 17:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-30 17:14:35 +0000 UTC FinishedAt: 2026-06-30 17:16:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6f8a15f-2685-4dd7-973a-392b10402e2c,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-workflow2k4ql/series-workflow2k4ql-build-action-4036059833/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-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-30 17:16:54 +0000 UTC FinishedAt: 2026-06-30 17:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-30 17:16:54 +0000 UTC FinishedAt: 2026-06-30 17:16:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-30 17:16:54 +0000 UTC FinishedAt: 2026-06-30 17:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-30 17:16:54 +0000 UTC FinishedAt: 2026-06-30 17:48:09 +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:*110846da-68de-4b0d-9f1f-6a524b25ea26,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-workflow2k4ql/series-workflow2k4ql-convert-artifact-4025366738/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": "2f8d3427-9024-40dd-8b76-b9515af7413a", "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-workflow2k4ql/series-workflow2k4ql-build-action-877442918/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-30 17:16:54 +0000 UTC FinishedAt: 2026-06-30 17:46:37 +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:*110846da-68de-4b0d-9f1f-6a524b25ea26,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-workflow2k4ql/series-workflow2k4ql-convert-artifact-4025366738/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": "2f8d3427-9024-40dd-8b76-b9515af7413a", "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-workflow2k4ql/series-workflow2k4ql-build-action-877442918/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-30 17:48:09 +0000 UTC FinishedAt: 2026-06-30 17:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-30 17:48:09 +0000 UTC FinishedAt: 2026-06-30 17:48:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-30 17:48:09 +0000 UTC FinishedAt: 2026-06-30 17:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-30 17:48:09 +0000 UTC FinishedAt: 2026-06-30 17:50:14 +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:*2f8d3427-9024-40dd-8b76-b9515af7413a,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-workflow2k4ql/series-workflow2k4ql-build-action-877442918/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-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"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:*d6f8a15f-2685-4dd7-973a-392b10402e2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f8d3427-9024-40dd-8b76-b9515af7413a,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-workflow2k4ql/series-workflow2k4ql-build-action-4036059833/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-workflow2k4ql/series-workflow2k4ql-build-action-877442918/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 17:50:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 17:50:30 +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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"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-workflow2k4ql/series-workflow2k4ql-convert-artifact-3783494695/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 17:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 17:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-30 17:50:23 +0000 UTC FinishedAt: 2026-06-30 17:50:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-30 17:50:33 +0000 UTC FinishedAt: 2026-06-30 20:53:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflow2k4ql[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["inet_fill_ifmcaddr","inet_ifmcaddr_notify","inet6_fill_ifmcaddr","inet6_ifmcaddr_notify"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"f456c1922c49e6be5ce407ddb74a6e61af5b65cf","config_name":"upstream-apparmor-kasan.config","enable_configs":["IPV6","IP_MULTICAST"],"series_id":"97614b76-5426-4ce3-b3b3-e2d7a2135990","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-30 17:50:33 +0000 UTC FinishedAt: 2026-06-30 20:53:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d6f8a15f-2685-4dd7-973a-392b10402e2c,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*2f8d3427-9024-40dd-8b76-b9515af7413a,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-workflow2k4ql/series-workflow2k4ql-build-action-4036059833/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-workflow2k4ql/series-workflow2k4ql-build-action-877442918/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-workflow2k4ql/series-workflow2k4ql-convert-artifact-3783494695/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,}