Name: series-workflowkqcln Phase: Succeeded StartedAt: 2026-06-26 20:40:11 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[0] Phase: Succeeded StartedAt: 2026-06-26 20:40:11 +0000 UTC FinishedAt: 2026-06-26 20:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[0].run-triage Phase: Succeeded StartedAt: 2026-06-26 20:40:11 +0000 UTC FinishedAt: 2026-06-26 20:57:04 +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": "bb365a506b1e6fb050c0fceaad354fe395385ef0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "SFP" ], "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": "bb365a506b1e6fb050c0fceaad354fe395385ef0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "SFP" ], "series_id": "5f396780-54d4-40f0-97d4-83448839b2ae" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_sfp_probe" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfc2ZwX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgaW4gYHBoeV9zZnBfcHJvYmVgIHRvIGNsZWFuIHVwIHRoZSBTRlAgYnVzIHJlZmVyZW5jZSBpZiBgcGh5X3NldHVwX3NmcF9wb3J0YCBmYWlscy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIGluIHRoZSBQSFkgZnJhbWV3b3JrIGFuZCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUEhZIGRldmljZSBwcm9iaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTVlY2FiZjJjOTFhZDdjODNjMTA0MTQ3NzY5ZDczYzI4Y2Y3ZTk2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIwOjUyOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAzMzcwZWI4MjIwMTdiMi4uY2Q2MmM0NmRlMDE3YmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTcyMyw2ICYjNDM7MTcyMywxMSBAQCBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cylcbiBcdFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4gXG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbiYjNDM7XHRcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1ZWNhYmYyYzkxYWQ3YzgzYzEwNDE0Nzc2OWQ3M2MyOGNmN2U5NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAyMDo1MjoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDMzNzBlYjgyMjAxN2IyLi5jZDYyYzQ2ZGUwMTdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xNzIzLDYgJiM0MzsxNzIzLDExIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmICghcmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKQogCQlyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKIAomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKSB7CiYjNDM7CQlzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwkJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWSBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AuIFNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIHVwZGF0ZXMgdG8gdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBzb21lIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuCgpUaGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIHRoZSBgc2ZwX2J1c2AgcHJvcGVybHkuIFRoZSBrZXkgaXMgdGhpczogaWYgYHBoeV9zZnBfcHJvYmVgIHJldHVybnMgYW4gZXJyb3IgKGByZXRgIGlzIG5vbi16ZXJvKSwgYW5kIGlmIHRoZSBgcGh5ZGV2LSZndDtzZnBfYnVzYCBwb2ludGVyICphY3R1YWxseSogcG9pbnRzIHRvIGEgYnVzLCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSBjbGVhbnVwLiBUaGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgYHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi0mZ3Q7c2ZwX2J1cylgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlbiB0aGUgYHBoeWRldi0mZ3Q7c2ZwX2J1c2AgcG9pbnRlciB3aWxsIGJlIHNldCB0byBgTlVMTGAuIFRoaXMgaXMgc3RhbmRhcmQsIGFuZCBjcml0aWNhbCwgZW5zdXJpbmcgd2UgcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gZXJyb3Igc2NlbmFyaW9zLiBJdCYjMzk7cyBhIHNlbnNpYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGxlZnQgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGV2ZW4gaWYgdGhlIFNGUCBwcm9iZSBmYWlscy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIHRob3NlIGVkZ2UgY2FzZXMsIGVzcGVjaWFsbHkgaW4gdGhpcyBhcmVhLCB3aGVyZSBoYXJkd2FyZSBjYW4gYmUuLi51bnByZWRpY3RhYmxlISBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTtsbCBkZWZpbml0ZWx5IGRpdmUgZGVlcGVyIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTt2ZSBjb3ZlcmVkICphbGwqIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3NmcF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNTA3PXN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTE3Olx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOgoKKipEaXNzZWN0aW5nIGBwaHlfc2ZwX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyByb3V0aW5lLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcHJvYmluZyBhIFNtYWxsIEZvcm0tZmFjdG9yIFBsdWdnYWJsZSAoU0ZQKSB0cmFuc2NlaXZlciwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGlkZW50aWZpZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBsYXllciAoUEhZKSB3aXRoaW4gdGhlIFNGUCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uLCBhbnkgaW5pdGlhbGl6YXRpb24gaXQgcGVyZm9ybXMsIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb25uZWN0ZWQgbW9kdWxlLiBLbm93aW5nIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uIHdvdWxkIGdpdmUgbWUgYSBmYXIgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA3Olx0c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNzA4Olx0e1xuMTcwOTpcdFx0c3RydWN0IHNmcF9idXMgKmJ1cztcbjE3MTA6XHRcdGludCByZXQgPSAwO1xuMTcxMTpcdFxuMTcxMjpcdFx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbjE3MTM6XHRcdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbjE3MTQ6XHRcdFx0aWYgKElTX0VSUihidXMpKVxuMTcxNTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4xNzE2Olx0XG4xNzE3Olx0XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuMTcxODpcdFxuMTcxOTpcdFx0XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuMTcyMDpcdFx0XHRzZnBfYnVzX3B1dChidXMpO1xuMTcyMTpcdFx0fVxuMTcyMjpcdFxuMTcyMzpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuMTcyNDpcdFx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbjE3MjU6XHRcbjE3MjY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKSB7XG4xNzI3Olx0XHRcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbjE3Mjg6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyOTpcdFx0fVxuMTczMDpcdFxuMTczMTpcdFx0cmV0dXJuIHJldDtcbjE3MzI6XHR9XG4xNzMzOlx0XG4xNzM0Olx0c3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbjE3MzU6XHR7XG4xNzM2Olx0XHRyZXR1cm4gcGh5ZHJ2LVx1MDAzZWNvbmZpZ19pbnRyIFx1MDAyNlx1MDAyNiBwaHlkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGlua2luZyBvdXQgbG91ZCBhcyBhbiBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIFNGUCBQcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiB0b2xkIHRoYXQgdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbiBpcyBpbml0aWF0ZWQgYnkgYHBoeV9zZXR1cF9wb3J0c2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4gaW4gUEhZIGRyaXZlciBkZXNpZ24uIGBwaHlfc2V0dXBfcG9ydHNgIGlzIGxpa2VseSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlcywgYW5kLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgY2FsbGluZyBvdXQgdG8gcHJvYmUgZm9yIHNwZWNpZmljIFNGUCBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBoeV9zZXR1cF9wb3J0c2AgdG8gc2VlIGhvdyBpdCBkZWNpZGVzIHdoZW4gYW5kIHdoeSB0byBjYWxsIGBwaHlfc2ZwX3Byb2JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgd2hpY2ggYXJlIHRyaWdnZXJpbmcgdGhlIHByb2JlLiBJcyBpdCBoYXJkd2FyZS1iYXNlZCBkZXRlY3Rpb24/IElzIGl0IGNvbmZpZ3VyYXRpb24tZHJpdmVuPyBXaGF0JiMzOTtzIHRoZSB0cmlnZ2VyaW5nIGxvZ2ljPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgd2hlbiB0aGUgcHJvYmUgaXMgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzUwNzpcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4zNTA4Olx0e1xuMzUwOTpcdFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0socG9ydHNfc3VwcG9ydGVkKTtcbjM1MTA6XHRcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbjM1MTE6XHRcdGludCByZXQ7XG4zNTEyOlx0XG4zNTEzOlx0XHRyZXQgPSBvZl9waHlfcG9ydHMocGh5ZGV2KTtcbjM1MTQ6XHRcdGlmIChyZXQpXG4zNTE1Olx0XHRcdHJldHVybiByZXQ7XG4zNTE2Olx0XG4zNTE3Olx0XHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XG4zNTE4Olx0XHRpZiAocmV0KVxuMzUxOTpcdFx0XHRnb3RvIG91dDtcbjM1MjA6XHRcbjM1MjE6XHRcdGlmIChwaHlkZXYtXHUwMDNlbl9wb3J0cyBcdTAwM2MgcGh5ZGV2LVx1MDAzZW1heF9uX3BvcnRzKSB7XG4zNTIyOlx0XHRcdHJldCA9IHBoeV9kZWZhdWx0X3NldHVwX3NpbmdsZV9wb3J0KHBoeWRldik7XG4zNTIzOlx0XHRcdGlmIChyZXQpXG4zNTI0Olx0XHRcdFx0Z290byBvdXQ7XG4zNTI1Olx0XHR9XG4zNTI2Olx0XG4zNTI3Olx0XHRsaW5rbW9kZV96ZXJvKHBvcnRzX3N1cHBvcnRlZCk7XG4zNTI4Olx0XG4zNTI5Olx0XHQvKiBBZ2dyZWdhdGUgdGhlIHN1cHBvcnRlZCBtb2Rlcywgd2hpY2ggYXJlIG1hZGUtdXAgb2YgOlxuMzUzMDpcdFx0ICogIC0gV2hhdCB0aGUgUEhZIGl0c2VsZiBzdXBwb3J0c1xuMzUzMTpcdFx0ICogIC0gV2hhdCB0aGUgc3VtIG9mIGFsbCBwb3J0cyBzdXBwb3J0XG4zNTMyOlx0XHQgKi9cbjM1MzM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5ZGV2LVx1MDAzZXBvcnRzLCBoZWFkKVxuMzUzNDpcdFx0XHRpZiAocG9ydC1cdTAwM2VhY3RpdmUpXG4zNTM1Olx0XHRcdFx0bGlua21vZGVfb3IocG9ydHNfc3VwcG9ydGVkLCBwb3J0c19zdXBwb3J0ZWQsXG4zNTM2Olx0XHRcdFx0XHQgICAgcG9ydC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgTGluZSBvZiBSZWFzb25pbmc6IFBIWSBQcm9iZSB0byBQb3J0IFNldHVwKioKCkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgc3VjaCB0aGF0IGBwaHlfc2V0dXBfcG9ydHNgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBwaHlfcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBJIHNlZSB0aGlzIGFzIGEgY2xlYW4sIG1vZHVsYXIgZGVzaWduLiBUaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IHRoZSBoYXJkd2FyZSBwcm9iaW5nIHByb2Nlc3MsIG9yY2hlc3RyYXRlZCBieSBgcGh5X3Byb2JlYCwgZGlyZWN0bHkgcmVsaWVzIG9uIHRoZSBzdWJzZXF1ZW50IHNldHVwIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBwaHlzaWNhbCBwb3J0cyBvZiB0aGF0IFBIWSwgaGFuZGxlZCBieSBgcGh5X3NldHVwX3BvcnRzYC4gVGhpcyBzdWdnZXN0cyBhIHN0YW5kYXJkIHR3by1zdGVwIGluaXRpYWxpemF0aW9uIHBhcmFkaWdtOiBGaXJzdCwgd2UgKmRpc2NvdmVyKiB0aGUgUEhZLCBhbmQgdGhlbiwgKmNvbmZpZ3VyZSogdGhlIHBvcnRzIGJhc2VkIG9uIHdoYXQgdGhlIHByb2JlIGlkZW50aWZpZXMuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9yIHByb3BhZ2F0aW9uIGhlcmUuIEEgZmFpbHVyZSBpbiBgcGh5X3Byb2JlYCB3b3VsZCAoYW5kIHNob3VsZCEpIGlkZWFsbHkgcHJldmVudCB0aGUgY2FsbCB0byBgcGh5X3NldHVwX3BvcnRzYCBhbHRvZ2V0aGVyLiBDb252ZXJzZWx5LCBhIGZhaWx1cmUgaW4gcG9ydCBzZXR1cCBpcyBsaWtlbHkgZGVwZW5kZW50IG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZS4gVGhlcmVmb3JlLCBteSBkZWJ1ZyB3b3JrZmxvdyB3aWxsIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyB0aGUgb3V0Y29tZXMgb2YgYHBoeV9wcm9iZWAsIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1heSBiZSBpbmZsdWVuY2luZyBgcGh5X3NldHVwX3BvcnRzYC4gQW55IGRlYnVnZ2luZyB3aWxsLCBvZiBjb3Vyc2UsIGZpcnN0IGZvY3VzIG9uIGVycm9yIGNoZWNraW5nIGluIHRoZSBwcm9iZS4gQXJlIHdlIHByb2JpbmcgdGhlIHJpZ2h0IGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGBwaHlfcHJvYmVgPyBXaGF0IGluZm9ybWF0aW9uIGlzIGBwaHlfcHJvYmVgIHN1cHBvc2VkIHRvIGhhdmUgc2V0IHVwIHByaW9yIHRvIHRoZSBjYWxsIHRvIGBwaHlfc2V0dXBfcG9ydHNgPyBUaG9zZSBhcmUgdGhlIGtleSBxdWVzdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBlZmZlY3RpdmUgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfc2V0dXBfcG9ydHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzQ2Mj1zdGF0aWMgaW50IG9mX3BoeV9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUwNi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUwNzpzdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTA4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzcxMzpcdGVyciA9IHBoeV9zZXR1cF9wb3J0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzE0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBQSFkgUHJvYmUgRXJyb3IgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBoeV9wcm9iZWAsIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgUEhZIGRldmljZXMuIEkga25vdyB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGEgUEhZIGlzIGJlaW5nIHByb2JlZC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBmbGF3IGluIGBwaHlfc2ZwX3Byb2JlYC4gSXQgc2VlbXMgbGlrZSwgaW4gdGhlIGVycm9yIHBhdGggb2YgYHBoeV9zZXR1cF9zZnBfcG9ydGAsIGBwaHlkZXYtJmd0O3NmcF9idXNgIGlzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBjbGVhbmVkIHVwIGlmIHRoYXQgZnVuY3Rpb24gZmFpbHMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlc291cmNlIGxlYWsgaXNzdWUsIGVhc2lseSBmaXhlZC4gVGhlIGdvb2QgbmV3cyBpcywgdGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBtZWFuaW5nIGl0JiMzOTtzIGEgcmVhbCBidWcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb25zIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGVpdGhlciBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBgQ09ORklHX1BIWUxJQmAgb3IgYENPTkZJR19QSFlfREVWSUNFYC4gVGhhdCB3aWxsIGNsYXJpZnkgd2hhdCYjMzk7cyBhY3R1YWxseSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgYW5kIHRlc3QgdGhlIGZpeCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIEZvdW5kYXRpb25zIG9mIGBsaWJwaHlgKioKClNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgKnJlYWxseSogZW5hYmxlcyBgbGlicGh5YD8gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVucGFjayB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgYWxsb3cgdGhpcyBsaWJyYXJ5IHRvIGZ1bmN0aW9uIGVmZmVjdGl2ZWx5IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFBIWSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLiBJIGtub3cgaXQmIzM5O3Mgbm90IG1hZ2ljOyB0aGVyZSBoYXMgdG8gYmUgYSByb2J1c3QgYXJjaGl0ZWN0dXJlIGF0IHBsYXkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdyYXZpdGF0ZSB0b3dhcmRzIHRoZSBhYnN0cmFjdGlvbiBsZXZlbHMuIFdoYXQgbGF5ZXJzIGRvZXMgYGxpYnBoeWAgaW50cm9kdWNlIHRvIHNpbXBsaWZ5IHRoZSBjb21wbGV4aXR5IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJcyBpdCBwcm92aWRpbmcgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgdmFyaW91cyBQSFkgZnVuY3Rpb25zLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyB2ZW5kb3Igb3IgdGVjaG5vbG9neT8gSWYgc28sIHdoYXQgYXJlIHRoZSBrZXkgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgdGhpcyBpbnRlcmZhY2U/IFdoYXQga2luZCBvZiBmbGV4aWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGRvZXMgaXQgb2ZmZXI/IERvZXMgaXQgZW5hYmxlIHBvcnRhYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHNpbGljb24gaW1wbGVtZW50YXRpb25zPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlYWwtd29ybGQgYXBwbGljYXRpb24sIGFmdGVyIGFsbC4KClRoZW4gSSBnZXQgdG8gdGhpbmtpbmcgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzcGVjaWZpYyBQSFkgY29yZXMgYW5kIHRyYW5zY2VpdmVycz8gSXMgdGhlcmUgYSBjbGVhcmx5IGRlZmluZWQgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgdGhhdCBzaGllbGRzIHRoZSBoaWdoZXItbGV2ZWwgY29kZSBmcm9tIHRoZSBudWFuY2VzIG9mIHJlZ2lzdGVyIG1hcHMgYW5kIHNpZ25hbCB0aW1pbmdzPyBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFkanVzdCB0byBkaWZmZXJlbnQgUEhZIGltcGxlbWVudGF0aW9ucz8gQSB3ZWxsLWRlZmluZWQgSEFMIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBhZGFwdGFiaWxpdHkuCgpUaGlua2luZyBkZWVwZXIsIGhvdyBkb2VzIGl0IG1hbmFnZSBjbG9ja2luZyBhbmQgcG93ZXIgZG9tYWlucz8gRG9lcyBpdCBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIGNsb2NrIG1hbmFnZW1lbnQsIHBvd2VyLXVwIHNlcXVlbmNpbmcsIGFuZCBwb3dlci1kb3duIGNvbnRyb2w/IFRoaXMgaXMgZXNzZW50aWFsIGZvciBwb3dlciBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IGluIG1vZGVybiBpbnRlZ3JhdGVkIHN5c3RlbXMuIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGNsb2NrIG1hbmFnZW1lbnQuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgd2hlbiBpdCBjb21lcyB0byBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlc2UgaGFuZGxlZCB3aXRoaW4gdGhlIGxpYnJhcnkgb3IgZXh0ZXJuYWwgdG8gaXQ/CgpBbmQgZmluYWxseSwgd2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyBhbmQgZGVidWdnaW5nPyBEb2VzIGBsaWJwaHlgIG9mZmVyIHJvYnVzdCBlcnJvciBjaGVja2luZyBhbmQgcmVwb3J0aW5nIG1lY2hhbmlzbXM/IEFyZSB0aGVyZSBjb21wcmVoZW5zaXZlIGRlYnVnZ2luZyB0b29scywgc3VjaCBhcyB0cmFjaW5nIGNhcGFiaWxpdGllcyBvciBidWlsdC1pbiB0ZXN0IG1vZGVzLCB0aGF0IGFsbG93IGRldmVsb3BlcnMgdG8gaWRlbnRpZnkgYW5kIHJlc29sdmUgaXNzdWVzIHF1aWNrbHk/IERlYnVnZ2luZyBpcyBhIG1ham9yIGJvdHRsZW5lY2sgaW4gYW55IGVtYmVkZGVkIHN5c3RlbS4gV2hhdCBzdXBwb3J0IGRvZXMgYGxpYnBoeWAgb2ZmZXIgaW4gdGhpcyBkb21haW4/IFRoaXMgaXMgdml0YWwgZm9yIGFueSBwcm9kdWN0aW9uLXJlYWR5IGxpYnJhcnkuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gdHJhZGVvZmZzIGluIHRoaXMgYXJlYS4KClVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2hhdCBlbmFibGVzJiMzNDsgdGhpcyBsaWJyYXJ5IGlzIGFib3V0IGRpc3NlY3RpbmcgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGFic3RyYWN0aW9uIGxheWVycywgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIHRoYXQgbWFrZSBpdCBhIHVzZWZ1bCB0b29sIGluIHRoZSB3b3JsZCBvZiBQSFkgZGV2ZWxvcG1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZGVzaWduIHByaW5jaXBsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnBoeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xMj1lbmRpZlxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE0OmxpYnBoeS0kKENPTkZJR19TV1BIWSlcdFx0JiM0Mzs9IHN3cGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNTpsaWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVx0JiM0Mzs9IHBoeV9sZWRfdHJpZ2dlcnMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE2OmxpYnBoeS0kKENPTkZJR19PUEVOX0FMTElBTkNFX0hFTFBFUlMpICYjNDM7PSBvcGVuX2FsbGlhbmNlX2hlbHBlcnMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfUEhZTElOSylcdFx0JiM0Mzs9IHBoeWxpbmsub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBsaWJwaHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBtZGlvX2RldnJlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWUxJQiBDb25maWd1cmF0aW9uIGFuZCBTRlAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBDT05GSUdfUEhZTElCYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIHNwZWNpZmljYWxseSB3aXRoIFNGUC4gSSBzZWUgYHBoeV9zZnBfcHJvYmVgIHV0aWxpemVzIGBzZnBfYnVzX2ZpbmRfZndub2RlYCwgYHNmcF9idXNfYWRkX3Vwc3RyZWFtYCwgYW5kIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAsIHdoaWNoIGFyZSBhbGwgU0ZQLXJlbGF0ZWQgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIG1lIHN1c3BlY3QgYSBzdHJvbmcgZGVwZW5kZW5jeS4gVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHRoYXQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gU0ZQIGJhc2VkIG9uIHNvbWUgc29ydCBvZiBtYWNyby4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHRlbGwgbWUgd2hldGhlciBvciBub3QgU0ZQIGZ1bmN0aW9uYWxpdHkgaXMgdGlnaHRseSBjb3VwbGVkIHRvIGBDT05GSUdfUEhZTElCYCBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBtb2R1bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIFNGUCBsb2dpYyBpcyBjb21waWxlZCBpbiB3aXRoIHRoZSBQSFlMSUIgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NmcC5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDc3PXN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc5LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDgwOiAqIHBoeV9zZnBfY29ubmVjdF9waHkgLSBDb25uZWN0IHRoZSBTRlAgbW9kdWxlJiMzOTtzIFBIWSB0byB0aGUgdXBzdHJlYW0gUEhZXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0ODEtICogQHVwc3RyZWFtOiBwb2ludGVyIHRvIHRoZSB1cHN0cmVhbSBwaHkgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDg5OnN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ5MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTAwLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTAxOiAqIHBoeV9zZnBfZGlzY29ubmVjdF9waHkgLSBEaXNjb25uZWN0IHRoZSBTRlAgbW9kdWxlJiMzOTtzIFBIWSBmcm9tIHRoZSB1cHN0cmVhbSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwMi0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MDktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MTA6c3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTE5LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTIwOiAqIHBoeV9zZnBfYXR0YWNoIC0gYXR0YWNoIHRoZSBTRlAgYnVzIHRvIHRoZSBQSFkgdXBzdHJlYW0gbmV0d29yayBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyMS0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHBoeSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMjogKiBAYnVzOiBzZnAgYnVzIHJlcHJlc2VudGluZyBjYWdlIGJlaW5nIGF0dGFjaGVkXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MjMtICpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyNDogKiBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgc2ZwX3Vwc3RyZWFtX29wcyAuYXR0YWNoIG1lbWJlci5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyNjpzdGF0aWMgdm9pZCBwaHlfc2ZwX2F0dGFjaCh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHNmcF9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNy17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTMwLVx0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MzE6XHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUzMjpcdHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMy19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTM1LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM2OiAqIHBoeV9zZnBfZGV0YWNoIC0gZGV0YWNoIHRoZSBTRlAgYnVzIGZyb20gdGhlIFBIWSB1cHN0cmVhbSBuZXR3b3JrIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTM3LSAqIEB1cHN0cmVhbTogcG9pbnRlciB0byB0aGUgcGh5IGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM4OiAqIEBidXM6IHNmcCBidXMgcmVwcmVzZW50aW5nIGNhZ2UgYmVpbmcgYXR0YWNoZWRcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzOS0gKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQwOiAqIFRoaXMgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzZnBfdXBzdHJlYW1fb3BzIC5kZXRhY2ggbWVtYmVyLlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTQxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQyOnN0YXRpYyB2b2lkIHBoeV9zZnBfZGV0YWNoKHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTQzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDYtXHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0NzpcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0ODpcdHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkID0gZmFsc2U7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTUwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUxOnN0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfaW5zZXJ0KHZvaWQgKnVwc3RyZWFtLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTIte1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUzOlx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTU0LVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTU1Olx0Y29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwcztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Ni1cdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NjA6XHRsaW5rbW9kZV96ZXJvKHNmcF9zdXBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2MS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2MjpcdHBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NjMtXHRpZiAoIXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTY2Olx0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTY4Olx0bGlua21vZGVfYW5kKHNmcF9zdXBwb3J0LCBwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2OTpcdGlmIChsaW5rbW9kZV9lbXB0eShzZnBfc3VwcG9ydCkpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3MC1cdFx0ZGV2X2VycihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFwmIzM0O2luY29tcGF0aWJsZSBTRlAgbW9kdWxlIGluc2VydGVkLCBubyBjb21tb24gbGlua21vZGVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3My1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU3NDpcdGlmYWNlID0gc2ZwX3NlbGVjdF9pbnRlcmZhY2UocGh5ZGV2LVx1MDAzZXNmcF9idXMsIHNmcF9zdXBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3NS1cdGlmIChpZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1ODktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1OTA6c3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTkxLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU5Mi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MzpcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU5NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MDEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MDI6c3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX3VwKHZvaWQgKnVwc3RyZWFtKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYwNC1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwNTpcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYwNi1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MTE6c3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTIte1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjEzLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjE0Olx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gcGh5X2dldF9zZnBfcG9ydChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjE1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYxOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjE6XHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjI6XHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjM6XHQubW9kdWxlX2luc2VydCA9IHBoeV9zZnBfbW9kdWxlX2luc2VydCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyNDpcdC5tb2R1bGVfcmVtb3ZlID0gcGh5X3NmcF9tb2R1bGVfcmVtb3ZlLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI1Olx0LmxpbmtfdXAgPSBwaHlfc2ZwX2xpbmtfdXAsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjY6XHQubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjc6XHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI4Olx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYyOS19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY2Nj1zdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY3NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTY3NjpzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTAtXHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTE6XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDk6XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzEwLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzEyLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxMzpcdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNC1cdFx0aWYgKElTX0VSUihidXMpKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxNzpcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MTgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjA6XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjEtXHR9XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjItXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjM6XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjQ6XHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzI1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzI2Olx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNzpcdFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzI4Olx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjktXHR9XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzU0PWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgxNDpcdFx0aWYgKHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE1Olx0XHRcdGRldi1cdTAwM2VzZnBfYnVzID0gcGh5ZGV2LVx1MDAzZXNmcF9idXM7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNTA3PXN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTE3Olx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NTYtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1NTc6ICogcGh5X2dldF9zZnBfcG9ydCgpIC0gUmV0dXJucyB0aGUgZmlyc3QgdmFsaWQgU0ZQIHBvcnQgb2YgYSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU1OC0gKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHRvIGdldCB0aGUgU0ZQIHBvcnQgZnJvbVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU2MzpzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTY3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHlkZXYtXHUwMDNlcG9ydHMsIGhlYWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1Njg6XHRcdGlmIChwb3J0LVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2Vpc19zZnApXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NjktXHRcdFx0cmV0dXJuIHBvcnQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTcyLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU3MzpFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc2Ny1cdC8qIFJlZ2lzdGVyIHRoZSBQSFkgTEVEIHRyaWdnZXJzICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3Njg6XHRpZiAoIXBoeWRldi1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzY5LVx0XHRwaHlfbGVkX3RyaWdnZXJzX3JlZ2lzdGVyKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzgyLW91dDpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzc4MzpcdGlmICghcGh5ZGV2LVx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3ODQtXHRcdHBoeV9sZWRfdHJpZ2dlcnNfdW5yZWdpc3RlcihwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzc5Mj1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgwMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwMTpcdGlmICghcGh5ZGV2LVx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDItXHRcdHBoeV9sZWRfdHJpZ2dlcnNfdW5yZWdpc3RlcihwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgwNy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwODpcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwOTpcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTRlAgQnVzIERyaXZlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBidXMgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMuCgpIb3dldmVyLCBiZWZvcmUgSSBnZXQgKnRvbyogZGVlcCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrLCBicm9hZGVyIHZpZXcuIEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCB0ZWxsIG1lIGlmIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggYHNmcC1idXMuY2AsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBUaGUgYE1ha2VmaWxlYCBzaG91bGQgY2xlYXJseSBkZWZpbmUgaG93IHRoZSBgc2ZwYCBtb2R1bGUgaXMgYnVpbHQgYW5kIGlmIGl0IGluY2x1ZGVzIG9yIHVzZXMgYW55IG90aGVyIGZpbGVzIHRvIGJ1aWxkLCBvciBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdG8gZG8uIEl0IGFsc28gbWlnaHQgcmV2ZWFsIGFueSBuYW1pbmcgY29udmVudGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgJiM0Mzs9IG1paV90aW1lc3RhbXBlci5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjc6c2ZwLW9iai0kKENPTkZJR19TRlApXHRcdCYjNDM7PSBzZnAtYnVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyODpvYmoteVx0XHRcdFx0JiM0Mzs9ICQoc2ZwLW9iai15KSAkKHNmcC1vYmotbSlcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFNGUCBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIGBDT05GSUdfU0ZQYCBpcyBhIGtleSBkZWZpbmUgaGVyZSwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBkcml2ZXIgaXMgY29uc3RydWN0ZWQgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc2ZwLWJ1cy5jYCBzb3VyY2UgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBidWlsZD8gTGV0IG1lIHZlcmlmeSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNmcCBzdWJzeXN0ZW0gYXJlIGF2YWlsYWJsZSBvciBub3QsIGV2ZW4gd2l0aCB0aGUgYmFzZSBgQ09ORklHX1NGUGAgZW5hYmxlZC4gRm9yIGV4YW1wbGUsIGlzIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19TRlBgIGRlZmluZWQ/IEkga25vdyBJIGNhbiBxdWlja2x5IGNoZWNrIHRoaXMgYnkgbG9va2luZyB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX2J1c19kZWxfdXBzdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NmcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2ZwLmg9NTk0PWludCBzZnBfYnVzX2FkZF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCB2b2lkICp1cHN0cmVhbSxcbmluY2x1ZGUvbGludXgvc2ZwLmgtNTk1LVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvc2ZwLmg6NTk2OnZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cyk7XG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU5Ny1jb25zdCBjaGFyICpzZnBfZ2V0X25hbWUoc3RydWN0IHNmcF9idXMgKmJ1cyk7XG4tLVxuaW5jbHVkZS9saW51eC9zZnAuaD02NTM9c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG4tLVxuaW5jbHVkZS9saW51eC9zZnAuaC02NTgtXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjY1OTpzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cylcbmluY2x1ZGUvbGludXgvc2ZwLmgtNjYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgUG90ZW50aWFsIFNGUCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBnb3QgYSBodW5jaCDigJMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGEgc3R1Yiwgb3IgcGVyaGFwcyBpdCAqbmVlZHMqIGBDT05GSUdfU0ZQYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIG1lYW5pbmdmdWwuIEl0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbywgd29ydGggZXhwbG9yaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCYjMzk7cyBkaWcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDY1OS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcmVsZXZhbnQgc3RydWN0dXJlIGRlZmluaXRpb25zIHRoYXQgd291bGQgc2hlZCBsaWdodCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGBTRlBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZnAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQwOlx0e1xuIDY0MTpcdH1cbiA2NDI6XHRcbiA2NDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19wdXQoc3RydWN0IHNmcF9idXMgKmJ1cylcbiA2NDQ6XHR7XG4gNjQ1Olx0fVxuIDY0NjpcdFxuIDY0NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNmcF9idXMgKlxuIDY0ODpcdHNmcF9idXNfZmluZF9md25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiA2NDk6XHR7XG4gNjUwOlx0XHRyZXR1cm4gTlVMTDtcbiA2NTE6XHR9XG4gNjUyOlx0XG4gNjUzOlx0c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG4gNjU0Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbiA2NTU6XHR7XG4gNjU2Olx0XHRyZXR1cm4gMDtcbiA2NTc6XHR9XG4gNjU4Olx0XG4gNjU5Olx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfZGVsX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpXG4gNjYwOlx0e1xuIDY2MTpcdH1cbiA2NjI6XHRcbiA2NjM6XHRzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnNmcF9nZXRfbmFtZShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxuIDY2NDpcdHtcbiA2NjU6XHRcdHJldHVybiBOVUxMO1xuIDY2NjpcdH1cbiA2Njc6XHQjZW5kaWZcbiA2Njg6XHRcbiA2Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRlAgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNGUCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJlaGF2aW9yLiBJZiBgQ09ORklHX1NGUGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHNmcF9idXNfZmluZF9md25vZGVgIHJldHVybnMgYE5VTExgLiBSaWdodCwgdGhhdCYjMzk7cyBleHBlY3RlZC4gSnVtcGluZyB0byB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgaGluZ2VzIG9uIHRoZSBgZndub2RlYCBwcm9wZXJ0eSBvZiB0aGUgYHBoeWRldi0mZ3Q7bWRpby5kZXZgLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGluc2lkZSB0aGUgYGlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSlgIGJsb2NrLCBpdCBjYWxscyBgc2ZwX2J1c19maW5kX2Z3bm9kZWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIGJ1cywgaXQgYXNzaWducyBpdCB0byBgcGh5ZGV2LSZndDtzZnBfYnVzYCwgYWRkcyBhbiB1cHN0cmVhbSwgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIGJ1cy4gIE1ha2VzIHNlbnNlLiBDcnVjaWFsbHksIGlmIGBDT05GSUdfU0ZQYCBpcyBkaXNhYmxlZCBhbmQgYHNmcF9idXNfZmluZF9md25vZGVgIHJldHVybnMgYE5VTExgLCB0aGVuIGBwaHlkZXYtJmd0O3NmcF9idXNgIHdpbGwgYmUgYXNzaWduZWQgYE5VTExgLgoKTm93LCBpZiBgQ09ORklHX1NGUGAgaXMgZGlzYWJsZWQsIGFuZCwgdGhlcmVmb3JlLCBgYnVzYCBpcyBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNvbmRpdGlvbiBgIXJldCAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7c2ZwX2J1c2AgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlIGJlY2F1c2UgYHBoeWRldi0mZ3Q7c2ZwX2J1c2AgaXMgYE5VTExgLiBTbyBgcGh5X3NldHVwX3NmcF9wb3J0YCBpc24mIzM5O3QgY2FsbGVkLiBUaGUgZmluYWwgY29uZGl0aW9uYWwsIGByZXQgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O3NmcF9idXNgLCB3aWxsIGFsc28gYmUgZmFsc2UsIG1lYW5pbmcgdGhlIGNsZWFudXAgYmxvY2sgaXMgbmV2ZXIgZXhlY3V0ZWQuICBUaGlzIHNlZW1zIGxvZ2ljYWxseSBzb3VuZCwgYXMgdGhlIGBzZnBfYnVzYCBpbmZyYXN0cnVjdHVyZSBpc24mIzM5O3QgdGhlcmUuCgpTbywgdGhlIG5ldyBjb2RlIGluc2lkZSB0aGUgYmxvY2ssIGluY2x1ZGluZyBgcGh5X3NldHVwX3NmcF9wb3J0YCBzaG91bGQgYmUgdW5yZWFjaGFibGUgdW5sZXNzIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCBvciByYXRoZXIsIG5vdCBkaXNhYmxlZC4gQnV0IHdhaXQsIGBDT05GSUdfU0ZQYCBpcyBhIHRyaXN0YXRlLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIHRoZSByZWxldmFudCBvcHRpb24gaXMgYWN0dWFsbHkgYENPTkZJR19TRlBfQlVTYC4gQmVzdCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYENPTkZJR19TRlBgIGFuZCBQSFkgRnJhbWV3b3JrIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX1NGUGAuIFRoZSBjb2RlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gbWUgaXMgYHBoeV9zZnBfcHJvYmVgLCBhbmQgaXQgbGl2ZXMgd2l0aGluIGBwaHlfZGV2aWNlLmNgLCB3aGljaCB0ZWxscyBtZSBJIG5lZWQgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19TRlBgIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOZXh0LCBJIHNlZSB0aGF0IHRoZSBjb2RlIGV4cGxpY2l0bHkgZXhwZWN0cyBgcGh5ZGV2LSZndDttZGlvLmRldi5md25vZGVgIHRvIGJlIHNldC4gVGhhdCBzY3JlYW1zIERldmljZSBUcmVlIG9yIEFDUEkuIEJhc2ljYWxseSwgdGhlIFBIWSBuZWVkcyBhIG5vZGUgYW5kIGl0IG11c3QgYmUgY29ubmVjdGVkIHRvIGFuIFNGUCBidXMuCgpOb3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IEl0IHNlZW1zIGxpa2UgaXQgKnNob3VsZCogYmUgZnV6emFibGUsIGdpdmVuIHRoYXQgaXQmIzM5O3MgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byB0aGUgUEhZIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZyBzeXprYWxsZXIgY2FuIGxpa2VseSBjcmVhdGUgdmlydHVhbCBkZXZpY2VzLCBvciBwb3RlbnRpYWxseSBsZXZlcmFnZSBkZXZpY2UgdHJlZSBvdmVybGF5cywgdGhvdWdoIEkmIzM5O20gbm90IGVudGlyZWx5IGNlcnRhaW4gYWJvdXQgaXRzIGFiaWxpdHkgdG8gZWFzaWx5IGNvbnN0cnVjdCBhbiBlbnRpcmUgU0ZQIGJ1cy4gU3RpbGwsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyAoUEhZIGZyYW1ld29yaykuCgpUaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBgcGh5X3NmcF9wcm9iZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgUEhZIGRldmljZSBwcm9iZS4gU28gdGhlIG5leHQgc3RlcCBpcyB3aGV0aGVyIEkgY2FuIGdldCB0byBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gLCBgbmV0ZGV2c2ltYCwgYHZldGhgLCBvciBgdHVuYCBkb24mIzM5O3QgdG91Y2ggUEhZcywgc28gdGhvc2UgYXJlIG91dC4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIGxvYWQgYSBkdW1teSBQSFkgZHJpdmVyLCBvciB1c2UgYG1kaW8tbW9ja3VwYCwgb3Igc2ltaWxhciB0byBwcm9iZSBQSFlzLiBUaGF0IG1lYW5zIGEgcGF0aCBleGlzdHMhCgpXYWl0IGEgbWludXRlLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogUEhZcz8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0IGRvZXMgdGhhdCB0aHJvdWdoIG5ldGxpbmsgYW5kIGJ5IHJlZ2lzdGVyaW5nIHZpcnR1YWwgTURJTyBidXNlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IE1ESU8gbW9ja3VwcyBvciBzaW1pbGFyLiBJIHNob3VsZCBjaGVjayBub3cgYW5kIHNlZSB3aGF0IE1ESU8gbW9ja3VwcyBhcmUgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gRHJpdmVycyoqCgpPa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgd2lsbCBsaWtlbHkgaG91c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB2YXJpb3VzIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIE1ESU8tY29tcGxpYW50IGRldmljZXMuIEkgZXhwZWN0IHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZSBNRElPIGJ1cyBvcGVyYXRpb25zLCBkZXZpY2UgcHJvYmluZywgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGlmIGFwcGxpY2FibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpX21kaW8uYyYjMzQ7LAogICAgJiMzNDtmd25vZGVfbWRpby5jJiMzNDssCiAgICAmIzM0O21kaW8tYWlyb2hhLmMmIzM0OywKICAgICYjMzQ7bWRpby1hc3BlZWQuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLXVuaW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYml0YmFuZy5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uaCYjMzQ7LAogICAgJiMzNDttZGlvLWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWhpc2ktZmVtYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWkyYy5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxNDAxOS5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxODA2NC5jJiMzNDssCiAgICAmIzM0O21kaW8tbW94YXJ0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tc2NjLW1paW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY202MzY4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWcxMmEuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1neGwuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tbWlvcmVnLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbXVsdGlwbGV4ZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXZ1c2IuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9jdGVvbi5jJiMzNDssCiAgICAmIzM0O21kaW8tcGljNjRocHNjLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlZ21hcC5jJiMzNDssCiAgICAmIzM0O21kaW8tc3VuNGkuYyYjMzQ7LAogICAgJiMzNDttZGlvLXRodW5kZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLXhnZW5lLmMmIzM0OywKICAgICYjMzQ7b2ZfbWRpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBzeXprYWxsZXIgSW50ZXJhY3Rpb24gd2l0aCBTRlAgUEhZcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIGlzIGludGVyYWN0aW5nIHdpdGggdGhlc2UgU0ZQIFBIWSBkZXZpY2VzLiBUaGUgdGV4dCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYSBtb2NrdXAsIHdoaWNoIGlzIGEga2V5IHBvaW50LiBJdCBzZWVtcyBzeXprYWxsZXIgbWlnaHQgYmUgaW5qZWN0aW5nIGRldmljZXMgZHluYW1pY2FsbHksIGVpdGhlciB0aHJvdWdoIG5ldGxpbmssIHN5c2ZzLCBvciBwZXJoYXBzIGl0JiMzOTtzIGp1c3QgcG9raW5nIGFyb3VuZCBhdCBwcmUtZXhpc3RpbmcgZHVtbXkgZGV2aWNlcywgd2hpY2ggaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS4KCk15IGZvY3VzIGlzIG5vdyB6ZXJvaW5nIGluIG9uIGBwaHlfc2ZwX3Byb2JlYC4gQWhhISBJdOKAmXMgY2FsbGVkIHdoZW4gdGhlIFBIWSBkZXZpY2UgZ2V0cyBwcm9iZWQsIHRoYXTigJlzIHVzZWZ1bCBjb250ZXh0LiBOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoYXQgaGFwcGVucyBpZiBgcGh5X3NldHVwX3NmcF9wb3J0YCBmYWlscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGl0IGZhaWxzLCBpdCBoYXMgc29tZSBzb3J0IG9mIGNsZWFudXAgcHJvY2VzcywgdGhhdCBjb3VsZCBiZSBhIGJ1Zy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBwaHlfc2V0dXBfc2ZwX3BvcnRgICpjYW4qIGZhaWwsIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBpZiB0aGV5JiMzOTtyZSBoYW5kbGVkIHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc2Olx0c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE2Nzc6XHR7XG4xNjc4Olx0XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuMTY3OTpcdFx0aW50IHJldDtcbjE2ODA6XHRcbjE2ODE6XHRcdGlmICghcG9ydClcbjE2ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNjgzOlx0XG4xNjg0Olx0XHRwb3J0LVx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xuMTY4NTpcdFx0cG9ydC1cdTAwM2VwaHkgPSBwaHlkZXY7XG4xNjg2Olx0XG4xNjg3Olx0XHQvKiBUaGUgUEhZIGlzIGEgbWVkaWEgY29udmVydGVyLCB0aGUgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIFNGUCBjYWdlXG4xNjg4Olx0XHQgKiBpcyBhIE1JSSBwb3J0LlxuMTY4OTpcdFx0ICovXG4xNjkwOlx0XHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4xNjkxOlx0XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4xNjkyOlx0XG4xNjkzOlx0XHQvKiBUaGUgcG9ydC1cdTAwM2VzdXBwb3J0ZWQgYW5kIHBvcnQtXHUwMDNlaW50ZXJmYWNlcyBsaXN0IHdpbGwgYmUgcG9wdWxhdGVkXG4xNjk0Olx0XHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxuMTY5NTpcdFx0ICovXG4xNjk2Olx0XHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbjE2OTc6XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4xNjk5Olx0XG4xNzAwOlx0XHRyZXR1cm4gcmV0O1xuMTcwMTpcdH1cbjE3MDI6XHRcbjE3MDM6XHQvKipcbjE3MDQ6XHQgKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG4xNzA1Olx0ICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkvU0ZQIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBibG9jayBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQSFkgKFBoeXNpY2FsIExheWVyKSBmb3IgYSBwb3J0LiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyDigJMgaGVyZSwgaXQgbG9va3MgbGlrZSBgcGh5X3BvcnRfYWxsb2NgIG9yIGBwaHlfYWRkX3BvcnRgIGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhpcyBzZWVtcyBsaWtlIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29kZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBJJiMzOTtsbCBuZWVkIGBQSFlMSUJgIGFuZCBgU0ZQYCwgYnV0IGhvbGQgb24sIGBTRlBgIHRyYW5zbGF0ZXMgdG8gYENPTkZJR19TRlBgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUgYXJvdW5kIGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZm9yIHRoZSBjb3JlIHN5bWJvbHMuIE9rYXksIGl0JiMzOTtzIGBwaHlfc2ZwX3Byb2JlYCwgYHBoeV9zZXR1cF9zZnBfcG9ydGAsIGBwaHlfc2V0dXBfcG9ydHNgLCBhbmQgYHBoeV9wcm9iZWAuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIGFyZSBwcm9iYWJseSBqdXN0IGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9wb3J0c2AuCgpXYWl0LCBpc24mIzM5O3QgYHBoeV9wcm9iZWAgYSBob3QtcGF0aCBmdW5jdGlvbj8gTm9wZSwgaXQmIzM5O3MgYSBkZXZpY2UgcHJvYmUgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3Mgb25seSBjYWxsZWQgb25jZSBwZXIgZGV2aWNlLiBIb3dldmVyLCBgcGh5X3NmcF9wcm9iZWAgaXMgbW9yZSBzcGVjaWZpYyB0byB0aGUgU0ZQIG1vZHVsZSwgc28gaXQgc2hvdWxkIGJlIGluY2x1ZGVkLiBJJiMzOTtsbCBhZGQgYHBoeV9zZnBfcHJvYmVgIHRvIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgdG8ga2VlcCBpdCBmcm9udCBvZiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYENPTkZJR19QSFlMSUJgIGFuZCBgQ09ORklHX1NGUGAuIEkgYmV0IGBDT05GSUdfUEhZTElCYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gbG9vayBmb3IgYW55IG90aGVyIGBTRlBgIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBQSFlMSUIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoYXQgYFBIWUxJQmAgZGVhbHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgb2YgbmV0d29ya2luZywgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHdpbGwgYmUgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29yayBkcml2ZXIgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvcGh5L2AuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyBieSBpbW1lZGlhdGVseSBjaGVja2luZyBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYm9vbGVhbiBmbGFncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IGBQSFlMSUJgIGFuZCBpdHMgYXNzb2NpYXRlZCBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXHRkZWZfYm9vbCBPRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY5OAoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgUEhZTElCYCBhbmQgYFNGUGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSB0d28gYXJlIHRoZSBvbmx5IGRlcGVuZGVuY2llcyBhdCBwbGF5LiBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgZnV6emluZyBhcHByb2FjaC4KCkFoYSwgbG9va3MgbGlrZSBgTURJT19ERVZJQ0VgIGlzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IGBQSFlMSUJgLCBzbyB3ZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgZm9jdXNpbmcgb24gYFBIWUxJQmAgYW5kIGBTRlBgIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGJhc2UgY29tcG9uZW50cy4gTm8gZnVydGhlciBkaWdnaW5nIG5lY2Vzc2FyeSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgY29uc29saWRhdGUgdGhpczoKCioqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGZ1bmN0aW9uIGZvciBTRlAgcHJvYmUsIHdlIGhhdmUgYSBjbGVhciBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuCgoqKkZvY3VzU3ltYm9sczogYHBoeV9zZnBfcHJvYmVgKiogLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldCwgc2luY2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGFyZWEgb2YgZXJyb3IgaGFuZGxpbmcgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRoYXQgcmVxdWlyZXMgY2xvc2UgYXR0ZW50aW9uLgoKKipFbmFibGVDb25maWdzOiBgUEhZTElCYCwgYFNGUGAqKiAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbWluaW11bSByZXF1aXJlZCB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbiYjMzk7cyBsb2dpYy4KCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCYjMzk7cyBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHBoeV9zZnBfcHJvYmVgIHJlbGF0ZWQgdG8gdGhlIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZ1bmN0aW9uLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBvdGhlciBpc3N1ZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiBzZXR1cCBmYWlscywgYW5kIG5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNsZWFudXAgb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIFNGUCBidXMgZG9lc24mIzM5O3QgZ2V0IG1lc3NlZCB1cC4gQXMgYSBjb25zZXF1ZW5jZSwgd2UgbWF5IHVuY292ZXIgbG9naWMgZXJyb3JzIHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yayBpZiB3ZSBjYW4gdHJpZ2dlciB0aGUgZmFpbHVyZXMgYWRkcmVzc2VkIGJ5IHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3NmcF9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MjoxNS40NzkwMzU3NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc4MzIwNzE0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEhZTElCXCIsXG4gICAgXCJTRlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfc2ZwX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjE1LjQ3OTA0MjAxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1OTM0OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVlY2FiZjJjOTFhZDdjODNjMTA0MTQ3NzY5ZDczYzI4Y2Y3ZTk2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAyMDo1MjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDMzNzBlYjgyMjAxN2IyLi5jZDYyYzQ2ZGUwMTdiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xNzIzLDYgKzE3MjMsMTEgQEAgc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cylcXG4gXFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuIFxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbitcXHRcXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MjoxNi40MDU3MTY0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjkwNTM2NTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWVjYWJmMmM5MWFkN2M4M2MxMDQxNDc3NjlkNzNjMjhjZjdlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjA6NTI6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMzM3MGViODIyMDE3YjIuLmNkNjJjNDZkZTAxN2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MjMsNiArMTcyMywxMSBAQCBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cylcbiBcdFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4gXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cykge1xuK1x0XHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4rXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTI6MTYuNDA1NzE4MTM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5OTU4MDA3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gU2VlbXMgbGlrZSB3ZSd2ZSBnb3Qgc29tZSB1cGRhdGVzIHRvIHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBzb21lIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgbWFuYWdpbmcgdGhlIGBzZnBfYnVzYCBwcm9wZXJseS4gVGhlIGtleSBpcyB0aGlzOiBpZiBgcGh5X3NmcF9wcm9iZWAgcmV0dXJucyBhbiBlcnJvciAoYHJldGAgaXMgbm9uLXplcm8pLCBhbmQgaWYgdGhlIGBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AgcG9pbnRlciAqYWN0dWFsbHkqIHBvaW50cyB0byBhIGJ1cywgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgY2xlYW51cC4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXHUwMDNlc2ZwX2J1cylgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlbiB0aGUgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBwb2ludGVyIHdpbGwgYmUgc2V0IHRvIGBOVUxMYC4gVGhpcyBpcyBzdGFuZGFyZCwgYW5kIGNyaXRpY2FsLCBlbnN1cmluZyB3ZSBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyBhbmQgcHJldmVudCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycyBpbiBlcnJvciBzY2VuYXJpb3MuIEl0J3MgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBsZWZ0IGluIGEgY29uc2lzdGVudCBzdGF0ZSBldmVuIGlmIHRoZSBTRlAgcHJvYmUgZmFpbHMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciB0aG9zZSBlZGdlIGNhc2VzLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYSwgd2hlcmUgaGFyZHdhcmUgY2FuIGJlLi4udW5wcmVkaWN0YWJsZSEgVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSdsbCBkZWZpbml0ZWx5IGRpdmUgZGVlcGVyIHRvIG1ha2Ugc3VyZSB0aGV5J3ZlIGNvdmVyZWQgKmFsbCogdGhlIGZhaWx1cmUgc2NlbmFyaW9zIHRoYXQgbWlnaHQgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjQ3LjQwMTUyMTE1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0OTMwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3NmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwNz1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUxNzpcXHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjQ3Ljc2MzAxODY1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjkzMDcxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGlzc2VjdGluZyBgcGh5X3NmcF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgcm91dGluZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBwcm9iaW5nIGEgU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlIChTRlApIHRyYW5zY2VpdmVyLCBnaXZlbiB0aGUgbmFtZS4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaWRlbnRpZmllcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHdpdGhpbiB0aGUgU0ZQIG1vZHVsZS4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGl0IHBlcmZvcm1zLCBhbmQgaG93IGl0IGRldGVybWluZXMgdGhlIHNwZWNpZmljcyBvZiB0aGUgY29ubmVjdGVkIG1vZHVsZS4gS25vd2luZyB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbiB3b3VsZCBnaXZlIG1lIGEgZmFyIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTI6NTAuNTkyMzI3ODEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFx0fVxcbjE3MjI6XFx0XFxuMTcyMzpcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpXFxuMTcyNDpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpIHtcXG4xNzI3OlxcdFxcdFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuMTcyODpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbjE3Mjk6XFx0XFx0fVxcbjE3MzA6XFx0XFxuMTczMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzI6XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbjE3MzU6XFx0e1xcbjE3MzY6XFx0XFx0cmV0dXJuIHBoeWRydi1cXHUwMDNlY29uZmlnX2ludHIgXFx1MDAyNlxcdTAwMjYgcGh5ZHJ2LVxcdTAwM2VoYW5kbGVfaW50ZXJydXB0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1Mjo1MC41OTI1MDU2MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQxNDAxNjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgYW4gZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIFNGUCBQcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gdG9sZCB0aGF0IHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24gaXMgaW5pdGlhdGVkIGJ5IGBwaHlfc2V0dXBfcG9ydHNgLiBSaWdodCwgdGhhdCdzIGEgY29tbW9uIHBhdHRlcm4gaW4gUEhZIGRyaXZlciBkZXNpZ24uIGBwaHlfc2V0dXBfcG9ydHNgIGlzIGxpa2VseSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlcywgYW5kLCBhcyBleHBlY3RlZCwgaXQncyBjYWxsaW5nIG91dCB0byBwcm9iZSBmb3Igc3BlY2lmaWMgU0ZQIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbiB0aGlzIHNwZWNpZmljIGNvZGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwaHlfc2V0dXBfcG9ydHNgIHRvIHNlZSBob3cgaXQgZGVjaWRlcyB3aGVuIGFuZCB3aHkgdG8gY2FsbCBgcGh5X3NmcF9wcm9iZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHdoaWNoIGFyZSB0cmlnZ2VyaW5nIHRoZSBwcm9iZS4gSXMgaXQgaGFyZHdhcmUtYmFzZWQgZGV0ZWN0aW9uPyBJcyBpdCBjb25maWd1cmF0aW9uLWRyaXZlbj8gV2hhdCdzIHRoZSB0cmlnZ2VyaW5nIGxvZ2ljPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgd2hlbiB0aGUgcHJvYmUgaXMgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MzoxOC4wMDY1MjM3NjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTA3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTA3OlxcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMzUwODpcXHR7XFxuMzUwOTpcXHRcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhwb3J0c19zdXBwb3J0ZWQpO1xcbjM1MTA6XFx0XFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbjM1MTE6XFx0XFx0aW50IHJldDtcXG4zNTEyOlxcdFxcbjM1MTM6XFx0XFx0cmV0ID0gb2ZfcGh5X3BvcnRzKHBoeWRldik7XFxuMzUxNDpcXHRcXHRpZiAocmV0KVxcbjM1MTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTE2OlxcdFxcbjM1MTc6XFx0XFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xcbjM1MTg6XFx0XFx0aWYgKHJldClcXG4zNTE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM1MjA6XFx0XFxuMzUyMTpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VuX3BvcnRzIFxcdTAwM2MgcGh5ZGV2LVxcdTAwM2VtYXhfbl9wb3J0cykge1xcbjM1MjI6XFx0XFx0XFx0cmV0ID0gcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQocGh5ZGV2KTtcXG4zNTIzOlxcdFxcdFxcdGlmIChyZXQpXFxuMzUyNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNTI1OlxcdFxcdH1cXG4zNTI2OlxcdFxcbjM1Mjc6XFx0XFx0bGlua21vZGVfemVybyhwb3J0c19zdXBwb3J0ZWQpO1xcbjM1Mjg6XFx0XFxuMzUyOTpcXHRcXHQvKiBBZ2dyZWdhdGUgdGhlIHN1cHBvcnRlZCBtb2Rlcywgd2hpY2ggYXJlIG1hZGUtdXAgb2YgOlxcbjM1MzA6XFx0XFx0ICogIC0gV2hhdCB0aGUgUEhZIGl0c2VsZiBzdXBwb3J0c1xcbjM1MzE6XFx0XFx0ICogIC0gV2hhdCB0aGUgc3VtIG9mIGFsbCBwb3J0cyBzdXBwb3J0XFxuMzUzMjpcXHRcXHQgKi9cXG4zNTMzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeWRldi1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuMzUzNDpcXHRcXHRcXHRpZiAocG9ydC1cXHUwMDNlYWN0aXZlKVxcbjM1MzU6XFx0XFx0XFx0XFx0bGlua21vZGVfb3IocG9ydHNfc3VwcG9ydGVkLCBwb3J0c19zdXBwb3J0ZWQsXFxuMzUzNjpcXHRcXHRcXHRcXHRcXHQgICAgcG9ydC1cXHUwMDNlc3VwcG9ydGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MTguMDA2NzE2ODg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg2MjQwMTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IExpbmUgb2YgUmVhc29uaW5nOiBQSFkgUHJvYmUgdG8gUG9ydCBTZXR1cCoqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBpcyBzdWNoIHRoYXQgYHBoeV9zZXR1cF9wb3J0c2AgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYHBoeV9wcm9iZWAuIFRoYXQncyB0aGUgY29yZSBvZiBpdC4gSSBzZWUgdGhpcyBhcyBhIGNsZWFuLCBtb2R1bGFyIGRlc2lnbi4gVGhlIGltcGxpY2F0aW9uIGlzIGNsZWFyOiB0aGUgaGFyZHdhcmUgcHJvYmluZyBwcm9jZXNzLCBvcmNoZXN0cmF0ZWQgYnkgYHBoeV9wcm9iZWAsIGRpcmVjdGx5IHJlbGllcyBvbiB0aGUgc3Vic2VxdWVudCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgcGh5c2ljYWwgcG9ydHMgb2YgdGhhdCBQSFksIGhhbmRsZWQgYnkgYHBoeV9zZXR1cF9wb3J0c2AuIFRoaXMgc3VnZ2VzdHMgYSBzdGFuZGFyZCB0d28tc3RlcCBpbml0aWFsaXphdGlvbiBwYXJhZGlnbTogRmlyc3QsIHdlICpkaXNjb3ZlciogdGhlIFBIWSwgYW5kIHRoZW4sICpjb25maWd1cmUqIHRoZSBwb3J0cyBiYXNlZCBvbiB3aGF0IHRoZSBwcm9iZSBpZGVudGlmaWVzLlxuXG5JIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9yIHByb3BhZ2F0aW9uIGhlcmUuIEEgZmFpbHVyZSBpbiBgcGh5X3Byb2JlYCB3b3VsZCAoYW5kIHNob3VsZCEpIGlkZWFsbHkgcHJldmVudCB0aGUgY2FsbCB0byBgcGh5X3NldHVwX3BvcnRzYCBhbHRvZ2V0aGVyLiBDb252ZXJzZWx5LCBhIGZhaWx1cmUgaW4gcG9ydCBzZXR1cCBpcyBsaWtlbHkgZGVwZW5kZW50IG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZS4gVGhlcmVmb3JlLCBteSBkZWJ1ZyB3b3JrZmxvdyB3aWxsIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyB0aGUgb3V0Y29tZXMgb2YgYHBoeV9wcm9iZWAsIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1heSBiZSBpbmZsdWVuY2luZyBgcGh5X3NldHVwX3BvcnRzYC4gQW55IGRlYnVnZ2luZyB3aWxsLCBvZiBjb3Vyc2UsIGZpcnN0IGZvY3VzIG9uIGVycm9yIGNoZWNraW5nIGluIHRoZSBwcm9iZS4gQXJlIHdlIHByb2JpbmcgdGhlIHJpZ2h0IGhhcmR3YXJlPyBXaGF0J3MgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHBoeV9wcm9iZWA/IFdoYXQgaW5mb3JtYXRpb24gaXMgYHBoeV9wcm9iZWAgc3VwcG9zZWQgdG8gaGF2ZSBzZXQgdXAgcHJpb3IgdG8gdGhlIGNhbGwgdG8gYHBoeV9zZXR1cF9wb3J0c2A/IFRob3NlIGFyZSB0aGUga2V5IHF1ZXN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGVmZmVjdGl2ZSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjI2Ljg2OTEyMDEwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ2NDM0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9zZXR1cF9wb3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzQ2Mj1zdGF0aWMgaW50IG9mX3BoeV9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUwNzpzdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzEyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzcxMzpcXHRlcnIgPSBwaHlfc2V0dXBfcG9ydHMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3MTQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MjcuMjE1NTYwMzc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA2ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgUEhZIFByb2JlIEVycm9yIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcGh5X3Byb2JlYCwgdGhlIHByb2JlIGZ1bmN0aW9uIGZvciBQSFkgZGV2aWNlcy4gSSBrbm93IHRoaXMgZ2V0cyBjYWxsZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYSBQSFkgaXMgYmVpbmcgcHJvYmVkLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZsYXcgaW4gYHBoeV9zZnBfcHJvYmVgLiBJdCBzZWVtcyBsaWtlLCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgcGh5X3NldHVwX3NmcF9wb3J0YCwgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBpc24ndCBiZWluZyBwcm9wZXJseSBjbGVhbmVkIHVwIGlmIHRoYXQgZnVuY3Rpb24gZmFpbHMuIFRoYXQncyBhIGNsYXNzaWMgcmVzb3VyY2UgbGVhayBpc3N1ZSwgZWFzaWx5IGZpeGVkLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIG1lYW5pbmcgaXQncyBhIHJlYWwgYnVnLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBjb25maWcgb3B0aW9ucyB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYENPTkZJR19QSFlMSUJgIG9yIGBDT05GSUdfUEhZX0RFVklDRWAuIFRoYXQgd2lsbCBjbGFyaWZ5IHdoYXQncyBhY3R1YWxseSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgYW5kIHRlc3QgdGhlIGZpeCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjMwLjkwNjI1MTUyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MDU4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVxcdFxcdFxcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MzAuOTY1OTgwNzI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTU4Nzg3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBGb3VuZGF0aW9ucyBvZiBgbGlicGh5YCoqXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgKnJlYWxseSogZW5hYmxlcyBgbGlicGh5YD8gSXQncyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5wYWNrIHRoZSBjb3JlIGNvbXBvbmVudHMgdGhhdCBhbGxvdyB0aGlzIGxpYnJhcnkgdG8gZnVuY3Rpb24gZWZmZWN0aXZlbHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgUEhZIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24uIEkga25vdyBpdCdzIG5vdCBtYWdpYzsgdGhlcmUgaGFzIHRvIGJlIGEgcm9idXN0IGFyY2hpdGVjdHVyZSBhdCBwbGF5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdyYXZpdGF0ZSB0b3dhcmRzIHRoZSBhYnN0cmFjdGlvbiBsZXZlbHMuIFdoYXQgbGF5ZXJzIGRvZXMgYGxpYnBoeWAgaW50cm9kdWNlIHRvIHNpbXBsaWZ5IHRoZSBjb21wbGV4aXR5IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJcyBpdCBwcm92aWRpbmcgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgdmFyaW91cyBQSFkgZnVuY3Rpb25zLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyB2ZW5kb3Igb3IgdGVjaG5vbG9neT8gSWYgc28sIHdoYXQgYXJlIHRoZSBrZXkgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgdGhpcyBpbnRlcmZhY2U/IFdoYXQga2luZCBvZiBmbGV4aWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGRvZXMgaXQgb2ZmZXI/IERvZXMgaXQgZW5hYmxlIHBvcnRhYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHNpbGljb24gaW1wbGVtZW50YXRpb25zPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlYWwtd29ybGQgYXBwbGljYXRpb24sIGFmdGVyIGFsbC5cblxuVGhlbiBJIGdldCB0byB0aGlua2luZyBhYm91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHNwZWNpZmljIFBIWSBjb3JlcyBhbmQgdHJhbnNjZWl2ZXJzPyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSB0aGF0IHNoaWVsZHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlIGZyb20gdGhlIG51YW5jZXMgb2YgcmVnaXN0ZXIgbWFwcyBhbmQgc2lnbmFsIHRpbWluZ3M/IEFyZSB0aGVyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYWRqdXN0IHRvIGRpZmZlcmVudCBQSFkgaW1wbGVtZW50YXRpb25zPyBBIHdlbGwtZGVmaW5lZCBIQUwgaXMgZXNzZW50aWFsIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGFkYXB0YWJpbGl0eS5cblxuVGhpbmtpbmcgZGVlcGVyLCBob3cgZG9lcyBpdCBtYW5hZ2UgY2xvY2tpbmcgYW5kIHBvd2VyIGRvbWFpbnM/IERvZXMgaXQgcHJvdmlkZSBtZWNoYW5pc21zIGZvciBjbG9jayBtYW5hZ2VtZW50LCBwb3dlci11cCBzZXF1ZW5jaW5nLCBhbmQgcG93ZXItZG93biBjb250cm9sPyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgcG93ZXIgZWZmaWNpZW5jeSwgZXNwZWNpYWxseSBpbiBtb2Rlcm4gaW50ZWdyYXRlZCBzeXN0ZW1zLiBJJ2QgbmVlZCB0byBjb25zaWRlciB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGNsb2NrIG1hbmFnZW1lbnQuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgd2hlbiBpdCBjb21lcyB0byBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlc2UgaGFuZGxlZCB3aXRoaW4gdGhlIGxpYnJhcnkgb3IgZXh0ZXJuYWwgdG8gaXQ/XG5cbkFuZCBmaW5hbGx5LCB3aGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCBkZWJ1Z2dpbmc/IERvZXMgYGxpYnBoeWAgb2ZmZXIgcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCByZXBvcnRpbmcgbWVjaGFuaXNtcz8gQXJlIHRoZXJlIGNvbXByZWhlbnNpdmUgZGVidWdnaW5nIHRvb2xzLCBzdWNoIGFzIHRyYWNpbmcgY2FwYWJpbGl0aWVzIG9yIGJ1aWx0LWluIHRlc3QgbW9kZXMsIHRoYXQgYWxsb3cgZGV2ZWxvcGVycyB0byBpZGVudGlmeSBhbmQgcmVzb2x2ZSBpc3N1ZXMgcXVpY2tseT8gRGVidWdnaW5nIGlzIGEgbWFqb3IgYm90dGxlbmVjayBpbiBhbnkgZW1iZWRkZWQgc3lzdGVtLiBXaGF0IHN1cHBvcnQgZG9lcyBgbGlicGh5YCBvZmZlciBpbiB0aGlzIGRvbWFpbj8gVGhpcyBpcyB2aXRhbCBmb3IgYW55IHByb2R1Y3Rpb24tcmVhZHkgbGlicmFyeS4gSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIHRyYWRlb2ZmcyBpbiB0aGlzIGFyZWEuXG5cblVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdCBlbmFibGVzXCIgdGhpcyBsaWJyYXJ5IGlzIGFib3V0IGRpc3NlY3RpbmcgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGFic3RyYWN0aW9uIGxheWVycywgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIHRoYXQgbWFrZSBpdCBhIHVzZWZ1bCB0b29sIGluIHRoZSB3b3JsZCBvZiBQSFkgZGV2ZWxvcG1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZGVzaWduIHByaW5jaXBsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjM1LjI2MTg2MTk1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzMxNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnBoeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE0OmxpYnBoeS0kKENPTkZJR19TV1BIWSlcXHRcXHQrPSBzd3BoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE1OmxpYnBoeS0kKENPTkZJR19MRURfVFJJR0dFUl9QSFkpXFx0Kz0gcGh5X2xlZF90cmlnZ2Vycy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE2OmxpYnBoeS0kKENPTkZJR19PUEVOX0FMTElBTkNFX0hFTFBFUlMpICs9IG9wZW5fYWxsaWFuY2VfaGVscGVycy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19QSFlMSU5LKVxcdFxcdCs9IHBoeWxpbmsub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IGxpYnBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19kZXZyZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MzozNS40MTQ1OTg0OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNTA5MjMzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFlMSUIgQ29uZmlndXJhdGlvbiBhbmQgU0ZQIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19QSFlMSUJgIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzLCBzcGVjaWZpY2FsbHkgd2l0aCBTRlAuIEkgc2VlIGBwaHlfc2ZwX3Byb2JlYCB1dGlsaXplcyBgc2ZwX2J1c19maW5kX2Z3bm9kZWAsIGBzZnBfYnVzX2FkZF91cHN0cmVhbWAsIGFuZCBgc2ZwX2J1c19kZWxfdXBzdHJlYW1gLCB3aGljaCBhcmUgYWxsIFNGUC1yZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBtZSBzdXNwZWN0IGEgc3Ryb25nIGRlcGVuZGVuY3kuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gbG9vayB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHRoYXQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gU0ZQIGJhc2VkIG9uIHNvbWUgc29ydCBvZiBtYWNyby4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHRlbGwgbWUgd2hldGhlciBvciBub3QgU0ZQIGZ1bmN0aW9uYWxpdHkgaXMgdGlnaHRseSBjb3VwbGVkIHRvIGBDT05GSUdfUEhZTElCYCBvciBpZiBpdCdzIHBvdGVudGlhbGx5IG1vZHVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgU0ZQIGxvZ2ljIGlzIGNvbXBpbGVkIGluIHdpdGggdGhlIFBIWUxJQiBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6MTMuNzY1NTI0MDI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMzMzUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODojaW5jbHVkZSBcXHUwMDNjbGludXgvc2ZwLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE0Nzc9c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9zdGFuZGFsb25lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0ODA6ICogcGh5X3NmcF9jb25uZWN0X3BoeSAtIENvbm5lY3QgdGhlIFNGUCBtb2R1bGUncyBQSFkgdG8gdGhlIHVwc3RyZWFtIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ4MS0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ4OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0ODk6c3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MDAtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTAxOiAqIHBoeV9zZnBfZGlzY29ubmVjdF9waHkgLSBEaXNjb25uZWN0IHRoZSBTRlAgbW9kdWxlJ3MgUEhZIGZyb20gdGhlIHVwc3RyZWFtIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwMi0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwOS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MTA6c3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTE5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMDogKiBwaHlfc2ZwX2F0dGFjaCAtIGF0dGFjaCB0aGUgU0ZQIGJ1cyB0byB0aGUgUEhZIHVwc3RyZWFtIG5ldHdvcmsgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTIxLSAqIEB1cHN0cmVhbTogcG9pbnRlciB0byB0aGUgcGh5IGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMjogKiBAYnVzOiBzZnAgYnVzIHJlcHJlc2VudGluZyBjYWdlIGJlaW5nIGF0dGFjaGVkXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTIzLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTI0OiAqIFRoaXMgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzZnBfdXBzdHJlYW1fb3BzIC5hdHRhY2ggbWVtYmVyLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MjY6c3RhdGljIHZvaWQgcGh5X3NmcF9hdHRhY2godm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBzZnBfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMC1cXHRpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTMxOlxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUzMjpcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXNfYXR0YWNoZWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MzUtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM2OiAqIHBoeV9zZnBfZGV0YWNoIC0gZGV0YWNoIHRoZSBTRlAgYnVzIGZyb20gdGhlIFBIWSB1cHN0cmVhbSBuZXR3b3JrIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzNy0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHBoeSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1Mzg6ICogQGJ1czogc2ZwIGJ1cyByZXByZXNlbnRpbmcgY2FnZSBiZWluZyBhdHRhY2hlZFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzOS0gKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0MDogKiBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgc2ZwX3Vwc3RyZWFtX29wcyAuZGV0YWNoIG1lbWJlci5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQyOnN0YXRpYyB2b2lkIHBoeV9zZnBfZGV0YWNoKHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU0My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDYtXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0NzpcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQ4OlxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1c19hdHRhY2hlZCA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU0OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTUwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU1MTpzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX2luc2VydCh2b2lkICp1cHN0cmVhbSwgY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Mi17XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUzOlxcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHNmcF9zdXBwb3J0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTQtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU1NTpcXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Ni1cXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTYwOlxcdGxpbmttb2RlX3plcm8oc2ZwX3N1cHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2MS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NjI6XFx0cG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NjMtXFx0aWYgKCFwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2NjpcXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1Njg6XFx0bGlua21vZGVfYW5kKHNmcF9zdXBwb3J0LCBwb3J0LVxcdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXFx1MDAzZWxpbmtfbW9kZXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2OTpcXHRpZiAobGlua21vZGVfZW1wdHkoc2ZwX3N1cHBvcnQpKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTcwLVxcdFxcdGRldl9lcnIoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcXCJpbmNvbXBhdGlibGUgU0ZQIG1vZHVsZSBpbnNlcnRlZCwgbm8gY29tbW9uIGxpbmttb2RlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3My1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NzQ6XFx0aWZhY2UgPSBzZnBfc2VsZWN0X2ludGVyZmFjZShwaHlkZXYtXFx1MDAzZXNmcF9idXMsIHNmcF9zdXBwb3J0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NzUtXFx0aWYgKGlmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTg5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MDpzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTkxLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1OTItXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MzpcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTk0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwMjpzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfdXAodm9pZCAqdXBzdHJlYW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MDQtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwNTpcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjEwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYxMTpzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTIte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYxMy1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjE0OlxcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjE6XFx0LmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyMjpcXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjIzOlxcdC5tb2R1bGVfaW5zZXJ0ID0gcGh5X3NmcF9tb2R1bGVfaW5zZXJ0LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyNDpcXHQubW9kdWxlX3JlbW92ZSA9IHBoeV9zZnBfbW9kdWxlX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjU6XFx0LmxpbmtfdXAgPSBwaHlfc2ZwX2xpbmtfdXAsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI2OlxcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjc6XFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjg6XFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MjktfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY2Nj1zdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjc1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTY3NjpzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTAtXFx0cG9ydC1cXHUwMDNlaXNfbWlpID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTE6XFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwOTpcXHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxMC1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxMi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTM6XFx0XFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzE0LVxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTc6XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzIwOlxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzIxLVxcdH1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjItXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzIzOlxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjQ6XFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzI1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNjpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNzpcXHRcXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyODpcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcyOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3NTQ9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE0OlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNmcF9idXNfYXR0YWNoZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE1OlxcdFxcdFxcdGRldi1cXHUwMDNlc2ZwX2J1cyA9IHBoeWRldi1cXHUwMDNlc2ZwX2J1cztcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1MDc9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUxNi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1MTc6XFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUxOC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTU2LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU1NzogKiBwaHlfZ2V0X3NmcF9wb3J0KCkgLSBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBTRlAgcG9ydCBvZiBhIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU1OC0gKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHRvIGdldCB0aGUgU0ZQIHBvcnQgZnJvbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU2MzpzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTY3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeWRldi1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTY4OlxcdFxcdGlmIChwb3J0LVxcdTAwM2VhY3RpdmUgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlaXNfc2ZwKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2OS1cXHRcXHRcXHRyZXR1cm4gcG9ydDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3Mi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTczOkVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzY1Mz1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3NjctXFx0LyogUmVnaXN0ZXIgdGhlIFBIWSBMRUQgdHJpZ2dlcnMgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3Njg6XFx0aWYgKCFwaHlkZXYtXFx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzY5LVxcdFxcdHBoeV9sZWRfdHJpZ2dlcnNfcmVnaXN0ZXIocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc4Mi1vdXQ6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNzgzOlxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc4NC1cXHRcXHRwaHlfbGVkX3RyaWdnZXJzX3VucmVnaXN0ZXIocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzc5Mj1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODAwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwMTpcXHRpZiAoIXBoeWRldi1cXHUwMDNlaXNfb25fc2ZwX21vZHVsZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDItXFx0XFx0cGh5X2xlZF90cmlnZ2Vyc191bnJlZ2lzdGVyKHBoeWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODA4OlxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODA5OlxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDoxNC4wNDg4Nzc1NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NTcwNzk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0ZQIEJ1cyBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBidXMgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy5cblxuSG93ZXZlciwgYmVmb3JlIEkgZ2V0ICp0b28qIGRlZXAsIEknbGwgdGFrZSBhIHF1aWNrLCBicm9hZGVyIHZpZXcuIEknbGwgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgLiBUaGF0IGZpbGUgc2hvdWxkIHRlbGwgbWUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIGBzZnAtYnVzLmNgLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZpbGVzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gVGhlIGBNYWtlZmlsZWAgc2hvdWxkIGNsZWFybHkgZGVmaW5lIGhvdyB0aGUgYHNmcGAgbW9kdWxlIGlzIGJ1aWx0IGFuZCBpZiBpdCBpbmNsdWRlcyBvciB1c2VzIGFueSBvdGhlciBmaWxlcyB0byBidWlsZCwgb3IgYW55IGRlcGVuZGVuY2llcy4gVGhhdCdzIGEgZ29vZCBwcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdG8gZG8uIEl0IGFsc28gbWlnaHQgcmV2ZWFsIGFueSBuYW1pbmcgY29udmVudGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6MTcuMjQ0NTg4MDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA0ODAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjg6b2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDoxNy4zMTE2NDE5ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2OTk5Mjc5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgU0ZQIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ09ORklHX1NGUGAgaXMgYSBrZXkgZGVmaW5lIGhlcmUsIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBkcml2ZXIgaXMgY29uc3RydWN0ZWQgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc2ZwLWJ1cy5jYCBzb3VyY2UgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBidWlsZD8gTGV0IG1lIHZlcmlmeSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNmcCBzdWJzeXN0ZW0gYXJlIGF2YWlsYWJsZSBvciBub3QsIGV2ZW4gd2l0aCB0aGUgYmFzZSBgQ09ORklHX1NGUGAgZW5hYmxlZC4gRm9yIGV4YW1wbGUsIGlzIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19TRlBgIGRlZmluZWQ/IEkga25vdyBJIGNhbiBxdWlja2x5IGNoZWNrIHRoaXMgYnkgbG9va2luZyB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjQwLjAxMTU3MjQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODY4NDE4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX2J1c19kZWxfdXBzdHJlYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZnAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NmcC5oPTU5ND1pbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xcbmluY2x1ZGUvbGludXgvc2ZwLmg6NTk2OnZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cyk7XFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTctY29uc3QgY2hhciAqc2ZwX2dldF9uYW1lKHN0cnVjdCBzZnBfYnVzICpidXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD02NTM9c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY1OC1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjY1OTpzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cylcXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjQwLjI5ODQyMjk2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyNjA1OTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBTRlAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkndmUgZ290IGEgaHVuY2gg4oCTIHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSBhIHN0dWIsIG9yIHBlcmhhcHMgaXQgKm5lZWRzKiBgQ09ORklHX1NGUGAgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBtZWFuaW5nZnVsLiBJdCdzIGEgY2xhc3NpYyBzY2VuYXJpbywgd29ydGggZXhwbG9yaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gTGV0J3MgZGlnIGludG8gYGluY2x1ZGUvbGludXgvc2ZwLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDY1OS4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciByZWxldmFudCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCB3b3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYFNGUGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgYmxvY2tzIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjUwLjcyNDQ4NDc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2ZwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQwOlxcdHtcXG4gNjQxOlxcdH1cXG4gNjQyOlxcdFxcbiA2NDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfcHV0KHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY0NDpcXHR7XFxuIDY0NTpcXHR9XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNmcF9idXMgKlxcbiA2NDg6XFx0c2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiA2NDk6XFx0e1xcbiA2NTA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY1MTpcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpXFxuIDY1NTpcXHR7XFxuIDY1NjpcXHRcXHRyZXR1cm4gMDtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfZGVsX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY2MDpcXHR7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2ZwX2dldF9uYW1lKHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjY2OlxcdH1cXG4gNjY3OlxcdCNlbmRpZlxcbiA2Njg6XFx0XFxuIDY2OTpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6NTAuNzI0NTc2OTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyMjM2MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNGUCBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNGUCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IuIElmIGBDT05GSUdfU0ZQYCBpc24ndCBlbmFibGVkLCB0aGVuIGBzZnBfYnVzX2ZpbmRfZndub2RlYCByZXR1cm5zIGBOVUxMYC4gUmlnaHQsIHRoYXQncyBleHBlY3RlZC4gSnVtcGluZyB0byB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgaGluZ2VzIG9uIHRoZSBgZndub2RlYCBwcm9wZXJ0eSBvZiB0aGUgYHBoeWRldi1cdTAwM2VtZGlvLmRldmAuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IGluc2lkZSB0aGUgYGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKWAgYmxvY2ssIGl0IGNhbGxzIGBzZnBfYnVzX2ZpbmRfZndub2RlYC4gSWYgdGhhdCByZXR1cm5zIGEgdmFsaWQgYnVzLCBpdCBhc3NpZ25zIGl0IHRvIGBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AsIGFkZHMgYW4gdXBzdHJlYW0sIGFuZCB0aGVuIHJlbGVhc2VzIHRoZSBidXMuICBNYWtlcyBzZW5zZS4gQ3J1Y2lhbGx5LCBpZiBgQ09ORklHX1NGUGAgaXMgZGlzYWJsZWQgYW5kIGBzZnBfYnVzX2ZpbmRfZndub2RlYCByZXR1cm5zIGBOVUxMYCwgdGhlbiBgcGh5ZGV2LVx1MDAzZXNmcF9idXNgIHdpbGwgYmUgYXNzaWduZWQgYE5VTExgLlxuXG5Ob3csIGlmIGBDT05GSUdfU0ZQYCBpcyBkaXNhYmxlZCwgYW5kLCB0aGVyZWZvcmUsIGBidXNgIGlzIGBOVUxMYCwgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uIGAhcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlIGJlY2F1c2UgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBpcyBgTlVMTGAuIFNvIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGlzbid0IGNhbGxlZC4gVGhlIGZpbmFsIGNvbmRpdGlvbmFsLCBgcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AsIHdpbGwgYWxzbyBiZSBmYWxzZSwgbWVhbmluZyB0aGUgY2xlYW51cCBibG9jayBpcyBuZXZlciBleGVjdXRlZC4gIFRoaXMgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBhcyB0aGUgYHNmcF9idXNgIGluZnJhc3RydWN0dXJlIGlzbid0IHRoZXJlLlxuXG5TbywgdGhlIG5ldyBjb2RlIGluc2lkZSB0aGUgYmxvY2ssIGluY2x1ZGluZyBgcGh5X3NldHVwX3NmcF9wb3J0YCBzaG91bGQgYmUgdW5yZWFjaGFibGUgdW5sZXNzIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCBvciByYXRoZXIsIG5vdCBkaXNhYmxlZC4gQnV0IHdhaXQsIGBDT05GSUdfU0ZQYCBpcyBhIHRyaXN0YXRlLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIHRoZSByZWxldmFudCBvcHRpb24gaXMgYWN0dWFsbHkgYENPTkZJR19TRlBfQlVTYC4gQmVzdCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBhIGtleSBkZXRhaWwgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDo1Ny41NDY5NDIwMjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDA3MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDo1Ny42MjMzNTQzNjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzMDE5OTU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYENPTkZJR19TRlBgIGFuZCBQSFkgRnJhbWV3b3JrIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19TRlBgLiBUaGUgY29kZSB0aGF0J3MgcmVsZXZhbnQgdG8gbWUgaXMgYHBoeV9zZnBfcHJvYmVgLCBhbmQgaXQgbGl2ZXMgd2l0aGluIGBwaHlfZGV2aWNlLmNgLCB3aGljaCB0ZWxscyBtZSBJIG5lZWQgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19TRlBgIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgc2VlIHRoYXQgdGhlIGNvZGUgZXhwbGljaXRseSBleHBlY3RzIGBwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlYCB0byBiZSBzZXQuIFRoYXQgc2NyZWFtcyBEZXZpY2UgVHJlZSBvciBBQ1BJLiBCYXNpY2FsbHksIHRoZSBQSFkgbmVlZHMgYSBub2RlIGFuZCBpdCBtdXN0IGJlIGNvbm5lY3RlZCB0byBhbiBTRlAgYnVzLlxuXG5Ob3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IEl0IHNlZW1zIGxpa2UgaXQgKnNob3VsZCogYmUgZnV6emFibGUsIGdpdmVuIHRoYXQgaXQncyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBJJ20gdGhpbmtpbmcgc3l6a2FsbGVyIGNhbiBsaWtlbHkgY3JlYXRlIHZpcnR1YWwgZGV2aWNlcywgb3IgcG90ZW50aWFsbHkgbGV2ZXJhZ2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIHRob3VnaCBJJ20gbm90IGVudGlyZWx5IGNlcnRhaW4gYWJvdXQgaXRzIGFiaWxpdHkgdG8gZWFzaWx5IGNvbnN0cnVjdCBhbiBlbnRpcmUgU0ZQIGJ1cy4gU3RpbGwsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyAoUEhZIGZyYW1ld29yaykuXG5cblRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIGBwaHlfc2ZwX3Byb2JlYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBQSFkgZGV2aWNlIHByb2JlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHdoZXRoZXIgSSBjYW4gZ2V0IHRvIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaW5ncyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGBuZXRkZXZzaW1gLCBgdmV0aGAsIG9yIGB0dW5gIGRvbid0IHRvdWNoIFBIWXMsIHNvIHRob3NlIGFyZSBvdXQuIEhvd2V2ZXIsIHN5emthbGxlciAqY2FuKiBsb2FkIGEgZHVtbXkgUEhZIGRyaXZlciwgb3IgdXNlIGBtZGlvLW1vY2t1cGAsIG9yIHNpbWlsYXIgdG8gcHJvYmUgUEhZcy4gVGhhdCBtZWFucyBhIHBhdGggZXhpc3RzIVxuXG5XYWl0IGEgbWludXRlLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogUEhZcz8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0IGRvZXMgdGhhdCB0aHJvdWdoIG5ldGxpbmsgYW5kIGJ5IHJlZ2lzdGVyaW5nIHZpcnR1YWwgTURJTyBidXNlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IE1ESU8gbW9ja3VwcyBvciBzaW1pbGFyLiBJIHNob3VsZCBjaGVjayBub3cgYW5kIHNlZSB3aGF0IE1ESU8gbW9ja3VwcyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NToxMi45MjUzNTgwOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDk5MjIxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjEzLjA1MDM1OTc3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzNjY0ODk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBEcml2ZXJzKipcblxuT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNRElPKSBkcml2ZXJzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoaXMgZGlyZWN0b3J5IHdpbGwgbGlrZWx5IGhvdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGludGVyZmFjaW5nIHdpdGggdmFyaW91cyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBNRElPLWNvbXBsaWFudCBkZXZpY2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgZGVmaW5lcyB0aGUgTURJTyBidXMgb3BlcmF0aW9ucywgZGV2aWNlIHByb2JpbmcsIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgYW5kIGludGVycnVwdCBoYW5kbGluZyBpZiBhcHBsaWNhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NToyOC44ODcwMTEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWNwaV9tZGlvLmNcIixcbiAgICBcImZ3bm9kZV9tZGlvLmNcIixcbiAgICBcIm1kaW8tYWlyb2hhLmNcIixcbiAgICBcIm1kaW8tYXNwZWVkLmNcIixcbiAgICBcIm1kaW8tYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tYmNtLXVuaW1hYy5jXCIsXG4gICAgXCJtZGlvLWJpdGJhbmcuY1wiLFxuICAgIFwibWRpby1jYXZpdW0uY1wiLFxuICAgIFwibWRpby1jYXZpdW0uaFwiLFxuICAgIFwibWRpby1ncGlvLmNcIixcbiAgICBcIm1kaW8taGlzaS1mZW1hYy5jXCIsXG4gICAgXCJtZGlvLWkyYy5jXCIsXG4gICAgXCJtZGlvLWlwcTQwMTkuY1wiLFxuICAgIFwibWRpby1pcHE4MDY0LmNcIixcbiAgICBcIm1kaW8tbW94YXJ0LmNcIixcbiAgICBcIm1kaW8tbXNjYy1taWltLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbS1pcHJvYy5jXCIsXG4gICAgXCJtZGlvLW11eC1iY202MzY4LmNcIixcbiAgICBcIm1kaW8tbXV4LWdwaW8uY1wiLFxuICAgIFwibWRpby1tdXgtbWVzb24tZzEyYS5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1neGwuY1wiLFxuICAgIFwibWRpby1tdXgtbW1pb3JlZy5jXCIsXG4gICAgXCJtZGlvLW11eC1tdWx0aXBsZXhlci5jXCIsXG4gICAgXCJtZGlvLW11eC5jXCIsXG4gICAgXCJtZGlvLW12dXNiLmNcIixcbiAgICBcIm1kaW8tb2N0ZW9uLmNcIixcbiAgICBcIm1kaW8tcGljNjRocHNjLmNcIixcbiAgICBcIm1kaW8tcmVhbHRlay1ydGw5MzAwLmNcIixcbiAgICBcIm1kaW8tcmVnbWFwLmNcIixcbiAgICBcIm1kaW8tc3VuNGkuY1wiLFxuICAgIFwibWRpby10aHVuZGVyLmNcIixcbiAgICBcIm1kaW8teGdlbmUuY1wiLFxuICAgIFwib2ZfbWRpby5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjI4Ljg4NzEyODk5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTM1NDY1NDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgc3l6a2FsbGVyIEludGVyYWN0aW9uIHdpdGggU0ZQIFBIWXMqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBTRlAgUEhZIGRldmljZXMuIFRoZSB0ZXh0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIGEgbW9ja3VwLCB3aGljaCBpcyBhIGtleSBwb2ludC4gSXQgc2VlbXMgc3l6a2FsbGVyIG1pZ2h0IGJlIGluamVjdGluZyBkZXZpY2VzIGR5bmFtaWNhbGx5LCBlaXRoZXIgdGhyb3VnaCBuZXRsaW5rLCBzeXNmcywgb3IgcGVyaGFwcyBpdCdzIGp1c3QgcG9raW5nIGFyb3VuZCBhdCBwcmUtZXhpc3RpbmcgZHVtbXkgZGV2aWNlcywgd2hpY2ggaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS5cblxuTXkgZm9jdXMgaXMgbm93IHplcm9pbmcgaW4gb24gYHBoeV9zZnBfcHJvYmVgLiBBaGEhIEl04oCZcyBjYWxsZWQgd2hlbiB0aGUgUEhZIGRldmljZSBnZXRzIHByb2JlZCwgdGhhdOKAmXMgdXNlZnVsIGNvbnRleHQuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hhdCBoYXBwZW5zIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgaXQgZmFpbHMsIGl0IGhhcyBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCB0aGF0IGNvdWxkIGJlIGEgYnVnLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBob3cgYHBoeV9zZXR1cF9zZnBfcG9ydGAgKmNhbiogZmFpbCwgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGlmIHRoZXkncmUgaGFuZGxlZCBwcm9wZXJseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjUwLjI0MTc4NjEzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc2LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc2OlxcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbjE2Nzk6XFx0XFx0aW50IHJldDtcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0aWYgKCFwb3J0KVxcbjE2ODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdHBvcnQtXFx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xcbjE2ODU6XFx0XFx0cG9ydC1cXHUwMDNlcGh5ID0gcGh5ZGV2O1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHQvKiBUaGUgUEhZIGlzIGEgbWVkaWEgY29udmVydGVyLCB0aGUgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIFNGUCBjYWdlXFxuMTY4ODpcXHRcXHQgKiBpcyBhIE1JSSBwb3J0LlxcbjE2ODk6XFx0XFx0ICovXFxuMTY5MDpcXHRcXHRwb3J0LVxcdTAwM2Vpc19taWkgPSB0cnVlO1xcbjE2OTE6XFx0XFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG4xNjkyOlxcdFxcbjE2OTM6XFx0XFx0LyogVGhlIHBvcnQtXFx1MDAzZXN1cHBvcnRlZCBhbmQgcG9ydC1cXHUwMDNlaW50ZXJmYWNlcyBsaXN0IHdpbGwgYmUgcG9wdWxhdGVkXFxuMTY5NDpcXHRcXHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxcbjE2OTU6XFx0XFx0ICovXFxuMTY5NjpcXHRcXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4xNjk3OlxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbjE2OTk6XFx0XFxuMTcwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MDE6XFx0fVxcbjE3MDI6XFx0XFxuMTcwMzpcXHQvKipcXG4xNzA0OlxcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG4xNzA1OlxcdCAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NTo1MC4yNDIwMjEzMjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MzgzMjM4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBIWS9TRlAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgYmxvY2sgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgUEhZIChQaHlzaWNhbCBMYXllcikgZm9yIGEgcG9ydC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMg4oCTIGhlcmUsIGl0IGxvb2tzIGxpa2UgYHBoeV9wb3J0X2FsbG9jYCBvciBgcGh5X2FkZF9wb3J0YCBjb3VsZCBjYXVzZSBpc3N1ZXMuIFRoaXMgc2VlbXMgbGlrZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsIGNvZGUuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBJJ2xsIG5lZWQgYFBIWUxJQmAgYW5kIGBTRlBgLCBidXQgaG9sZCBvbiwgYFNGUGAgdHJhbnNsYXRlcyB0byBgQ09ORklHX1NGUGAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LlxuXG5MZXQncyBkaXZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZSBhcm91bmQgYHBoeV9zZnBfcHJvYmVgIGFuZCBgcGh5X3NldHVwX3NmcF9wb3J0YCBmb3IgdGhlIGNvcmUgc3ltYm9scy4gT2theSwgaXQncyBgcGh5X3NmcF9wcm9iZWAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X3NldHVwX3BvcnRzYCwgYW5kIGBwaHlfcHJvYmVgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIGFyZSBwcm9iYWJseSBqdXN0IGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9wb3J0c2AuXG5cbldhaXQsIGlzbid0IGBwaHlfcHJvYmVgIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vcGUsIGl0J3MgYSBkZXZpY2UgcHJvYmUgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBvbmx5IGNhbGxlZCBvbmNlIHBlciBkZXZpY2UuIEhvd2V2ZXIsIGBwaHlfc2ZwX3Byb2JlYCBpcyBtb3JlIHNwZWNpZmljIHRvIHRoZSBTRlAgbW9kdWxlLCBzbyBpdCBzaG91bGQgYmUgaW5jbHVkZWQuIEknbGwgYWRkIGBwaHlfc2ZwX3Byb2JlYCB0byB0aGUgXCJGb2N1c1N5bWJvbHNcIiBsaXN0IHRvIGtlZXAgaXQgZnJvbnQgb2YgbWluZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19TRlBgLiBJIGJldCBgQ09ORklHX1BIWUxJQmAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBsb29rIGZvciBhbnkgb3RoZXIgYFNGUGAgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NjoyMi4wODAzNDgxOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE4NzM5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNGUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIlNGUCBjYWdlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjIzLjI5MjIyNzY2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY3MDgxNTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoYXQgYFBIWUxJQmAgZGVhbHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgb2YgbmV0d29ya2luZywgSSdtIHByZXR0eSBzdXJlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgd2lsbCBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBuZXR3b3JrIGRyaXZlciBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdtIGJldHRpbmcgaXQncyBpbiBgZHJpdmVycy9uZXQvcGh5L2AuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIGJ5IGltbWVkaWF0ZWx5IGNoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYm9vbGVhbiBmbGFncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IGBQSFlMSUJgIGFuZCBpdHMgYXNzb2NpYXRlZCBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjQ3Ljk2MzA0NDg3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3OTgwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjQ4LjI3MTAzMTAxNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU3MjQzOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24ncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAgYW5kIGBTRlBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgdHdvIGFyZSB0aGUgb25seSBkZXBlbmRlbmNpZXMgYXQgcGxheS4gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgYW55IGZ1enppbmcgYXBwcm9hY2guXG5cbkFoYSwgbG9va3MgbGlrZSBgTURJT19ERVZJQ0VgIGlzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IGBQSFlMSUJgLCBzbyB3ZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgZm9jdXNpbmcgb24gYFBIWUxJQmAgYW5kIGBTRlBgIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGJhc2UgY29tcG9uZW50cy4gTm8gZnVydGhlciBkaWdnaW5nIG5lY2Vzc2FyeSBoZXJlLlxuXG5Ob3csIGxldCdzIGNvbnNvbGlkYXRlIHRoaXM6XG5cbioqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGZ1bmN0aW9uIGZvciBTRlAgcHJvYmUsIHdlIGhhdmUgYSBjbGVhciBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuXG5cbioqRm9jdXNTeW1ib2xzOiBgcGh5X3NmcF9wcm9iZWAqKiAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LCBzaW5jZSBpdCdzIHRoZSBzcGVjaWZpYyBhcmVhIG9mIGVycm9yIGhhbmRsaW5nIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0aGF0IHJlcXVpcmVzIGNsb3NlIGF0dGVudGlvbi5cblxuKipFbmFibGVDb25maWdzOiBgUEhZTElCYCwgYFNGUGAqKiAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbWluaW11bSByZXF1aXJlZCB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbidzIGxvZ2ljLlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gncyBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHBoeV9zZnBfcHJvYmVgIHJlbGF0ZWQgdG8gdGhlIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZ1bmN0aW9uLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBvdGhlciBpc3N1ZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiBzZXR1cCBmYWlscywgYW5kIG5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNsZWFudXAgb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIFNGUCBidXMgZG9lc24ndCBnZXQgbWVzc2VkIHVwLiBBcyBhIGNvbnNlcXVlbmNlLCB3ZSBtYXkgdW5jb3ZlciBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBmYWlsdXJlcyBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2OTgsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjUzLjIyODI3ODE2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzk5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkqcln[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-26 20:40:11 +0000 UTC FinishedAt: 2026-06-26 20:56:54 +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": "bb365a506b1e6fb050c0fceaad354fe395385ef0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "SFP" ], "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": "bb365a506b1e6fb050c0fceaad354fe395385ef0", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PHYLIB", "SFP" ], "series_id": "5f396780-54d4-40f0-97d4-83448839b2ae" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "phy_sfp_probe" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BIWUxJQiYjMzQ7LAogICAgJiMzNDtTRlAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtwaHlfc2ZwX3Byb2JlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZXJyb3IgaGFuZGxpbmcgaW4gYHBoeV9zZnBfcHJvYmVgIHRvIGNsZWFuIHVwIHRoZSBTRlAgYnVzIHJlZmVyZW5jZSBpZiBgcGh5X3NldHVwX3NmcF9wb3J0YCBmYWlscy4gVGhpcyBpcyBmdW5jdGlvbmFsIGNvcmUga2VybmVsIGxvZ2ljIGluIHRoZSBQSFkgZnJhbWV3b3JrIGFuZCBjYW4gYmUgcmVhY2hlZCBkdXJpbmcgUEhZIGRldmljZSBwcm9iaW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYTVlY2FiZjJjOTFhZDdjODNjMTA0MTQ3NzY5ZDczYzI4Y2Y3ZTk2ZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgSnVuIDI2IDIwOjUyOjEyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5pbmRleCAzMzcwZWI4MjIwMTdiMi4uY2Q2MmM0NmRlMDE3YmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXG5AQCAtMTcyMyw2ICYjNDM7MTcyMywxMSBAQCBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cylcbiBcdFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4gXG4mIzQzO1x0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbiYjNDM7XHRcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbiYjNDM7XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE1ZWNhYmYyYzkxYWQ3YzgzYzEwNDE0Nzc2OWQ3M2MyOGNmN2U5NmQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEp1biAyNiAyMDo1MjoxMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCmluZGV4IDMzNzBlYjgyMjAxN2IyLi5jZDYyYzQ2ZGUwMTdiYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jCkBAIC0xNzIzLDYgJiM0MzsxNzIzLDExIEBAIHN0YXRpYyBpbnQgcGh5X3NmcF9wcm9iZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KQogCWlmICghcmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKQogCQlyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTsKIAomIzQzOwlpZiAocmV0ICZhbXA7JmFtcDsgcGh5ZGV2LSZndDtzZnBfYnVzKSB7CiYjNDM7CQlzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtJmd0O3NmcF9idXMpOwomIzQzOwkJcGh5ZGV2LSZndDtzZnBfYnVzID0gTlVMTDsKJiM0MzsJfQomIzQzOwogCXJldHVybiByZXQ7CiB9CiAKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MgoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWSBEZXZpY2UgRHJpdmVyIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciBgZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY2AuIFNlZW1zIGxpa2Ugd2UmIzM5O3ZlIGdvdCBzb21lIHVwZGF0ZXMgdG8gdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbi4gU3BlY2lmaWNhbGx5LCBpdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGFkZGluZyBzb21lIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuCgpUaGUgY29yZSBvZiB0aGlzIGlzIGFib3V0IG1hbmFnaW5nIHRoZSBgc2ZwX2J1c2AgcHJvcGVybHkuIFRoZSBrZXkgaXMgdGhpczogaWYgYHBoeV9zZnBfcHJvYmVgIHJldHVybnMgYW4gZXJyb3IgKGByZXRgIGlzIG5vbi16ZXJvKSwgYW5kIGlmIHRoZSBgcGh5ZGV2LSZndDtzZnBfYnVzYCBwb2ludGVyICphY3R1YWxseSogcG9pbnRzIHRvIGEgYnVzLCB0aGVuIHdlIG5lZWQgdG8gZG8gc29tZSBjbGVhbnVwLiBUaGUgcGF0Y2ggaW5kaWNhdGVzIHRoYXQgYHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi0mZ3Q7c2ZwX2J1cylgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlbiB0aGUgYHBoeWRldi0mZ3Q7c2ZwX2J1c2AgcG9pbnRlciB3aWxsIGJlIHNldCB0byBgTlVMTGAuIFRoaXMgaXMgc3RhbmRhcmQsIGFuZCBjcml0aWNhbCwgZW5zdXJpbmcgd2UgcHJvcGVybHkgcmVsZWFzZSByZXNvdXJjZXMgYW5kIHByZXZlbnQgYW55IHBvdGVudGlhbCBtZW1vcnkgbGVha3Mgb3IgZGFuZ2xpbmcgcG9pbnRlcnMgaW4gZXJyb3Igc2NlbmFyaW9zLiBJdCYjMzk7cyBhIHNlbnNpYmxlIGFwcHJvYWNoIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGxlZnQgaW4gYSBjb25zaXN0ZW50IHN0YXRlIGV2ZW4gaWYgdGhlIFNGUCBwcm9iZSBmYWlscy4gR290dGEgbWFrZSBzdXJlIHdlIGNvdmVyIHRob3NlIGVkZ2UgY2FzZXMsIGVzcGVjaWFsbHkgaW4gdGhpcyBhcmVhLCB3aGVyZSBoYXJkd2FyZSBjYW4gYmUuLi51bnByZWRpY3RhYmxlISBUaGlzIHNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJJiMzOTtsbCBkZWZpbml0ZWx5IGRpdmUgZGVlcGVyIHRvIG1ha2Ugc3VyZSB0aGV5JiMzOTt2ZSBjb3ZlcmVkICphbGwqIHRoZSBmYWlsdXJlIHNjZW5hcmlvcyB0aGF0IG1pZ2h0IHByZXNlbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cGh5X3NmcF9wcm9iZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNjc2PXN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNTA3PXN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTE3Olx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVx0aWYgKHJldClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjA3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSByb2xlIG9mIHRoZSB0aGlua2VyOgoKKipEaXNzZWN0aW5nIGBwaHlfc2ZwX3Byb2JlYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhpcyByb3V0aW5lLiBJJiMzOTttIGFzc3VtaW5nIGl0JiMzOTtzIHJlbGF0ZWQgdG8gcHJvYmluZyBhIFNtYWxsIEZvcm0tZmFjdG9yIFBsdWdnYWJsZSAoU0ZQKSB0cmFuc2NlaXZlciwgZ2l2ZW4gdGhlIG5hbWUuIFRoZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGl0IGlkZW50aWZpZXMgYW5kIGludGVyYWN0cyB3aXRoIHRoZSBwaHlzaWNhbCBsYXllciAoUEhZKSB3aXRoaW4gdGhlIFNGUCBtb2R1bGUuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBjbG9zZWx5IGF0IGhvdyBpdCBoYW5kbGVzIHRoZSBjb21tdW5pY2F0aW9uLCBhbnkgaW5pdGlhbGl6YXRpb24gaXQgcGVyZm9ybXMsIGFuZCBob3cgaXQgZGV0ZXJtaW5lcyB0aGUgc3BlY2lmaWNzIG9mIHRoZSBjb25uZWN0ZWQgbW9kdWxlLiBLbm93aW5nIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiB0aGlzIGZ1bmN0aW9uIHdvdWxkIGdpdmUgbWUgYSBmYXIgZGVlcGVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIG92ZXJhbGwgaGFyZHdhcmUgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTcwNywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNzA3Olx0c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4xNzA4Olx0e1xuMTcwOTpcdFx0c3RydWN0IHNmcF9idXMgKmJ1cztcbjE3MTA6XHRcdGludCByZXQgPSAwO1xuMTcxMTpcdFxuMTcxMjpcdFx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbjE3MTM6XHRcdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbjE3MTQ6XHRcdFx0aWYgKElTX0VSUihidXMpKVxuMTcxNTpcdFx0XHRcdHJldHVybiBQVFJfRVJSKGJ1cyk7XG4xNzE2Olx0XG4xNzE3Olx0XHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gYnVzO1xuMTcxODpcdFxuMTcxOTpcdFx0XHRyZXQgPSBzZnBfYnVzX2FkZF91cHN0cmVhbShidXMsIHBoeWRldiwgXHUwMDI2c2ZwX3BoeWRldl9vcHMpO1xuMTcyMDpcdFx0XHRzZnBfYnVzX3B1dChidXMpO1xuMTcyMTpcdFx0fVxuMTcyMjpcdFxuMTcyMzpcdFx0aWYgKCFyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKVxuMTcyNDpcdFx0XHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcbjE3MjU6XHRcbjE3MjY6XHRcdGlmIChyZXQgXHUwMDI2XHUwMDI2IHBoeWRldi1cdTAwM2VzZnBfYnVzKSB7XG4xNzI3Olx0XHRcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbjE3Mjg6XHRcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBOVUxMO1xuMTcyOTpcdFx0fVxuMTczMDpcdFxuMTczMTpcdFx0cmV0dXJuIHJldDtcbjE3MzI6XHR9XG4xNzMzOlx0XG4xNzM0Olx0c3RhdGljIGJvb2wgcGh5X2Rydl9zdXBwb3J0c19pcnEoY29uc3Qgc3RydWN0IHBoeV9kcml2ZXIgKnBoeWRydilcbjE3MzU6XHR7XG4xNzM2Olx0XHRyZXR1cm4gcGh5ZHJ2LVx1MDAzZWNvbmZpZ19pbnRyIFx1MDAyNlx1MDAyNiBwaHlkcnYtXHUwMDNlaGFuZGxlX2ludGVycnVwdDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjk1CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGlua2luZyBvdXQgbG91ZCBhcyBhbiBleHBlcnQ6CgoqKlRyYWNpbmcgdGhlIFNGUCBQcm9iZSBGdW5jdGlvbioqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgYmVlbiB0b2xkIHRoYXQgdGhlIGBwaHlfc2ZwX3Byb2JlYCBmdW5jdGlvbiBpcyBpbml0aWF0ZWQgYnkgYHBoeV9zZXR1cF9wb3J0c2AuIFJpZ2h0LCB0aGF0JiMzOTtzIGEgY29tbW9uIHBhdHRlcm4gaW4gUEhZIGRyaXZlciBkZXNpZ24uIGBwaHlfc2V0dXBfcG9ydHNgIGlzIGxpa2VseSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlcywgYW5kLCBhcyBleHBlY3RlZCwgaXQmIzM5O3MgY2FsbGluZyBvdXQgdG8gcHJvYmUgZm9yIHNwZWNpZmljIFNGUCBtb2R1bGVzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgaW4gdGhpcyBzcGVjaWZpYyBjb2RlIGNvbnRleHQuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHBoeV9zZXR1cF9wb3J0c2AgdG8gc2VlIGhvdyBpdCBkZWNpZGVzIHdoZW4gYW5kIHdoeSB0byBjYWxsIGBwaHlfc2ZwX3Byb2JlYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGNvbmRpdGlvbnMgd2hpY2ggYXJlIHRyaWdnZXJpbmcgdGhlIHByb2JlLiBJcyBpdCBoYXJkd2FyZS1iYXNlZCBkZXRlY3Rpb24/IElzIGl0IGNvbmZpZ3VyYXRpb24tZHJpdmVuPyBXaGF0JiMzOTtzIHRoZSB0cmlnZ2VyaW5nIGxvZ2ljPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgd2hlbiB0aGUgcHJvYmUgaXMgdHJpZ2dlcmVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM1MDcsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzUwNzpcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4zNTA4Olx0e1xuMzUwOTpcdFx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0socG9ydHNfc3VwcG9ydGVkKTtcbjM1MTA6XHRcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbjM1MTE6XHRcdGludCByZXQ7XG4zNTEyOlx0XG4zNTEzOlx0XHRyZXQgPSBvZl9waHlfcG9ydHMocGh5ZGV2KTtcbjM1MTQ6XHRcdGlmIChyZXQpXG4zNTE1Olx0XHRcdHJldHVybiByZXQ7XG4zNTE2Olx0XG4zNTE3Olx0XHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XG4zNTE4Olx0XHRpZiAocmV0KVxuMzUxOTpcdFx0XHRnb3RvIG91dDtcbjM1MjA6XHRcbjM1MjE6XHRcdGlmIChwaHlkZXYtXHUwMDNlbl9wb3J0cyBcdTAwM2MgcGh5ZGV2LVx1MDAzZW1heF9uX3BvcnRzKSB7XG4zNTIyOlx0XHRcdHJldCA9IHBoeV9kZWZhdWx0X3NldHVwX3NpbmdsZV9wb3J0KHBoeWRldik7XG4zNTIzOlx0XHRcdGlmIChyZXQpXG4zNTI0Olx0XHRcdFx0Z290byBvdXQ7XG4zNTI1Olx0XHR9XG4zNTI2Olx0XG4zNTI3Olx0XHRsaW5rbW9kZV96ZXJvKHBvcnRzX3N1cHBvcnRlZCk7XG4zNTI4Olx0XG4zNTI5Olx0XHQvKiBBZ2dyZWdhdGUgdGhlIHN1cHBvcnRlZCBtb2Rlcywgd2hpY2ggYXJlIG1hZGUtdXAgb2YgOlxuMzUzMDpcdFx0ICogIC0gV2hhdCB0aGUgUEhZIGl0c2VsZiBzdXBwb3J0c1xuMzUzMTpcdFx0ICogIC0gV2hhdCB0aGUgc3VtIG9mIGFsbCBwb3J0cyBzdXBwb3J0XG4zNTMyOlx0XHQgKi9cbjM1MzM6XHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXHUwMDI2cGh5ZGV2LVx1MDAzZXBvcnRzLCBoZWFkKVxuMzUzNDpcdFx0XHRpZiAocG9ydC1cdTAwM2VhY3RpdmUpXG4zNTM1Olx0XHRcdFx0bGlua21vZGVfb3IocG9ydHNfc3VwcG9ydGVkLCBwb3J0c19zdXBwb3J0ZWQsXG4zNTM2Olx0XHRcdFx0XHQgICAgcG9ydC1cdTAwM2VzdXBwb3J0ZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5OTgKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqTXkgTGluZSBvZiBSZWFzb25pbmc6IFBIWSBQcm9iZSB0byBQb3J0IFNldHVwKioKCkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSYjMzk7bSB3b3JraW5nIHdpdGggaXMgc3VjaCB0aGF0IGBwaHlfc2V0dXBfcG9ydHNgIGlzIGludHJpbnNpY2FsbHkgbGlua2VkIHRvIGBwaHlfcHJvYmVgLiBUaGF0JiMzOTtzIHRoZSBjb3JlIG9mIGl0LiBJIHNlZSB0aGlzIGFzIGEgY2xlYW4sIG1vZHVsYXIgZGVzaWduLiBUaGUgaW1wbGljYXRpb24gaXMgY2xlYXI6IHRoZSBoYXJkd2FyZSBwcm9iaW5nIHByb2Nlc3MsIG9yY2hlc3RyYXRlZCBieSBgcGh5X3Byb2JlYCwgZGlyZWN0bHkgcmVsaWVzIG9uIHRoZSBzdWJzZXF1ZW50IHNldHVwIGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBwaHlzaWNhbCBwb3J0cyBvZiB0aGF0IFBIWSwgaGFuZGxlZCBieSBgcGh5X3NldHVwX3BvcnRzYC4gVGhpcyBzdWdnZXN0cyBhIHN0YW5kYXJkIHR3by1zdGVwIGluaXRpYWxpemF0aW9uIHBhcmFkaWdtOiBGaXJzdCwgd2UgKmRpc2NvdmVyKiB0aGUgUEhZLCBhbmQgdGhlbiwgKmNvbmZpZ3VyZSogdGhlIHBvcnRzIGJhc2VkIG9uIHdoYXQgdGhlIHByb2JlIGlkZW50aWZpZXMuCgpJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9yIHByb3BhZ2F0aW9uIGhlcmUuIEEgZmFpbHVyZSBpbiBgcGh5X3Byb2JlYCB3b3VsZCAoYW5kIHNob3VsZCEpIGlkZWFsbHkgcHJldmVudCB0aGUgY2FsbCB0byBgcGh5X3NldHVwX3BvcnRzYCBhbHRvZ2V0aGVyLiBDb252ZXJzZWx5LCBhIGZhaWx1cmUgaW4gcG9ydCBzZXR1cCBpcyBsaWtlbHkgZGVwZW5kZW50IG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZS4gVGhlcmVmb3JlLCBteSBkZWJ1ZyB3b3JrZmxvdyB3aWxsIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyB0aGUgb3V0Y29tZXMgb2YgYHBoeV9wcm9iZWAsIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1heSBiZSBpbmZsdWVuY2luZyBgcGh5X3NldHVwX3BvcnRzYC4gQW55IGRlYnVnZ2luZyB3aWxsLCBvZiBjb3Vyc2UsIGZpcnN0IGZvY3VzIG9uIGVycm9yIGNoZWNraW5nIGluIHRoZSBwcm9iZS4gQXJlIHdlIHByb2JpbmcgdGhlIHJpZ2h0IGhhcmR3YXJlPyBXaGF0JiMzOTtzIHRoZSBlcnJvciBjb2RlIHJldHVybmVkIGJ5IGBwaHlfcHJvYmVgPyBXaGF0IGluZm9ybWF0aW9uIGlzIGBwaHlfcHJvYmVgIHN1cHBvc2VkIHRvIGhhdmUgc2V0IHVwIHByaW9yIHRvIHRoZSBjYWxsIHRvIGBwaHlfc2V0dXBfcG9ydHNgPyBUaG9zZSBhcmUgdGhlIGtleSBxdWVzdGlvbnMuIFVuZGVyc3RhbmRpbmcgdGhhdCByZWxhdGlvbnNoaXAgaXMgdGhlIHN0YXJ0aW5nIHBvaW50IGZvciBlZmZlY3RpdmUgdHJvdWJsZXNob290aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfc2V0dXBfcG9ydHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzQ2Mj1zdGF0aWMgaW50IG9mX3BoeV9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUwNi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUwNzpzdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTA4LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzcxMi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzcxMzpcdGVyciA9IHBoeV9zZXR1cF9wb3J0cyhwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzE0LVx0aWYgKGVycilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYwMAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDEyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGaXhpbmcgYSBQSFkgUHJvYmUgRXJyb3IgUGF0aCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHBoeV9wcm9iZWAsIHRoZSBwcm9iZSBmdW5jdGlvbiBmb3IgUEhZIGRldmljZXMuIEkga25vdyB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyBuZXR3b3JrIGRldmljZSBpbml0aWFsaXphdGlvbiDigJMgc3BlY2lmaWNhbGx5LCB3aGVuIGEgUEhZIGlzIGJlaW5nIHByb2JlZC4gVGhlIHBhdGNoIGlzIGFkZHJlc3NpbmcgYSBmbGF3IGluIGBwaHlfc2ZwX3Byb2JlYC4gSXQgc2VlbXMgbGlrZSwgaW4gdGhlIGVycm9yIHBhdGggb2YgYHBoeV9zZXR1cF9zZnBfcG9ydGAsIGBwaHlkZXYtJmd0O3NmcF9idXNgIGlzbiYjMzk7dCBiZWluZyBwcm9wZXJseSBjbGVhbmVkIHVwIGlmIHRoYXQgZnVuY3Rpb24gZmFpbHMuIFRoYXQmIzM5O3MgYSBjbGFzc2ljIHJlc291cmNlIGxlYWsgaXNzdWUsIGVhc2lseSBmaXhlZC4gVGhlIGdvb2QgbmV3cyBpcywgdGhpcyBwYXRoIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBtZWFuaW5nIGl0JiMzOTtzIGEgcmVhbCBidWcuIE5vdywgdGhlIHF1ZXN0aW9uIGlzLCB3aGF0IGNvbmZpZyBvcHRpb25zIHRyaWdnZXIgdGhpcz8gSSBuZWVkIHRvIGNoZWNrIGVpdGhlciBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgIG9yIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgIHRvIGRldGVybWluZSBpZiB3ZSBhcmUgbG9va2luZyBhdCBgQ09ORklHX1BIWUxJQmAgb3IgYENPTkZJR19QSFlfREVWSUNFYC4gVGhhdCB3aWxsIGNsYXJpZnkgd2hhdCYjMzk7cyBhY3R1YWxseSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgYW5kIHRlc3QgdGhlIGZpeCB0aG9yb3VnaGx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtwaHlfZGV2aWNlLm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVx0XHRcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXHRcdFx0XHQgICBsaW5rbW9kZS5vIHBoeV9saW5rX3RvcG9sb2d5Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTA1NQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipEZWx2aW5nIGludG8gdGhlIEZvdW5kYXRpb25zIG9mIGBsaWJwaHlgKioKClNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgKnJlYWxseSogZW5hYmxlcyBgbGlicGh5YD8gSXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBxdWVzdGlvbiB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgY29uc2lkZXJhdGlvbi4gSSBuZWVkIHRvIHVucGFjayB0aGUgY29yZSBjb21wb25lbnRzIHRoYXQgYWxsb3cgdGhpcyBsaWJyYXJ5IHRvIGZ1bmN0aW9uIGVmZmVjdGl2ZWx5IHdpdGhpbiB0aGUgYnJvYWRlciBjb250ZXh0IG9mIFBIWSBkZXNpZ24gYW5kIGltcGxlbWVudGF0aW9uLiBJIGtub3cgaXQmIzM5O3Mgbm90IG1hZ2ljOyB0aGVyZSBoYXMgdG8gYmUgYSByb2J1c3QgYXJjaGl0ZWN0dXJlIGF0IHBsYXkuCgpNeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdyYXZpdGF0ZSB0b3dhcmRzIHRoZSBhYnN0cmFjdGlvbiBsZXZlbHMuIFdoYXQgbGF5ZXJzIGRvZXMgYGxpYnBoeWAgaW50cm9kdWNlIHRvIHNpbXBsaWZ5IHRoZSBjb21wbGV4aXR5IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJcyBpdCBwcm92aWRpbmcgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgdmFyaW91cyBQSFkgZnVuY3Rpb25zLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyB2ZW5kb3Igb3IgdGVjaG5vbG9neT8gSWYgc28sIHdoYXQgYXJlIHRoZSBrZXkgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgdGhpcyBpbnRlcmZhY2U/IFdoYXQga2luZCBvZiBmbGV4aWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGRvZXMgaXQgb2ZmZXI/IERvZXMgaXQgZW5hYmxlIHBvcnRhYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHNpbGljb24gaW1wbGVtZW50YXRpb25zPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlYWwtd29ybGQgYXBwbGljYXRpb24sIGFmdGVyIGFsbC4KClRoZW4gSSBnZXQgdG8gdGhpbmtpbmcgYWJvdXQgaGFyZHdhcmUgZGVwZW5kZW5jaWVzLiBIb3cgZG9lcyBpdCBpbnRlcmFjdCB3aXRoIHRoZSBzcGVjaWZpYyBQSFkgY29yZXMgYW5kIHRyYW5zY2VpdmVycz8gSXMgdGhlcmUgYSBjbGVhcmx5IGRlZmluZWQgaGFyZHdhcmUgYWJzdHJhY3Rpb24gbGF5ZXIgKEhBTCkgdGhhdCBzaGllbGRzIHRoZSBoaWdoZXItbGV2ZWwgY29kZSBmcm9tIHRoZSBudWFuY2VzIG9mIHJlZ2lzdGVyIG1hcHMgYW5kIHNpZ25hbCB0aW1pbmdzPyBBcmUgdGhlcmUgY29uZmlndXJhdGlvbiBvcHRpb25zIHRvIGFkanVzdCB0byBkaWZmZXJlbnQgUEhZIGltcGxlbWVudGF0aW9ucz8gQSB3ZWxsLWRlZmluZWQgSEFMIGlzIGVzc2VudGlhbCBmb3IgbWFpbnRhaW5hYmlsaXR5IGFuZCBhZGFwdGFiaWxpdHkuCgpUaGlua2luZyBkZWVwZXIsIGhvdyBkb2VzIGl0IG1hbmFnZSBjbG9ja2luZyBhbmQgcG93ZXIgZG9tYWlucz8gRG9lcyBpdCBwcm92aWRlIG1lY2hhbmlzbXMgZm9yIGNsb2NrIG1hbmFnZW1lbnQsIHBvd2VyLXVwIHNlcXVlbmNpbmcsIGFuZCBwb3dlci1kb3duIGNvbnRyb2w/IFRoaXMgaXMgZXNzZW50aWFsIGZvciBwb3dlciBlZmZpY2llbmN5LCBlc3BlY2lhbGx5IGluIG1vZGVybiBpbnRlZ3JhdGVkIHN5c3RlbXMuIEkmIzM5O2QgbmVlZCB0byBjb25zaWRlciB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGNsb2NrIG1hbmFnZW1lbnQuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgd2hlbiBpdCBjb21lcyB0byBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlc2UgaGFuZGxlZCB3aXRoaW4gdGhlIGxpYnJhcnkgb3IgZXh0ZXJuYWwgdG8gaXQ/CgpBbmQgZmluYWxseSwgd2hhdCBhYm91dCBlcnJvciBoYW5kbGluZyBhbmQgZGVidWdnaW5nPyBEb2VzIGBsaWJwaHlgIG9mZmVyIHJvYnVzdCBlcnJvciBjaGVja2luZyBhbmQgcmVwb3J0aW5nIG1lY2hhbmlzbXM/IEFyZSB0aGVyZSBjb21wcmVoZW5zaXZlIGRlYnVnZ2luZyB0b29scywgc3VjaCBhcyB0cmFjaW5nIGNhcGFiaWxpdGllcyBvciBidWlsdC1pbiB0ZXN0IG1vZGVzLCB0aGF0IGFsbG93IGRldmVsb3BlcnMgdG8gaWRlbnRpZnkgYW5kIHJlc29sdmUgaXNzdWVzIHF1aWNrbHk/IERlYnVnZ2luZyBpcyBhIG1ham9yIGJvdHRsZW5lY2sgaW4gYW55IGVtYmVkZGVkIHN5c3RlbS4gV2hhdCBzdXBwb3J0IGRvZXMgYGxpYnBoeWAgb2ZmZXIgaW4gdGhpcyBkb21haW4/IFRoaXMgaXMgdml0YWwgZm9yIGFueSBwcm9kdWN0aW9uLXJlYWR5IGxpYnJhcnkuIEkmIzM5O2Qgd2FudCB0byB1bmRlcnN0YW5kIHRoZSBkZXNpZ24gdHJhZGVvZmZzIGluIHRoaXMgYXJlYS4KClVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlICYjMzQ7d2hhdCBlbmFibGVzJiMzNDsgdGhpcyBsaWJyYXJ5IGlzIGFib3V0IGRpc3NlY3RpbmcgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGFic3RyYWN0aW9uIGxheWVycywgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIHRoYXQgbWFrZSBpdCBhIHVzZWZ1bCB0b29sIGluIHRoZSB3b3JsZCBvZiBQSFkgZGV2ZWxvcG1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZGVzaWduIHByaW5jaXBsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xpYnBoeSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZTo0OmxpYnBoeS15XHRcdFx0Oj0gcGh5Lm8gcGh5LWM0NS5vIHBoeS1jb3JlLm8gcGh5X2RldmljZS5vIFxcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtNS1cdFx0XHRcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xMj1lbmRpZlxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTEzLVxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE0OmxpYnBoeS0kKENPTkZJR19TV1BIWSlcdFx0JiM0Mzs9IHN3cGh5Lm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToxNTpsaWJwaHktJChDT05GSUdfTEVEX1RSSUdHRVJfUEhZKVx0JiM0Mzs9IHBoeV9sZWRfdHJpZ2dlcnMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE2OmxpYnBoeS0kKENPTkZJR19PUEVOX0FMTElBTkNFX0hFTFBFUlMpICYjNDM7PSBvcGVuX2FsbGlhbmNlX2hlbHBlcnMub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE3LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0xOT1vYmotJChDT05GSUdfUEhZTElOSylcdFx0JiM0Mzs9IHBoeWxpbmsub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjIwOm9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBsaWJwaHkub1xuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXHRcdCYjNDM7PSBtZGlvX2RldnJlcy5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU5MTYKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiA5NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBIWUxJQiBDb25maWd1cmF0aW9uIGFuZCBTRlAgRGVwZW5kZW5jeSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIGBDT05GSUdfUEhZTElCYCDigJMgdGhhdCYjMzk7cyB0aGUga2V5IGNvbmZpZ3VyYXRpb24gaXRlbSBoZXJlLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIHNwZWNpZmljYWxseSB3aXRoIFNGUC4gSSBzZWUgYHBoeV9zZnBfcHJvYmVgIHV0aWxpemVzIGBzZnBfYnVzX2ZpbmRfZndub2RlYCwgYHNmcF9idXNfYWRkX3Vwc3RyZWFtYCwgYW5kIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAsIHdoaWNoIGFyZSBhbGwgU0ZQLXJlbGF0ZWQgZnVuY3Rpb25zLiBUaGlzIG1ha2VzIG1lIHN1c3BlY3QgYSBzdHJvbmcgZGVwZW5kZW5jeS4gVG8gYmUgc3VyZSwgSSBuZWVkIHRvIGNoZWNrIHRoZSBzb3VyY2UuIEkmIzM5O20gZ29pbmcgdG8gbG9vayB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHRoYXQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gU0ZQIGJhc2VkIG9uIHNvbWUgc29ydCBvZiBtYWNyby4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHRlbGwgbWUgd2hldGhlciBvciBub3QgU0ZQIGZ1bmN0aW9uYWxpdHkgaXMgdGlnaHRseSBjb3VwbGVkIHRvIGBDT05GSUdfUEhZTElCYCBvciBpZiBpdCYjMzk7cyBwb3RlbnRpYWxseSBtb2R1bGFyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiB0aGlzIFNGUCBsb2dpYyBpcyBjb21waWxlZCBpbiB3aXRoIHRoZSBQSFlMSUIgY29yZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM4OiNpbmNsdWRlIFx1MDAzY2xpbnV4L3NmcC5oXHUwMDNlXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM5LSNpbmNsdWRlIFx1MDAzY2xpbnV4L3NrYnVmZi5oXHUwMDNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNDc3PXN0YXRpYyBERVZJQ0VfQVRUUl9STyhwaHlfc3RhbmRhbG9uZSk7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDc5LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDgwOiAqIHBoeV9zZnBfY29ubmVjdF9waHkgLSBDb25uZWN0IHRoZSBTRlAgbW9kdWxlJiMzOTtzIFBIWSB0byB0aGUgdXBzdHJlYW0gUEhZXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE0ODEtICogQHVwc3RyZWFtOiBwb2ludGVyIHRvIHRoZSB1cHN0cmVhbSBwaHkgZGV2aWNlXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNDg4LSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNDg5OnN0YXRpYyBpbnQgcGh5X3NmcF9jb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ5MC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTAwLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTAxOiAqIHBoeV9zZnBfZGlzY29ubmVjdF9waHkgLSBEaXNjb25uZWN0IHRoZSBTRlAgbW9kdWxlJiMzOTtzIFBIWSBmcm9tIHRoZSB1cHN0cmVhbSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwMi0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2Vcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MDktICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MTA6c3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUxMS17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTE5LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTIwOiAqIHBoeV9zZnBfYXR0YWNoIC0gYXR0YWNoIHRoZSBTRlAgYnVzIHRvIHRoZSBQSFkgdXBzdHJlYW0gbmV0d29yayBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyMS0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHBoeSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMjogKiBAYnVzOiBzZnAgYnVzIHJlcHJlc2VudGluZyBjYWdlIGJlaW5nIGF0dGFjaGVkXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MjMtICpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyNDogKiBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgc2ZwX3Vwc3RyZWFtX29wcyAuYXR0YWNoIG1lbWJlci5cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNS0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyNjpzdGF0aWMgdm9pZCBwaHlfc2ZwX2F0dGFjaCh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHNmcF9idXMgKmJ1cylcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNy17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTMwLVx0aWYgKHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MzE6XHRcdHBoeWRldi1cdTAwM2VhdHRhY2hlZF9kZXYtXHUwMDNlc2ZwX2J1cyA9IGJ1cztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUzMjpcdHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkID0gdHJ1ZTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMy19XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTM1LS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM2OiAqIHBoeV9zZnBfZGV0YWNoIC0gZGV0YWNoIHRoZSBTRlAgYnVzIGZyb20gdGhlIFBIWSB1cHN0cmVhbSBuZXR3b3JrIGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTM3LSAqIEB1cHN0cmVhbTogcG9pbnRlciB0byB0aGUgcGh5IGRldmljZVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM4OiAqIEBidXM6IHNmcCBidXMgcmVwcmVzZW50aW5nIGNhZ2UgYmVpbmcgYXR0YWNoZWRcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzOS0gKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQwOiAqIFRoaXMgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzZnBfdXBzdHJlYW1fb3BzIC5kZXRhY2ggbWVtYmVyLlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTQxLSAqL1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQyOnN0YXRpYyB2b2lkIHBoeV9zZnBfZGV0YWNoKHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTQzLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDYtXHRpZiAocGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0NzpcdFx0cGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2Rldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0ODpcdHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkID0gZmFsc2U7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDktfVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTUwLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUxOnN0YXRpYyBpbnQgcGh5X3NmcF9tb2R1bGVfaW5zZXJ0KHZvaWQgKnVwc3RyZWFtLCBjb25zdCBzdHJ1Y3Qgc2ZwX2VlcHJvbV9pZCAqaWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTIte1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUzOlx0X19FVEhUT09MX0RFQ0xBUkVfTElOS19NT0RFX01BU0soc2ZwX3N1cHBvcnQpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTU0LVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTU1Olx0Y29uc3Qgc3RydWN0IHNmcF9tb2R1bGVfY2FwcyAqY2FwcztcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Ni1cdHN0cnVjdCBwaHlfcG9ydCAqcG9ydDtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NjA6XHRsaW5rbW9kZV96ZXJvKHNmcF9zdXBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2MS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2MjpcdHBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NjMtXHRpZiAoIXBvcnQpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTY2Olx0Y2FwcyA9IHNmcF9nZXRfbW9kdWxlX2NhcHMocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY3LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTY4Olx0bGlua21vZGVfYW5kKHNmcF9zdXBwb3J0LCBwb3J0LVx1MDAzZXN1cHBvcnRlZCwgY2Fwcy1cdTAwM2VsaW5rX21vZGVzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2OTpcdGlmIChsaW5rbW9kZV9lbXB0eShzZnBfc3VwcG9ydCkpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3MC1cdFx0ZGV2X2VycihcdTAwMjZwaHlkZXYtXHUwMDNlbWRpby5kZXYsIFwmIzM0O2luY29tcGF0aWJsZSBTRlAgbW9kdWxlIGluc2VydGVkLCBubyBjb21tb24gbGlua21vZGVcXG5cJiMzNDspO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3My1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU3NDpcdGlmYWNlID0gc2ZwX3NlbGVjdF9pbnRlcmZhY2UocGh5ZGV2LVx1MDAzZXNmcF9idXMsIHNmcF9zdXBwb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3NS1cdGlmIChpZmFjZSA9PSBQSFlfSU5URVJGQUNFX01PREVfTkEpIHtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1ODktXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1OTA6c3RhdGljIHZvaWQgcGh5X3NmcF9tb2R1bGVfcmVtb3ZlKHZvaWQgKnVwc3RyZWFtKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTkxLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU5Mi1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MzpcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU5NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MDEtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MDI6c3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX3VwKHZvaWQgKnVwc3RyZWFtKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAzLXtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYwNC1cdHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYgPSB1cHN0cmVhbTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwNTpcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYwNi1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTAtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MTE6c3RhdGljIHZvaWQgcGh5X3NmcF9saW5rX2Rvd24odm9pZCAqdXBzdHJlYW0pXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTIte1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjEzLVx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjE0Olx0c3RydWN0IHBoeV9wb3J0ICpwb3J0ID0gcGh5X2dldF9zZnBfcG9ydChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjE1LVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYxOS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyMDpzdGF0aWMgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgc2ZwX3BoeWRldl9vcHMgPSB7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjE6XHQuYXR0YWNoID0gcGh5X3NmcF9hdHRhY2gsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjI6XHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjM6XHQubW9kdWxlX2luc2VydCA9IHBoeV9zZnBfbW9kdWxlX2luc2VydCxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyNDpcdC5tb2R1bGVfcmVtb3ZlID0gcGh5X3NmcF9tb2R1bGVfcmVtb3ZlLFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI1Olx0LmxpbmtfdXAgPSBwaHlfc2ZwX2xpbmtfdXAsXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjY6XHQubGlua19kb3duID0gcGh5X3NmcF9saW5rX2Rvd24sXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjc6XHQuY29ubmVjdF9waHkgPSBwaHlfc2ZwX2Nvbm5lY3RfcGh5LFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI4Olx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYyOS19O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY2Nj1zdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY3NS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTY3NjpzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjc3LXtcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTAtXHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTE6XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTItXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNS0gKiBAcGh5ZGV2OiBQb2ludGVyIHRvIHBoeV9kZXZpY2VcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwOC17XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDk6XHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzEwLVx0aW50IHJldCA9IDA7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzEyLVx0aWYgKHBoeWRldi1cdTAwM2VtZGlvLmRldi5md25vZGUpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxMzpcdFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNC1cdFx0aWYgKElTX0VSUihidXMpKVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNi1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcxNzpcdFx0cGh5ZGV2LVx1MDAzZXNmcF9idXMgPSBidXM7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MTgtXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XHRcdHJldCA9IHNmcF9idXNfYWRkX3Vwc3RyZWFtKGJ1cywgcGh5ZGV2LCBcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjA6XHRcdHNmcF9idXNfcHV0KGJ1cyk7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjEtXHR9XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjItXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjM6XHRpZiAoIXJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjQ6XHRcdHJldCA9IHBoeV9zZXR1cF9zZnBfcG9ydChwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzI1LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzI2Olx0aWYgKHJldCBcdTAwMjZcdTAwMjYgcGh5ZGV2LVx1MDAzZXNmcF9idXMpIHtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNzpcdFx0c2ZwX2J1c19kZWxfdXBzdHJlYW0ocGh5ZGV2LVx1MDAzZXNmcF9idXMpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzI4Olx0XHRwaHlkZXYtXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjktXHR9XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0xNzU0PWludCBwaHlfYXR0YWNoX2RpcmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTgxMy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTgxNDpcdFx0aWYgKHBoeWRldi1cdTAwM2VzZnBfYnVzX2F0dGFjaGVkKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE1Olx0XHRcdGRldi1cdTAwM2VzZnBfYnVzID0gcGh5ZGV2LVx1MDAzZXNmcF9idXM7XG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTYtXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYz0zNTA3PXN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTE3Olx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVx0aWYgKHJldClcbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NTYtLyoqXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1NTc6ICogcGh5X2dldF9zZnBfcG9ydCgpIC0gUmV0dXJucyB0aGUgZmlyc3QgdmFsaWQgU0ZQIHBvcnQgb2YgYSBQSFlcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU1OC0gKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHRvIGdldCB0aGUgU0ZQIHBvcnQgZnJvbVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2Mi0gKi9cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU2MzpzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2NC17XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTY3LVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBcdTAwMjZwaHlkZXYtXHUwMDNlcG9ydHMsIGhlYWQpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1Njg6XHRcdGlmIChwb3J0LVx1MDAzZWFjdGl2ZSBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2Vpc19zZnApXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NjktXHRcdFx0cmV0dXJuIHBvcnQ7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTcyLX1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU3MzpFWFBPUlRfU1lNQk9MX0dQTChwaHlfZ2V0X3NmcF9wb3J0KTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3NC1cbi0tXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc2Ny1cdC8qIFJlZ2lzdGVyIHRoZSBQSFkgTEVEIHRyaWdnZXJzICovXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3Njg6XHRpZiAoIXBoeWRldi1cdTAwM2Vpc19vbl9zZnBfbW9kdWxlKVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzY5LVx0XHRwaHlfbGVkX3RyaWdnZXJzX3JlZ2lzdGVyKHBoeWRldik7XG4tLVxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzgyLW91dDpcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6Mzc4MzpcdGlmICghcGh5ZGV2LVx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3ODQtXHRcdHBoeV9sZWRfdHJpZ2dlcnNfdW5yZWdpc3RlcihwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzc5Mj1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgwMC1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwMTpcdGlmICghcGh5ZGV2LVx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDItXHRcdHBoeV9sZWRfdHJpZ2dlcnNfdW5yZWdpc3RlcihwaHlkZXYpO1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgwNy1cbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwODpcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cdTAwM2VzZnBfYnVzKTtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwOTpcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzgxMC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA3NTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBTRlAgQnVzIERyaXZlciBJbXBsZW1lbnRhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBidXMgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuY2AuIFRoYXQmIzM5O3MgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgdGhlIGxvdy1sZXZlbCBpbnRlcmFjdGlvbnMuCgpIb3dldmVyLCBiZWZvcmUgSSBnZXQgKnRvbyogZGVlcCwgSSYjMzk7bGwgdGFrZSBhIHF1aWNrLCBicm9hZGVyIHZpZXcuIEkmIzM5O2xsIGNoZWNrIHRoZSBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYC4gVGhhdCBmaWxlIHNob3VsZCB0ZWxsIG1lIGlmIEkmIzM5O20gb24gdGhlIHJpZ2h0IHRyYWNrIHdpdGggYHNmcC1idXMuY2AsIGFuZCBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgZmlsZXMgb3IgZGVwZW5kZW5jaWVzIEkgc2hvdWxkIGJlIGF3YXJlIG9mLiBUaGUgYE1ha2VmaWxlYCBzaG91bGQgY2xlYXJseSBkZWZpbmUgaG93IHRoZSBgc2ZwYCBtb2R1bGUgaXMgYnVpbHQgYW5kIGlmIGl0IGluY2x1ZGVzIG9yIHVzZXMgYW55IG90aGVyIGZpbGVzIHRvIGJ1aWxkLCBvciBhbnkgZGVwZW5kZW5jaWVzLiBUaGF0JiMzOTtzIGEgZ29vZCBwcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdG8gZG8uIEl0IGFsc28gbWlnaHQgcmV2ZWFsIGFueSBuYW1pbmcgY29udmVudGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NmcCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX05FVFdPUktfUEhZX1RJTUVTVEFNUElORykgJiM0Mzs9IG1paV90aW1lc3RhbXBlci5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMjUtXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcdFx0JiM0Mzs9IHNmcC5vXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjc6c2ZwLW9iai0kKENPTkZJR19TRlApXHRcdCYjNDM7PSBzZnAtYnVzLm9cbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyODpvYmoteVx0XHRcdFx0JiM0Mzs9ICQoc2ZwLW9iai15KSAkKHNmcC1vYmotbSlcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yOS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyMDIKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OgoKKipJbnZlc3RpZ2F0aW5nIFNGUCBEcml2ZXIgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgc2VlIGBDT05GSUdfU0ZQYCBpcyBhIGtleSBkZWZpbmUgaGVyZSwgdGhhdCYjMzk7cyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBkcml2ZXIgaXMgY29uc3RydWN0ZWQgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc2ZwLWJ1cy5jYCBzb3VyY2UgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBidWlsZD8gTGV0IG1lIHZlcmlmeSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNmcCBzdWJzeXN0ZW0gYXJlIGF2YWlsYWJsZSBvciBub3QsIGV2ZW4gd2l0aCB0aGUgYmFzZSBgQ09ORklHX1NGUGAgZW5hYmxlZC4gRm9yIGV4YW1wbGUsIGlzIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19TRlBgIGRlZmluZWQ/IEkga25vdyBJIGNhbiBxdWlja2x5IGNoZWNrIHRoaXMgYnkgbG9va2luZyB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2ZwX2J1c19kZWxfdXBzdHJlYW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L3NmcC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvc2ZwLmg9NTk0PWludCBzZnBfYnVzX2FkZF91cHN0cmVhbShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzLCB2b2lkICp1cHN0cmVhbSxcbmluY2x1ZGUvbGludXgvc2ZwLmgtNTk1LVx0XHRcdCBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyAqb3BzKTtcbmluY2x1ZGUvbGludXgvc2ZwLmg6NTk2OnZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cyk7XG5pbmNsdWRlL2xpbnV4L3NmcC5oLTU5Ny1jb25zdCBjaGFyICpzZnBfZ2V0X25hbWUoc3RydWN0IHNmcF9idXMgKmJ1cyk7XG4tLVxuaW5jbHVkZS9saW51eC9zZnAuaD02NTM9c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG4tLVxuaW5jbHVkZS9saW51eC9zZnAuaC02NTgtXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjY1OTpzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cylcbmluY2x1ZGUvbGludXgvc2ZwLmgtNjYwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE3NDUKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA1MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipBbmFseXppbmcgUG90ZW50aWFsIFNGUCBEZXBlbmRlbmN5KioKClJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJJiMzOTt2ZSBnb3QgYSBodW5jaCDigJMgdGhpcyBmdW5jdGlvbiBtaWdodCBoYXZlIGEgc3R1Yiwgb3IgcGVyaGFwcyBpdCAqbmVlZHMqIGBDT05GSUdfU0ZQYCB0byBhY3R1YWxseSAqZG8qIGFueXRoaW5nIG1lYW5pbmdmdWwuIEl0JiMzOTtzIGEgY2xhc3NpYyBzY2VuYXJpbywgd29ydGggZXhwbG9yaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuCgpNeSBuZXh0IHN0ZXAgaXMgY2xlYXIuIExldCYjMzk7cyBkaWcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDY1OS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgcGxhY2UgdG8gc3RhcnQgbG9va2luZyBmb3IgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gb3IgcmVsZXZhbnQgc3RydWN0dXJlIGRlZmluaXRpb25zIHRoYXQgd291bGQgc2hlZCBsaWdodCBvbiB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhpcyBmdW5jdGlvbiBhbmQgdGhlIGBTRlBgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igc2ltaWxhciBjb25zdHJ1Y3RzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9zZnAuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDY0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjQwOlx0e1xuIDY0MTpcdH1cbiA2NDI6XHRcbiA2NDM6XHRzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19wdXQoc3RydWN0IHNmcF9idXMgKmJ1cylcbiA2NDQ6XHR7XG4gNjQ1Olx0fVxuIDY0NjpcdFxuIDY0NzpcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNmcF9idXMgKlxuIDY0ODpcdHNmcF9idXNfZmluZF9md25vZGUoY29uc3Qgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmZ3bm9kZSlcbiA2NDk6XHR7XG4gNjUwOlx0XHRyZXR1cm4gTlVMTDtcbiA2NTE6XHR9XG4gNjUyOlx0XG4gNjUzOlx0c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXG4gNjU0Olx0XHRcdFx0XHQgICAgICAgY29uc3Qgc3RydWN0IHNmcF91cHN0cmVhbV9vcHMgKm9wcylcbiA2NTU6XHR7XG4gNjU2Olx0XHRyZXR1cm4gMDtcbiA2NTc6XHR9XG4gNjU4Olx0XG4gNjU5Olx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfZGVsX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpXG4gNjYwOlx0e1xuIDY2MTpcdH1cbiA2NjI6XHRcbiA2NjM6XHRzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKnNmcF9nZXRfbmFtZShzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxuIDY2NDpcdHtcbiA2NjU6XHRcdHJldHVybiBOVUxMO1xuIDY2NjpcdH1cbiA2Njc6XHQjZW5kaWZcbiA2Njg6XHRcbiA2Njk6XHQjZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIzODYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0MDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTRlAgRHJpdmVyIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIFNGUCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBpdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbmFsIGJlaGF2aW9yLiBJZiBgQ09ORklHX1NGUGAgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gYHNmcF9idXNfZmluZF9md25vZGVgIHJldHVybnMgYE5VTExgLiBSaWdodCwgdGhhdCYjMzk7cyBleHBlY3RlZC4gSnVtcGluZyB0byB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgaGluZ2VzIG9uIHRoZSBgZndub2RlYCBwcm9wZXJ0eSBvZiB0aGUgYHBoeWRldi0mZ3Q7bWRpby5kZXZgLgoKTGV0JiMzOTtzIGJyZWFrIGl0IGRvd246IGluc2lkZSB0aGUgYGlmIChwaHlkZXYtJmd0O21kaW8uZGV2LmZ3bm9kZSlgIGJsb2NrLCBpdCBjYWxscyBgc2ZwX2J1c19maW5kX2Z3bm9kZWAuIElmIHRoYXQgcmV0dXJucyBhIHZhbGlkIGJ1cywgaXQgYXNzaWducyBpdCB0byBgcGh5ZGV2LSZndDtzZnBfYnVzYCwgYWRkcyBhbiB1cHN0cmVhbSwgYW5kIHRoZW4gcmVsZWFzZXMgdGhlIGJ1cy4gIE1ha2VzIHNlbnNlLiBDcnVjaWFsbHksIGlmIGBDT05GSUdfU0ZQYCBpcyBkaXNhYmxlZCBhbmQgYHNmcF9idXNfZmluZF9md25vZGVgIHJldHVybnMgYE5VTExgLCB0aGVuIGBwaHlkZXYtJmd0O3NmcF9idXNgIHdpbGwgYmUgYXNzaWduZWQgYE5VTExgLgoKTm93LCBpZiBgQ09ORklHX1NGUGAgaXMgZGlzYWJsZWQsIGFuZCwgdGhlcmVmb3JlLCBgYnVzYCBpcyBgTlVMTGAsIHRoZSBzdWJzZXF1ZW50IGNvbmRpdGlvbiBgIXJldCAmYW1wOyZhbXA7IHBoeWRldi0mZ3Q7c2ZwX2J1c2AgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlIGJlY2F1c2UgYHBoeWRldi0mZ3Q7c2ZwX2J1c2AgaXMgYE5VTExgLiBTbyBgcGh5X3NldHVwX3NmcF9wb3J0YCBpc24mIzM5O3QgY2FsbGVkLiBUaGUgZmluYWwgY29uZGl0aW9uYWwsIGByZXQgJmFtcDsmYW1wOyBwaHlkZXYtJmd0O3NmcF9idXNgLCB3aWxsIGFsc28gYmUgZmFsc2UsIG1lYW5pbmcgdGhlIGNsZWFudXAgYmxvY2sgaXMgbmV2ZXIgZXhlY3V0ZWQuICBUaGlzIHNlZW1zIGxvZ2ljYWxseSBzb3VuZCwgYXMgdGhlIGBzZnBfYnVzYCBpbmZyYXN0cnVjdHVyZSBpc24mIzM5O3QgdGhlcmUuCgpTbywgdGhlIG5ldyBjb2RlIGluc2lkZSB0aGUgYmxvY2ssIGluY2x1ZGluZyBgcGh5X3NldHVwX3NmcF9wb3J0YCBzaG91bGQgYmUgdW5yZWFjaGFibGUgdW5sZXNzIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCBvciByYXRoZXIsIG5vdCBkaXNhYmxlZC4gQnV0IHdhaXQsIGBDT05GSUdfU0ZQYCBpcyBhIHRyaXN0YXRlLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIHRoZSByZWxldmFudCBvcHRpb24gaXMgYWN0dWFsbHkgYENPTkZJR19TRlBfQlVTYC4gQmVzdCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQmIzM5O3MgYSBrZXkgZGV0YWlsIHRvIGNvbmZpcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzODUKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzMDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYENPTkZJR19TRlBgIGFuZCBQSFkgRnJhbWV3b3JrIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX1NGUGAuIFRoZSBjb2RlIHRoYXQmIzM5O3MgcmVsZXZhbnQgdG8gbWUgaXMgYHBoeV9zZnBfcHJvYmVgLCBhbmQgaXQgbGl2ZXMgd2l0aGluIGBwaHlfZGV2aWNlLmNgLCB3aGljaCB0ZWxscyBtZSBJIG5lZWQgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19TRlBgIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UuCgpOZXh0LCBJIHNlZSB0aGF0IHRoZSBjb2RlIGV4cGxpY2l0bHkgZXhwZWN0cyBgcGh5ZGV2LSZndDttZGlvLmRldi5md25vZGVgIHRvIGJlIHNldC4gVGhhdCBzY3JlYW1zIERldmljZSBUcmVlIG9yIEFDUEkuIEJhc2ljYWxseSwgdGhlIFBIWSBuZWVkcyBhIG5vZGUgYW5kIGl0IG11c3QgYmUgY29ubmVjdGVkIHRvIGFuIFNGUCBidXMuCgpOb3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IEl0IHNlZW1zIGxpa2UgaXQgKnNob3VsZCogYmUgZnV6emFibGUsIGdpdmVuIHRoYXQgaXQmIzM5O3MgY29yZSBrZXJuZWwgbG9naWMgcmVsYXRlZCB0byB0aGUgUEhZIGZyYW1ld29yay4gSSYjMzk7bSB0aGlua2luZyBzeXprYWxsZXIgY2FuIGxpa2VseSBjcmVhdGUgdmlydHVhbCBkZXZpY2VzLCBvciBwb3RlbnRpYWxseSBsZXZlcmFnZSBkZXZpY2UgdHJlZSBvdmVybGF5cywgdGhvdWdoIEkmIzM5O20gbm90IGVudGlyZWx5IGNlcnRhaW4gYWJvdXQgaXRzIGFiaWxpdHkgdG8gZWFzaWx5IGNvbnN0cnVjdCBhbiBlbnRpcmUgU0ZQIGJ1cy4gU3RpbGwsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyAoUEhZIGZyYW1ld29yaykuCgpUaGUgbW9yZSBJIHRoaW5rIGFib3V0IGl0LCBgcGh5X3NmcF9wcm9iZWAgaXMgY2FsbGVkIGR1cmluZyB0aGUgUEhZIGRldmljZSBwcm9iZS4gU28gdGhlIG5leHQgc3RlcCBpcyB3aGV0aGVyIEkgY2FuIGdldCB0byBpdCBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGluZ3MgbGlrZSBgbWFjODAyMTFfaHdzaW1gLCBgbmV0ZGV2c2ltYCwgYHZldGhgLCBvciBgdHVuYCBkb24mIzM5O3QgdG91Y2ggUEhZcywgc28gdGhvc2UgYXJlIG91dC4gSG93ZXZlciwgc3l6a2FsbGVyICpjYW4qIGxvYWQgYSBkdW1teSBQSFkgZHJpdmVyLCBvciB1c2UgYG1kaW8tbW9ja3VwYCwgb3Igc2ltaWxhciB0byBwcm9iZSBQSFlzLiBUaGF0IG1lYW5zIGEgcGF0aCBleGlzdHMhCgpXYWl0IGEgbWludXRlLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogUEhZcz8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0IGRvZXMgdGhhdCB0aHJvdWdoIG5ldGxpbmsgYW5kIGJ5IHJlZ2lzdGVyaW5nIHZpcnR1YWwgTURJTyBidXNlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IE1ESU8gbW9ja3VwcyBvciBzaW1pbGFyLiBJIHNob3VsZCBjaGVjayBub3cgYW5kIHNlZSB3aGF0IE1ESU8gbW9ja3VwcyBhcmUgYXZhaWxhYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21kaW8uKm1vY2t1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDE3MQoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIE1ESU8gRHJpdmVycyoqCgpPa2F5LCB0aW1lIHRvIGdldCBzdGFydGVkLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBoZWFydCBvZiB0aGUgbWF0dGVyIOKAkyB0aGUgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3RvcnkuIFRoaXMgaXMgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gYmVnaW4gbXkgaW52ZXN0aWdhdGlvbiBpbnRvIHRoZSBNZWRpYSBJbmRlcGVuZGVudCBJbnRlcmZhY2UgKE1ESU8pIGRyaXZlcnMuIEdpdmVuIG15IGV4cGVydGlzZSwgSSBhbHJlYWR5IGtub3cgdGhpcyBkaXJlY3Rvcnkgd2lsbCBsaWtlbHkgaG91c2UgdGhlIGNvcmUgZnVuY3Rpb25hbGl0eSBhbmQgaW1wbGVtZW50YXRpb24gZGV0YWlscyBmb3IgaW50ZXJmYWNpbmcgd2l0aCB2YXJpb3VzIFBIWXMgKFBoeXNpY2FsIExheWVyIFRyYW5zY2VpdmVycykgYW5kIE1ESU8tY29tcGxpYW50IGRldmljZXMuIEkgZXhwZWN0IHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBkZWZpbmVzIHRoZSBNRElPIGJ1cyBvcGVyYXRpb25zLCBkZXZpY2UgcHJvYmluZywgcmVnaXN0ZXIgYWNjZXNzIHJvdXRpbmVzLCBhbmQgaW50ZXJydXB0IGhhbmRsaW5nIGlmIGFwcGxpY2FibGUuIExldCYjMzk7cyBzZWUgd2hhdCB3ZSBjYW4gZmluZCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvbWRpby8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZXMmIzM0OzogWwogICAgJiMzNDthY3BpX21kaW8uYyYjMzQ7LAogICAgJiMzNDtmd25vZGVfbWRpby5jJiMzNDssCiAgICAmIzM0O21kaW8tYWlyb2hhLmMmIzM0OywKICAgICYjMzQ7bWRpby1hc3BlZWQuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS1pcHJvYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYmNtLXVuaW1hYy5jJiMzNDssCiAgICAmIzM0O21kaW8tYml0YmFuZy5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmMmIzM0OywKICAgICYjMzQ7bWRpby1jYXZpdW0uaCYjMzQ7LAogICAgJiMzNDttZGlvLWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWhpc2ktZmVtYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWkyYy5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxNDAxOS5jJiMzNDssCiAgICAmIzM0O21kaW8taXBxODA2NC5jJiMzNDssCiAgICAmIzM0O21kaW8tbW94YXJ0LmMmIzM0OywKICAgICYjMzQ7bWRpby1tc2NjLW1paW0uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1iY202MzY4LmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtZ3Bpby5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW1lc29uLWcxMmEuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1neGwuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tbWlvcmVnLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbXVsdGlwbGV4ZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXZ1c2IuYyYjMzQ7LAogICAgJiMzNDttZGlvLW9jdGVvbi5jJiMzNDssCiAgICAmIzM0O21kaW8tcGljNjRocHNjLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWFsdGVrLXJ0bDkzMDAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXJlZ21hcC5jJiMzNDssCiAgICAmIzM0O21kaW8tc3VuNGkuYyYjMzQ7LAogICAgJiMzNDttZGlvLXRodW5kZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvLXhnZW5lLmMmIzM0OywKICAgICYjMzQ7b2ZfbWRpby5jJiMzNDsKICBdLAogICYjMzQ7U3ViZGlycyYjMzQ7OiBudWxsCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQ3NTkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGVzZSB0aG91Z2h0cywgZm9ybWF0dGVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBzeXprYWxsZXIgSW50ZXJhY3Rpb24gd2l0aCBTRlAgUEhZcyoqCgpSaWdodCwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCBob3cgc3l6a2FsbGVyIGlzIGludGVyYWN0aW5nIHdpdGggdGhlc2UgU0ZQIFBIWSBkZXZpY2VzLiBUaGUgdGV4dCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IG1lbnRpb24gYSBtb2NrdXAsIHdoaWNoIGlzIGEga2V5IHBvaW50LiBJdCBzZWVtcyBzeXprYWxsZXIgbWlnaHQgYmUgaW5qZWN0aW5nIGRldmljZXMgZHluYW1pY2FsbHksIGVpdGhlciB0aHJvdWdoIG5ldGxpbmssIHN5c2ZzLCBvciBwZXJoYXBzIGl0JiMzOTtzIGp1c3QgcG9raW5nIGFyb3VuZCBhdCBwcmUtZXhpc3RpbmcgZHVtbXkgZGV2aWNlcywgd2hpY2ggaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS4KCk15IGZvY3VzIGlzIG5vdyB6ZXJvaW5nIGluIG9uIGBwaHlfc2ZwX3Byb2JlYC4gQWhhISBJdOKAmXMgY2FsbGVkIHdoZW4gdGhlIFBIWSBkZXZpY2UgZ2V0cyBwcm9iZWQsIHRoYXTigJlzIHVzZWZ1bCBjb250ZXh0LiBOb3csIHRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHdoYXQgaGFwcGVucyBpZiBgcGh5X3NldHVwX3NmcF9wb3J0YCBmYWlscy4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIGlmIGl0IGZhaWxzLCBpdCBoYXMgc29tZSBzb3J0IG9mIGNsZWFudXAgcHJvY2VzcywgdGhhdCBjb3VsZCBiZSBhIGJ1Zy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgaG93IGBwaHlfc2V0dXBfc2ZwX3BvcnRgICpjYW4qIGZhaWwsIHRvIHVuZGVyc3RhbmQgdGhlIHBvdGVudGlhbCBlcnJvciBjb25kaXRpb25zIGFuZCBpZiB0aGV5JiMzOTtyZSBoYW5kbGVkIHByb3Blcmx5LiBUaW1lIHRvIGRpdmUgaW50byB0aGUgY29kZSBmb3IgdGhhdCBmdW5jdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTY3NiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxNjc2Olx0c3RhdGljIGludCBwaHlfc2V0dXBfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbjE2Nzc6XHR7XG4xNjc4Olx0XHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xuMTY3OTpcdFx0aW50IHJldDtcbjE2ODA6XHRcbjE2ODE6XHRcdGlmICghcG9ydClcbjE2ODI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4xNjgzOlx0XG4xNjg0Olx0XHRwb3J0LVx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xuMTY4NTpcdFx0cG9ydC1cdTAwM2VwaHkgPSBwaHlkZXY7XG4xNjg2Olx0XG4xNjg3Olx0XHQvKiBUaGUgUEhZIGlzIGEgbWVkaWEgY29udmVydGVyLCB0aGUgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIFNGUCBjYWdlXG4xNjg4Olx0XHQgKiBpcyBhIE1JSSBwb3J0LlxuMTY4OTpcdFx0ICovXG4xNjkwOlx0XHRwb3J0LVx1MDAzZWlzX21paSA9IHRydWU7XG4xNjkxOlx0XHRwb3J0LVx1MDAzZWlzX3NmcCA9IHRydWU7XG4xNjkyOlx0XG4xNjkzOlx0XHQvKiBUaGUgcG9ydC1cdTAwM2VzdXBwb3J0ZWQgYW5kIHBvcnQtXHUwMDNlaW50ZXJmYWNlcyBsaXN0IHdpbGwgYmUgcG9wdWxhdGVkXG4xNjk0Olx0XHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxuMTY5NTpcdFx0ICovXG4xNjk2Olx0XHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcbjE2OTc6XHRcdGlmIChyZXQpXG4xNjk4Olx0XHRcdHBoeV9wb3J0X2Rlc3Ryb3kocG9ydCk7XG4xNjk5Olx0XG4xNzAwOlx0XHRyZXR1cm4gcmV0O1xuMTcwMTpcdH1cbjE3MDI6XHRcbjE3MDM6XHQvKipcbjE3MDQ6XHQgKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXG4xNzA1Olx0ICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1NTQyCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMjY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBQSFkvU0ZQIEluaXRpYWxpemF0aW9uKioKCk9rYXksIHNvIHRoaXMgY29kZSBibG9jayBpcyByZXNwb25zaWJsZSBmb3IgaW5pdGlhbGl6aW5nIHRoZSBQSFkgKFBoeXNpY2FsIExheWVyKSBmb3IgYSBwb3J0LiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYWx3YXlzIHBvdGVudGlhbCBmYWlsdXJlIHBvaW50cyDigJMgaGVyZSwgaXQgbG9va3MgbGlrZSBgcGh5X3BvcnRfYWxsb2NgIG9yIGBwaHlfYWRkX3BvcnRgIGNvdWxkIGNhdXNlIGlzc3Vlcy4gVGhpcyBzZWVtcyBsaWtlIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGZ1bmN0aW9uYWwgY29kZS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBJJiMzOTtsbCBuZWVkIGBQSFlMSUJgIGFuZCBgU0ZQYCwgYnV0IGhvbGQgb24sIGBTRlBgIHRyYW5zbGF0ZXMgdG8gYENPTkZJR19TRlBgLiBJIHNob3VsZCB2ZXJpZnkgdGhhdC4KCkxldCYjMzk7cyBkaXZlIGRlZXBlci4gSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUgY2FsbCBzdHJ1Y3R1cmUgYXJvdW5kIGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZm9yIHRoZSBjb3JlIHN5bWJvbHMuIE9rYXksIGl0JiMzOTtzIGBwaHlfc2ZwX3Byb2JlYCwgYHBoeV9zZXR1cF9zZnBfcG9ydGAsIGBwaHlfc2V0dXBfcG9ydHNgLCBhbmQgYHBoeV9wcm9iZWAuCgpHaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIGFyZSBwcm9iYWJseSBqdXN0IGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9wb3J0c2AuCgpXYWl0LCBpc24mIzM5O3QgYHBoeV9wcm9iZWAgYSBob3QtcGF0aCBmdW5jdGlvbj8gTm9wZSwgaXQmIzM5O3MgYSBkZXZpY2UgcHJvYmUgZnVuY3Rpb24sIG1lYW5pbmcgaXQmIzM5O3Mgb25seSBjYWxsZWQgb25jZSBwZXIgZGV2aWNlLiBIb3dldmVyLCBgcGh5X3NmcF9wcm9iZWAgaXMgbW9yZSBzcGVjaWZpYyB0byB0aGUgU0ZQIG1vZHVsZSwgc28gaXQgc2hvdWxkIGJlIGluY2x1ZGVkLiBJJiMzOTtsbCBhZGQgYHBoeV9zZnBfcHJvYmVgIHRvIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGxpc3QgdG8ga2VlcCBpdCBmcm9udCBvZiBtaW5kLgoKTm93LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgY29uZmlndXJhdGlvbnMuIFdlJiMzOTt2ZSBnb3QgYENPTkZJR19QSFlMSUJgIGFuZCBgQ09ORklHX1NGUGAuIEkgYmV0IGBDT05GSUdfUEhZTElCYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gbG9vayBmb3IgYW55IG90aGVyIGBTRlBgIG9wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTRlAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXG4tLVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03NC1cdHRyaXN0YXRlIFwmIzM0O1NGUCBjYWdlIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjYgMjA6NTY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMjYKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIEkgd2VyZSBjb25zaWRlcmluZyB0aGlzIG15c2VsZjoKCioqSW52ZXN0aWdhdGluZyBQSFlMSUIgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoYXQgYFBIWUxJQmAgZGVhbHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgb2YgbmV0d29ya2luZywgSSYjMzk7bSBwcmV0dHkgc3VyZSB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIHdpbGwgYmUgc29tZXdoZXJlIHdpdGhpbiB0aGUgbmV0d29yayBkcml2ZXIgZGlyZWN0b3J5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gYmV0dGluZyBpdCYjMzk7cyBpbiBgZHJpdmVycy9uZXQvcGh5L2AuIExldCYjMzk7cyBjb25maXJtIHRoYXQgaHlwb3RoZXNpcyBieSBpbW1lZGlhdGVseSBjaGVja2luZyBgZHJpdmVycy9uZXQvcGh5L0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYm9vbGVhbiBmbGFncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IGBQSFlMSUJgIGFuZCBpdHMgYXNzb2NpYXRlZCBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUEhZTElCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE0LVxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTE2LVx0dHJpc3RhdGUgXCYjMzQ7UEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVwmIzM0O1xuLS1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcbi0tXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy00OC1cbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNTAtXHRkZWZfYm9vbCBPRlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNiAyMDo1NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY5OAoJCQkJCQkJb3V0cHV0OiAxMDIKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQ29uZmlndXJhdGlvbiYjMzk7cyBJbXBhY3QqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgY29uZmlndXJhdGlvbnMgcmVsYXRlZCB0byBgUEhZTElCYCBhbmQgYFNGUGAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSBpZiB0aGVzZSB0d28gYXJlIHRoZSBvbmx5IGRlcGVuZGVuY2llcyBhdCBwbGF5LiBUaGUgZGVwZW5kZW5jeSB0cmVlIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIGZvciBhbnkgZnV6emluZyBhcHByb2FjaC4KCkFoYSwgbG9va3MgbGlrZSBgTURJT19ERVZJQ0VgIGlzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IGBQSFlMSUJgLCBzbyB3ZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgZm9jdXNpbmcgb24gYFBIWUxJQmAgYW5kIGBTRlBgIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGJhc2UgY29tcG9uZW50cy4gTm8gZnVydGhlciBkaWdnaW5nIG5lY2Vzc2FyeSBoZXJlLgoKTm93LCBsZXQmIzM5O3MgY29uc29saWRhdGUgdGhpczoKCioqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGZ1bmN0aW9uIGZvciBTRlAgcHJvYmUsIHdlIGhhdmUgYSBjbGVhciBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuCgoqKkZvY3VzU3ltYm9sczogYHBoeV9zZnBfcHJvYmVgKiogLSBUaGlzIGlzIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIHRvIHRhcmdldCwgc2luY2UgaXQmIzM5O3MgdGhlIHNwZWNpZmljIGFyZWEgb2YgZXJyb3IgaGFuZGxpbmcgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2guIFRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRoYXQgcmVxdWlyZXMgY2xvc2UgYXR0ZW50aW9uLgoKKipFbmFibGVDb25maWdzOiBgUEhZTElCYCwgYFNGUGAqKiAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbWluaW11bSByZXF1aXJlZCB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbiYjMzk7cyBsb2dpYy4KCioqUmVhc29uaW5nOioqIFRoZSBwYXRjaCYjMzk7cyBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHBoeV9zZnBfcHJvYmVgIHJlbGF0ZWQgdG8gdGhlIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZ1bmN0aW9uLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBvdGhlciBpc3N1ZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiBzZXR1cCBmYWlscywgYW5kIG5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNsZWFudXAgb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIFNGUCBidXMgZG9lc24mIzM5O3QgZ2V0IG1lc3NlZCB1cC4gQXMgYSBjb25zZXF1ZW5jZSwgd2UgbWF5IHVuY292ZXIgbG9naWMgZXJyb3JzIHdpdGhpbiB0aGUgUEhZIGZyYW1ld29yayBpZiB3ZSBjYW4gdHJpZ2dlciB0aGUgZmFpbHVyZXMgYWRkcmVzc2VkIGJ5IHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI2IDIwOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQSFlMSUImIzM0OywKICAgICYjMzQ7U0ZQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cGh5X3NmcF9wcm9iZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UEhZTElCJiMzNDssCiAgICAmIzM0O1NGUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3BoeV9zZnBfcHJvYmUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MjoxNS40NzkwMzU3NTdaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNzc4MzIwNzE0MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUEhZTElCXCIsXG4gICAgXCJTRlBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJwaHlfc2ZwX3Byb2JlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBlcnJvciBoYW5kbGluZyBpbiBgcGh5X3NmcF9wcm9iZWAgdG8gY2xlYW4gdXAgdGhlIFNGUCBidXMgcmVmZXJlbmNlIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBUaGlzIGlzIGZ1bmN0aW9uYWwgY29yZSBrZXJuZWwgbG9naWMgaW4gdGhlIFBIWSBmcmFtZXdvcmsgYW5kIGNhbiBiZSByZWFjaGVkIGR1cmluZyBQSFkgZGV2aWNlIHByb2JpbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjE1LjQ3OTA0MjAxN1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTI1OTM0OTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTVlY2FiZjJjOTFhZDdjODNjMTA0MTQ3NzY5ZDczYzI4Y2Y3ZTk2ZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEp1biAyNiAyMDo1MjoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbmluZGV4IDMzNzBlYjgyMjAxN2IyLi5jZDYyYzQ2ZGUwMTdiYyAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXFxuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xcbkBAIC0xNzIzLDYgKzE3MjMsMTEgQEAgc3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuIFxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cylcXG4gXFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuIFxcbitcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbitcXHRcXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbitcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbitcXHR9XFxuK1xcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MjoxNi40MDU3MTY0OThaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI3NjkwNTM2NTQ0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBhNWVjYWJmMmM5MWFkN2M4M2MxMDQxNDc3NjlkNzNjMjhjZjdlOTZkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBKdW4gMjYgMjA6NTI6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuaW5kZXggMzM3MGViODIyMDE3YjIuLmNkNjJjNDZkZTAxN2JjIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuKysrIGIvZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1xuQEAgLTE3MjMsNiArMTcyMywxMSBAQCBzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcbiBcdGlmICghcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cylcbiBcdFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XG4gXG4rXHRpZiAocmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1cykge1xuK1x0XHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXHUwMDNlc2ZwX2J1cyk7XG4rXHRcdHBoeWRldi1cdTAwM2VzZnBfYnVzID0gTlVMTDtcbitcdH1cbitcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTI6MTYuNDA1NzE4MTM4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzA5OTU4MDA3NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFkgRGV2aWNlIERyaXZlciBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jYC4gU2VlbXMgbGlrZSB3ZSd2ZSBnb3Qgc29tZSB1cGRhdGVzIHRvIHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24uIFNwZWNpZmljYWxseSwgaXQgbG9va3MgbGlrZSB0aGV5J3JlIGFkZGluZyBzb21lIGNydWNpYWwgZXJyb3IgaGFuZGxpbmcuXG5cblRoZSBjb3JlIG9mIHRoaXMgaXMgYWJvdXQgbWFuYWdpbmcgdGhlIGBzZnBfYnVzYCBwcm9wZXJseS4gVGhlIGtleSBpcyB0aGlzOiBpZiBgcGh5X3NmcF9wcm9iZWAgcmV0dXJucyBhbiBlcnJvciAoYHJldGAgaXMgbm9uLXplcm8pLCBhbmQgaWYgdGhlIGBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AgcG9pbnRlciAqYWN0dWFsbHkqIHBvaW50cyB0byBhIGJ1cywgdGhlbiB3ZSBuZWVkIHRvIGRvIHNvbWUgY2xlYW51cC4gVGhlIHBhdGNoIGluZGljYXRlcyB0aGF0IGBzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXHUwMDNlc2ZwX2J1cylgIHdpbGwgYmUgY2FsbGVkLCBhbmQgdGhlbiB0aGUgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBwb2ludGVyIHdpbGwgYmUgc2V0IHRvIGBOVUxMYC4gVGhpcyBpcyBzdGFuZGFyZCwgYW5kIGNyaXRpY2FsLCBlbnN1cmluZyB3ZSBwcm9wZXJseSByZWxlYXNlIHJlc291cmNlcyBhbmQgcHJldmVudCBhbnkgcG90ZW50aWFsIG1lbW9yeSBsZWFrcyBvciBkYW5nbGluZyBwb2ludGVycyBpbiBlcnJvciBzY2VuYXJpb3MuIEl0J3MgYSBzZW5zaWJsZSBhcHByb2FjaCB0byBlbnN1cmUgdGhlIHN5c3RlbSBpcyBsZWZ0IGluIGEgY29uc2lzdGVudCBzdGF0ZSBldmVuIGlmIHRoZSBTRlAgcHJvYmUgZmFpbHMuIEdvdHRhIG1ha2Ugc3VyZSB3ZSBjb3ZlciB0aG9zZSBlZGdlIGNhc2VzLCBlc3BlY2lhbGx5IGluIHRoaXMgYXJlYSwgd2hlcmUgaGFyZHdhcmUgY2FuIGJlLi4udW5wcmVkaWN0YWJsZSEgVGhpcyBzZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgSSdsbCBkZWZpbml0ZWx5IGRpdmUgZGVlcGVyIHRvIG1ha2Ugc3VyZSB0aGV5J3ZlIGNvdmVyZWQgKmFsbCogdGhlIGZhaWx1cmUgc2NlbmFyaW9zIHRoYXQgbWlnaHQgcHJlc2VudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MiwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjQ3LjQwMTUyMTE1MVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjE0OTMwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X3NmcF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY3Nj1zdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzAzLS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNDogKiBwaHlfc2ZwX3Byb2JlIC0gcHJvYmUgZm9yIGEgU0ZQIGNhZ2UgYXR0YWNoZWQgdG8gdGhpcyBQSFkgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA1LSAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcwNi0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MDc6c3RhdGljIGludCBwaHlfc2ZwX3Byb2JlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA4LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzUwNz1zdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUxNzpcXHRyZXQgPSBwaHlfc2ZwX3Byb2JlKHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTE4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUyOjQ3Ljc2MzAxODY1MloiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4MjkzMDcxMzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgdGhlIHJvbGUgb2YgdGhlIHRoaW5rZXI6XG5cbioqRGlzc2VjdGluZyBgcGh5X3NmcF9wcm9iZWAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcyBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24uIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoYXQncyBoYXBwZW5pbmcgd2l0aGluIHRoaXMgcm91dGluZS4gSSdtIGFzc3VtaW5nIGl0J3MgcmVsYXRlZCB0byBwcm9iaW5nIGEgU21hbGwgRm9ybS1mYWN0b3IgUGx1Z2dhYmxlIChTRlApIHRyYW5zY2VpdmVyLCBnaXZlbiB0aGUgbmFtZS4gVGhlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQgaWRlbnRpZmllcyBhbmQgaW50ZXJhY3RzIHdpdGggdGhlIHBoeXNpY2FsIGxheWVyIChQSFkpIHdpdGhpbiB0aGUgU0ZQIG1vZHVsZS4gSSdsbCBuZWVkIHRvIGxvb2sgY2xvc2VseSBhdCBob3cgaXQgaGFuZGxlcyB0aGUgY29tbXVuaWNhdGlvbiwgYW55IGluaXRpYWxpemF0aW9uIGl0IHBlcmZvcm1zLCBhbmQgaG93IGl0IGRldGVybWluZXMgdGhlIHNwZWNpZmljcyBvZiB0aGUgY29ubmVjdGVkIG1vZHVsZS4gS25vd2luZyB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgdGhpcyBmdW5jdGlvbiB3b3VsZCBnaXZlIG1lIGEgZmFyIGRlZXBlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSBvdmVyYWxsIGhhcmR3YXJlIGludGVyYWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjA3LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTI6NTAuNTkyMzI3ODEyWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc2MDIwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTcwNyxcbiAgXCJMaW5lQ291bnRcIjogMzBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTcwNzpcXHRzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4xNzA4OlxcdHtcXG4xNzA5OlxcdFxcdHN0cnVjdCBzZnBfYnVzICpidXM7XFxuMTcxMDpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xNzExOlxcdFxcbjE3MTI6XFx0XFx0aWYgKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKSB7XFxuMTcxMzpcXHRcXHRcXHRidXMgPSBzZnBfYnVzX2ZpbmRfZndub2RlKHBoeWRldi1cXHUwMDNlbWRpby5kZXYuZndub2RlKTtcXG4xNzE0OlxcdFxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4xNzE1OlxcdFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGJ1cyk7XFxuMTcxNjpcXHRcXG4xNzE3OlxcdFxcdFxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IGJ1cztcXG4xNzE4OlxcdFxcbjE3MTk6XFx0XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuMTcyMDpcXHRcXHRcXHRzZnBfYnVzX3B1dChidXMpO1xcbjE3MjE6XFx0XFx0fVxcbjE3MjI6XFx0XFxuMTcyMzpcXHRcXHRpZiAoIXJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpXFxuMTcyNDpcXHRcXHRcXHRyZXQgPSBwaHlfc2V0dXBfc2ZwX3BvcnQocGh5ZGV2KTtcXG4xNzI1OlxcdFxcbjE3MjY6XFx0XFx0aWYgKHJldCBcXHUwMDI2XFx1MDAyNiBwaHlkZXYtXFx1MDAzZXNmcF9idXMpIHtcXG4xNzI3OlxcdFxcdFxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuMTcyODpcXHRcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbjE3Mjk6XFx0XFx0fVxcbjE3MzA6XFx0XFxuMTczMTpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MzI6XFx0fVxcbjE3MzM6XFx0XFxuMTczNDpcXHRzdGF0aWMgYm9vbCBwaHlfZHJ2X3N1cHBvcnRzX2lycShjb25zdCBzdHJ1Y3QgcGh5X2RyaXZlciAqcGh5ZHJ2KVxcbjE3MzU6XFx0e1xcbjE3MzY6XFx0XFx0cmV0dXJuIHBoeWRydi1cXHUwMDNlY29uZmlnX2ludHIgXFx1MDAyNlxcdTAwMjYgcGh5ZHJ2LVxcdTAwM2VoYW5kbGVfaW50ZXJydXB0O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1Mjo1MC41OTI1MDU2MDJaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzQxNDAxNjI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBpbmZvcm1hdGlvbiwgdGhpbmtpbmcgb3V0IGxvdWQgYXMgYW4gZXhwZXJ0OlxuXG4qKlRyYWNpbmcgdGhlIFNGUCBQcm9iZSBGdW5jdGlvbioqXG5cbk9rYXksIHNvIHdlJ3ZlIGJlZW4gdG9sZCB0aGF0IHRoZSBgcGh5X3NmcF9wcm9iZWAgZnVuY3Rpb24gaXMgaW5pdGlhdGVkIGJ5IGBwaHlfc2V0dXBfcG9ydHNgLiBSaWdodCwgdGhhdCdzIGEgY29tbW9uIHBhdHRlcm4gaW4gUEhZIGRyaXZlciBkZXNpZ24uIGBwaHlfc2V0dXBfcG9ydHNgIGlzIGxpa2VseSB0aGUgdG9wLWxldmVsIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBjb25maWd1cmluZyB0aGUgcGh5c2ljYWwgbGF5ZXIgaW50ZXJmYWNlcywgYW5kLCBhcyBleHBlY3RlZCwgaXQncyBjYWxsaW5nIG91dCB0byBwcm9iZSBmb3Igc3BlY2lmaWMgU0ZQIG1vZHVsZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbiB0aGlzIHNwZWNpZmljIGNvZGUgY29udGV4dC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBwaHlfc2V0dXBfcG9ydHNgIHRvIHNlZSBob3cgaXQgZGVjaWRlcyB3aGVuIGFuZCB3aHkgdG8gY2FsbCBgcGh5X3NmcF9wcm9iZWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBjb25kaXRpb25zIHdoaWNoIGFyZSB0cmlnZ2VyaW5nIHRoZSBwcm9iZS4gSXMgaXQgaGFyZHdhcmUtYmFzZWQgZGV0ZWN0aW9uPyBJcyBpdCBjb25maWd1cmF0aW9uLWRyaXZlbj8gV2hhdCdzIHRoZSB0cmlnZ2VyaW5nIGxvZ2ljPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIHVuZGVyc3RhbmQgd2hlbiB0aGUgcHJvYmUgaXMgdHJpZ2dlcmVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMjk1LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MzoxOC4wMDY1MjM3NjRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTE3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTA3LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIzNTA3OlxcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3BvcnRzKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMzUwODpcXHR7XFxuMzUwOTpcXHRcXHRfX0VUSFRPT0xfREVDTEFSRV9MSU5LX01PREVfTUFTSyhwb3J0c19zdXBwb3J0ZWQpO1xcbjM1MTA6XFx0XFx0c3RydWN0IHBoeV9wb3J0ICpwb3J0O1xcbjM1MTE6XFx0XFx0aW50IHJldDtcXG4zNTEyOlxcdFxcbjM1MTM6XFx0XFx0cmV0ID0gb2ZfcGh5X3BvcnRzKHBoeWRldik7XFxuMzUxNDpcXHRcXHRpZiAocmV0KVxcbjM1MTU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4zNTE2OlxcdFxcbjM1MTc6XFx0XFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xcbjM1MTg6XFx0XFx0aWYgKHJldClcXG4zNTE5OlxcdFxcdFxcdGdvdG8gb3V0O1xcbjM1MjA6XFx0XFxuMzUyMTpcXHRcXHRpZiAocGh5ZGV2LVxcdTAwM2VuX3BvcnRzIFxcdTAwM2MgcGh5ZGV2LVxcdTAwM2VtYXhfbl9wb3J0cykge1xcbjM1MjI6XFx0XFx0XFx0cmV0ID0gcGh5X2RlZmF1bHRfc2V0dXBfc2luZ2xlX3BvcnQocGh5ZGV2KTtcXG4zNTIzOlxcdFxcdFxcdGlmIChyZXQpXFxuMzUyNDpcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4zNTI1OlxcdFxcdH1cXG4zNTI2OlxcdFxcbjM1Mjc6XFx0XFx0bGlua21vZGVfemVybyhwb3J0c19zdXBwb3J0ZWQpO1xcbjM1Mjg6XFx0XFxuMzUyOTpcXHRcXHQvKiBBZ2dyZWdhdGUgdGhlIHN1cHBvcnRlZCBtb2Rlcywgd2hpY2ggYXJlIG1hZGUtdXAgb2YgOlxcbjM1MzA6XFx0XFx0ICogIC0gV2hhdCB0aGUgUEhZIGl0c2VsZiBzdXBwb3J0c1xcbjM1MzE6XFx0XFx0ICogIC0gV2hhdCB0aGUgc3VtIG9mIGFsbCBwb3J0cyBzdXBwb3J0XFxuMzUzMjpcXHRcXHQgKi9cXG4zNTMzOlxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeWRldi1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuMzUzNDpcXHRcXHRcXHRpZiAocG9ydC1cXHUwMDNlYWN0aXZlKVxcbjM1MzU6XFx0XFx0XFx0XFx0bGlua21vZGVfb3IocG9ydHNfc3VwcG9ydGVkLCBwb3J0c19zdXBwb3J0ZWQsXFxuMzUzNjpcXHRcXHRcXHRcXHRcXHQgICAgcG9ydC1cXHUwMDNlc3VwcG9ydGVkKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MTguMDA2NzE2ODg0WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODg2MjQwMTExMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhbmQgd3JpdHRlbiBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk15IExpbmUgb2YgUmVhc29uaW5nOiBQSFkgUHJvYmUgdG8gUG9ydCBTZXR1cCoqXG5cbkFscmlnaHQsIHNvIHRoZSBhcmNoaXRlY3R1cmUgSSdtIHdvcmtpbmcgd2l0aCBpcyBzdWNoIHRoYXQgYHBoeV9zZXR1cF9wb3J0c2AgaXMgaW50cmluc2ljYWxseSBsaW5rZWQgdG8gYHBoeV9wcm9iZWAuIFRoYXQncyB0aGUgY29yZSBvZiBpdC4gSSBzZWUgdGhpcyBhcyBhIGNsZWFuLCBtb2R1bGFyIGRlc2lnbi4gVGhlIGltcGxpY2F0aW9uIGlzIGNsZWFyOiB0aGUgaGFyZHdhcmUgcHJvYmluZyBwcm9jZXNzLCBvcmNoZXN0cmF0ZWQgYnkgYHBoeV9wcm9iZWAsIGRpcmVjdGx5IHJlbGllcyBvbiB0aGUgc3Vic2VxdWVudCBzZXR1cCBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgcGh5c2ljYWwgcG9ydHMgb2YgdGhhdCBQSFksIGhhbmRsZWQgYnkgYHBoeV9zZXR1cF9wb3J0c2AuIFRoaXMgc3VnZ2VzdHMgYSBzdGFuZGFyZCB0d28tc3RlcCBpbml0aWFsaXphdGlvbiBwYXJhZGlnbTogRmlyc3QsIHdlICpkaXNjb3ZlciogdGhlIFBIWSwgYW5kIHRoZW4sICpjb25maWd1cmUqIHRoZSBwb3J0cyBiYXNlZCBvbiB3aGF0IHRoZSBwcm9iZSBpZGVudGlmaWVzLlxuXG5JIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHRoZSBwb3RlbnRpYWwgZm9yIGVycm9yIHByb3BhZ2F0aW9uIGhlcmUuIEEgZmFpbHVyZSBpbiBgcGh5X3Byb2JlYCB3b3VsZCAoYW5kIHNob3VsZCEpIGlkZWFsbHkgcHJldmVudCB0aGUgY2FsbCB0byBgcGh5X3NldHVwX3BvcnRzYCBhbHRvZ2V0aGVyLiBDb252ZXJzZWx5LCBhIGZhaWx1cmUgaW4gcG9ydCBzZXR1cCBpcyBsaWtlbHkgZGVwZW5kZW50IG9uIGEgc3VjY2Vzc2Z1bCBwcm9iZS4gVGhlcmVmb3JlLCBteSBkZWJ1ZyB3b3JrZmxvdyB3aWxsIHByaW9yaXRpemUgdW5kZXJzdGFuZGluZyB0aGUgb3V0Y29tZXMgb2YgYHBoeV9wcm9iZWAsIGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IG1heSBiZSBpbmZsdWVuY2luZyBgcGh5X3NldHVwX3BvcnRzYC4gQW55IGRlYnVnZ2luZyB3aWxsLCBvZiBjb3Vyc2UsIGZpcnN0IGZvY3VzIG9uIGVycm9yIGNoZWNraW5nIGluIHRoZSBwcm9iZS4gQXJlIHdlIHByb2JpbmcgdGhlIHJpZ2h0IGhhcmR3YXJlPyBXaGF0J3MgdGhlIGVycm9yIGNvZGUgcmV0dXJuZWQgYnkgYHBoeV9wcm9iZWA/IFdoYXQgaW5mb3JtYXRpb24gaXMgYHBoeV9wcm9iZWAgc3VwcG9zZWQgdG8gaGF2ZSBzZXQgdXAgcHJpb3IgdG8gdGhlIGNhbGwgdG8gYHBoeV9zZXR1cF9wb3J0c2A/IFRob3NlIGFyZSB0aGUga2V5IHF1ZXN0aW9ucy4gVW5kZXJzdGFuZGluZyB0aGF0IHJlbGF0aW9uc2hpcCBpcyB0aGUgc3RhcnRpbmcgcG9pbnQgZm9yIGVmZmVjdGl2ZSB0cm91Ymxlc2hvb3RpbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTgsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjI2Ljg2OTEyMDEwNloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQ2NDM0NTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInBoeV9zZXR1cF9wb3J0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzQ2Mj1zdGF0aWMgaW50IG9mX3BoeV9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTA2LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzUwNzpzdGF0aWMgaW50IHBoeV9zZXR1cF9wb3J0cyhzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUwOC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM2NTM9c3RhdGljIGludCBwaHlfcHJvYmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzEyLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzcxMzpcXHRlcnIgPSBwaHlfc2V0dXBfcG9ydHMocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3MTQtXFx0aWYgKGVycilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MjcuMjE1NTYwMzc3WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTA2ODg0NjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRml4aW5nIGEgUEhZIFByb2JlIEVycm9yIFBhdGgqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgcGh5X3Byb2JlYCwgdGhlIHByb2JlIGZ1bmN0aW9uIGZvciBQSFkgZGV2aWNlcy4gSSBrbm93IHRoaXMgZ2V0cyBjYWxsZWQgZHVyaW5nIG5ldHdvcmsgZGV2aWNlIGluaXRpYWxpemF0aW9uIOKAkyBzcGVjaWZpY2FsbHksIHdoZW4gYSBQSFkgaXMgYmVpbmcgcHJvYmVkLiBUaGUgcGF0Y2ggaXMgYWRkcmVzc2luZyBhIGZsYXcgaW4gYHBoeV9zZnBfcHJvYmVgLiBJdCBzZWVtcyBsaWtlLCBpbiB0aGUgZXJyb3IgcGF0aCBvZiBgcGh5X3NldHVwX3NmcF9wb3J0YCwgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBpc24ndCBiZWluZyBwcm9wZXJseSBjbGVhbmVkIHVwIGlmIHRoYXQgZnVuY3Rpb24gZmFpbHMuIFRoYXQncyBhIGNsYXNzaWMgcmVzb3VyY2UgbGVhayBpc3N1ZSwgZWFzaWx5IGZpeGVkLiBUaGUgZ29vZCBuZXdzIGlzLCB0aGlzIHBhdGggaXMgZGVmaW5pdGVseSByZWFjaGFibGUsIG1lYW5pbmcgaXQncyBhIHJlYWwgYnVnLiBOb3csIHRoZSBxdWVzdGlvbiBpcywgd2hhdCBjb25maWcgb3B0aW9ucyB0cmlnZ2VyIHRoaXM/IEkgbmVlZCB0byBjaGVjayBlaXRoZXIgYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCBvciBgZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlYCB0byBkZXRlcm1pbmUgaWYgd2UgYXJlIGxvb2tpbmcgYXQgYENPTkZJR19QSFlMSUJgIG9yIGBDT05GSUdfUEhZX0RFVklDRWAuIFRoYXQgd2lsbCBjbGFyaWZ5IHdoYXQncyBhY3R1YWxseSBuZWVkZWQgdG8gdHJpZ2dlciB0aGlzIGNvZGUgYW5kIHRlc3QgdGhlIGZpeCB0aG9yb3VnaGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjAwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjMwLjkwNjI1MTUyMloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTk3MDU4MTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicGh5X2RldmljZS5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMy1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6NDpsaWJwaHkteVxcdFxcdFxcdDo9IHBoeS5vIHBoeS1jNDUubyBwaHktY29yZS5vIHBoeV9kZXZpY2UubyBcXFxcXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTUtXFx0XFx0XFx0XFx0ICAgbGlua21vZGUubyBwaHlfbGlua190b3BvbG9neS5vIFxcXFxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTM6MzAuOTY1OTgwNzI5WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyOTU4Nzg3MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVsdmluZyBpbnRvIHRoZSBGb3VuZGF0aW9ucyBvZiBgbGlicGh5YCoqXG5cblNvLCB0aGUgcXVlc3Rpb24gaXMsIHdoYXQgKnJlYWxseSogZW5hYmxlcyBgbGlicGh5YD8gSXQncyBhIGZ1bmRhbWVudGFsIHF1ZXN0aW9uIHRoYXQgd2FycmFudHMgY2FyZWZ1bCBjb25zaWRlcmF0aW9uLiBJIG5lZWQgdG8gdW5wYWNrIHRoZSBjb3JlIGNvbXBvbmVudHMgdGhhdCBhbGxvdyB0aGlzIGxpYnJhcnkgdG8gZnVuY3Rpb24gZWZmZWN0aXZlbHkgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgUEhZIGRlc2lnbiBhbmQgaW1wbGVtZW50YXRpb24uIEkga25vdyBpdCdzIG5vdCBtYWdpYzsgdGhlcmUgaGFzIHRvIGJlIGEgcm9idXN0IGFyY2hpdGVjdHVyZSBhdCBwbGF5LlxuXG5NeSBpbml0aWFsIHRob3VnaHRzIGltbWVkaWF0ZWx5IGdyYXZpdGF0ZSB0b3dhcmRzIHRoZSBhYnN0cmFjdGlvbiBsZXZlbHMuIFdoYXQgbGF5ZXJzIGRvZXMgYGxpYnBoeWAgaW50cm9kdWNlIHRvIHNpbXBsaWZ5IHRoZSBjb21wbGV4aXR5IG9mIHRoZSB1bmRlcmx5aW5nIGhhcmR3YXJlPyBJcyBpdCBwcm92aWRpbmcgYSBzdGFuZGFyZGl6ZWQgaW50ZXJmYWNlIGZvciBhY2Nlc3NpbmcgdmFyaW91cyBQSFkgZnVuY3Rpb25zLCByZWdhcmRsZXNzIG9mIHRoZSBzcGVjaWZpYyB2ZW5kb3Igb3IgdGVjaG5vbG9neT8gSWYgc28sIHdoYXQgYXJlIHRoZSBrZXkgQVBJIGNhbGxzIGFuZCBkYXRhIHN0cnVjdHVyZXMgdGhhdCBkZWZpbmUgdGhpcyBpbnRlcmZhY2U/IFdoYXQga2luZCBvZiBmbGV4aWJpbGl0eSBhbmQgY29uZmlndXJhYmlsaXR5IGRvZXMgaXQgb2ZmZXI/IERvZXMgaXQgZW5hYmxlIHBvcnRhYmlsaXR5IGJldHdlZW4gZGlmZmVyZW50IHNpbGljb24gaW1wbGVtZW50YXRpb25zPyBUaGlzIGlzIGNydWNpYWwgZm9yIHJlYWwtd29ybGQgYXBwbGljYXRpb24sIGFmdGVyIGFsbC5cblxuVGhlbiBJIGdldCB0byB0aGlua2luZyBhYm91dCBoYXJkd2FyZSBkZXBlbmRlbmNpZXMuIEhvdyBkb2VzIGl0IGludGVyYWN0IHdpdGggdGhlIHNwZWNpZmljIFBIWSBjb3JlcyBhbmQgdHJhbnNjZWl2ZXJzPyBJcyB0aGVyZSBhIGNsZWFybHkgZGVmaW5lZCBoYXJkd2FyZSBhYnN0cmFjdGlvbiBsYXllciAoSEFMKSB0aGF0IHNoaWVsZHMgdGhlIGhpZ2hlci1sZXZlbCBjb2RlIGZyb20gdGhlIG51YW5jZXMgb2YgcmVnaXN0ZXIgbWFwcyBhbmQgc2lnbmFsIHRpbWluZ3M/IEFyZSB0aGVyZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgdG8gYWRqdXN0IHRvIGRpZmZlcmVudCBQSFkgaW1wbGVtZW50YXRpb25zPyBBIHdlbGwtZGVmaW5lZCBIQUwgaXMgZXNzZW50aWFsIGZvciBtYWludGFpbmFiaWxpdHkgYW5kIGFkYXB0YWJpbGl0eS5cblxuVGhpbmtpbmcgZGVlcGVyLCBob3cgZG9lcyBpdCBtYW5hZ2UgY2xvY2tpbmcgYW5kIHBvd2VyIGRvbWFpbnM/IERvZXMgaXQgcHJvdmlkZSBtZWNoYW5pc21zIGZvciBjbG9jayBtYW5hZ2VtZW50LCBwb3dlci11cCBzZXF1ZW5jaW5nLCBhbmQgcG93ZXItZG93biBjb250cm9sPyBUaGlzIGlzIGVzc2VudGlhbCBmb3IgcG93ZXIgZWZmaWNpZW5jeSwgZXNwZWNpYWxseSBpbiBtb2Rlcm4gaW50ZWdyYXRlZCBzeXN0ZW1zLiBJJ2QgbmVlZCB0byBjb25zaWRlciB3aGF0IG9wdGlvbnMgZXhpc3QgZm9yIGNsb2NrIG1hbmFnZW1lbnQuIFdoYXQgYXJlIHRoZSBrZXkgY29uc2lkZXJhdGlvbnMgd2hlbiBpdCBjb21lcyB0byBwb3dlciBtYW5hZ2VtZW50PyBBcmUgdGhlc2UgaGFuZGxlZCB3aXRoaW4gdGhlIGxpYnJhcnkgb3IgZXh0ZXJuYWwgdG8gaXQ/XG5cbkFuZCBmaW5hbGx5LCB3aGF0IGFib3V0IGVycm9yIGhhbmRsaW5nIGFuZCBkZWJ1Z2dpbmc/IERvZXMgYGxpYnBoeWAgb2ZmZXIgcm9idXN0IGVycm9yIGNoZWNraW5nIGFuZCByZXBvcnRpbmcgbWVjaGFuaXNtcz8gQXJlIHRoZXJlIGNvbXByZWhlbnNpdmUgZGVidWdnaW5nIHRvb2xzLCBzdWNoIGFzIHRyYWNpbmcgY2FwYWJpbGl0aWVzIG9yIGJ1aWx0LWluIHRlc3QgbW9kZXMsIHRoYXQgYWxsb3cgZGV2ZWxvcGVycyB0byBpZGVudGlmeSBhbmQgcmVzb2x2ZSBpc3N1ZXMgcXVpY2tseT8gRGVidWdnaW5nIGlzIGEgbWFqb3IgYm90dGxlbmVjayBpbiBhbnkgZW1iZWRkZWQgc3lzdGVtLiBXaGF0IHN1cHBvcnQgZG9lcyBgbGlicGh5YCBvZmZlciBpbiB0aGlzIGRvbWFpbj8gVGhpcyBpcyB2aXRhbCBmb3IgYW55IHByb2R1Y3Rpb24tcmVhZHkgbGlicmFyeS4gSSdkIHdhbnQgdG8gdW5kZXJzdGFuZCB0aGUgZGVzaWduIHRyYWRlb2ZmcyBpbiB0aGlzIGFyZWEuXG5cblVsdGltYXRlbHksIHVuZGVyc3RhbmRpbmcgdGhlIFwid2hhdCBlbmFibGVzXCIgdGhpcyBsaWJyYXJ5IGlzIGFib3V0IGRpc3NlY3RpbmcgdGhlIGFyY2hpdGVjdHVyYWwgY2hvaWNlcywgdGhlIGFic3RyYWN0aW9uIGxheWVycywgdGhlIGhhcmR3YXJlIGludGVyYWN0aW9ucywgYW5kIHRoZSBlcnJvciBoYW5kbGluZyBzdHJhdGVnaWVzIHRoYXQgbWFrZSBpdCBhIHVzZWZ1bCB0b29sIGluIHRoZSB3b3JsZCBvZiBQSFkgZGV2ZWxvcG1lbnQuIFRoZXNlIGFyZSB0aGUgZnVuZGFtZW50YWwgZGVzaWduIHByaW5jaXBsZXMgdGhhdCBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUwNTUsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjUzOjM1LjI2MTg2MTk1MloiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyNzMxNDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImxpYnBoeVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjQ6bGlicGh5LXlcXHRcXHRcXHQ6PSBwaHkubyBwaHktYzQ1Lm8gcGh5LWNvcmUubyBwaHlfZGV2aWNlLm8gXFxcXFxcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS01LVxcdFxcdFxcdFxcdCAgIGxpbmttb2RlLm8gcGh5X2xpbmtfdG9wb2xvZ3kubyBcXFxcXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU9MTI9ZW5kaWZcXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGUtMTMtXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE0OmxpYnBoeS0kKENPTkZJR19TV1BIWSlcXHRcXHQrPSBzd3BoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE1OmxpYnBoeS0kKENPTkZJR19MRURfVFJJR0dFUl9QSFkpXFx0Kz0gcGh5X2xlZF90cmlnZ2Vycy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlOjE2OmxpYnBoeS0kKENPTkZJR19PUEVOX0FMTElBTkNFX0hFTFBFUlMpICs9IG9wZW5fYWxsaWFuY2VfaGVscGVycy5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTE3LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlPTE5PW9iai0kKENPTkZJR19QSFlMSU5LKVxcdFxcdCs9IHBoeWxpbmsub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyMDpvYmotJChDT05GSUdfUEhZTElCKVxcdFxcdCs9IGxpYnBoeS5vXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTIxLW9iai0kKENPTkZJR19QSFlMSUIpXFx0XFx0Kz0gbWRpb19kZXZyZXMub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1MzozNS40MTQ1OTg0OTRaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzgzNTA5MjMzMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBQSFlMSUIgQ29uZmlndXJhdGlvbiBhbmQgU0ZQIERlcGVuZGVuY3kqKlxuXG5Pa2F5LCBzbyBJJ20gZm9jdXNpbmcgb24gYENPTkZJR19QSFlMSUJgIOKAkyB0aGF0J3MgdGhlIGtleSBjb25maWd1cmF0aW9uIGl0ZW0gaGVyZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJhY3RzLCBzcGVjaWZpY2FsbHkgd2l0aCBTRlAuIEkgc2VlIGBwaHlfc2ZwX3Byb2JlYCB1dGlsaXplcyBgc2ZwX2J1c19maW5kX2Z3bm9kZWAsIGBzZnBfYnVzX2FkZF91cHN0cmVhbWAsIGFuZCBgc2ZwX2J1c19kZWxfdXBzdHJlYW1gLCB3aGljaCBhcmUgYWxsIFNGUC1yZWxhdGVkIGZ1bmN0aW9ucy4gVGhpcyBtYWtlcyBtZSBzdXNwZWN0IGEgc3Ryb25nIGRlcGVuZGVuY3kuIFRvIGJlIHN1cmUsIEkgbmVlZCB0byBjaGVjayB0aGUgc291cmNlLiBJJ20gZ29pbmcgdG8gbG9vayB3aXRoaW4gYGRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNgIHRvIHNlZSBpZiB0aGVyZSBhcmUgYW55IGAjaWZkZWZgIG9yIGBJU19FTkFCTEVEYCBkaXJlY3RpdmVzIHRoYXQgY29uZGl0aW9uYWxseSBjb21waWxlIHNlY3Rpb25zIHJlbGF0ZWQgdG8gU0ZQIGJhc2VkIG9uIHNvbWUgc29ydCBvZiBtYWNyby4gVGhpcyBzaG91bGQgZGVmaW5pdGl2ZWx5IHRlbGwgbWUgd2hldGhlciBvciBub3QgU0ZQIGZ1bmN0aW9uYWxpdHkgaXMgdGlnaHRseSBjb3VwbGVkIHRvIGBDT05GSUdfUEhZTElCYCBvciBpZiBpdCdzIHBvdGVudGlhbGx5IG1vZHVsYXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHRoaXMgU0ZQIGxvZ2ljIGlzIGNvbXBpbGVkIGluIHdpdGggdGhlIFBIWUxJQiBjb3JlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1OTE2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6MTMuNzY1NTI0MDI2WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODMzMzUxMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNy0jaW5jbHVkZSBcXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODojaW5jbHVkZSBcXHUwMDNjbGludXgvc2ZwLmhcXHUwMDNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zOS0jaW5jbHVkZSBcXHUwMDNjbGludXgvc2tidWZmLmhcXHUwMDNlXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE0Nzc9c3RhdGljIERFVklDRV9BVFRSX1JPKHBoeV9zdGFuZGFsb25lKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ3OS0vKipcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0ODA6ICogcGh5X3NmcF9jb25uZWN0X3BoeSAtIENvbm5lY3QgdGhlIFNGUCBtb2R1bGUncyBQSFkgdG8gdGhlIHVwc3RyZWFtIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ4MS0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ4OC0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE0ODk6c3RhdGljIGludCBwaHlfc2ZwX2Nvbm5lY3RfcGh5KHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTQ5MC17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MDAtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTAxOiAqIHBoeV9zZnBfZGlzY29ubmVjdF9waHkgLSBEaXNjb25uZWN0IHRoZSBTRlAgbW9kdWxlJ3MgUEhZIGZyb20gdGhlIHVwc3RyZWFtIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwMi0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHVwc3RyZWFtIHBoeSBkZXZpY2VcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUwOS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MTA6c3RhdGljIHZvaWQgcGh5X3NmcF9kaXNjb25uZWN0X3BoeSh2b2lkICp1cHN0cmVhbSwgc3RydWN0IHBoeV9kZXZpY2UgKnBoeSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MTEte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTE5LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMDogKiBwaHlfc2ZwX2F0dGFjaCAtIGF0dGFjaCB0aGUgU0ZQIGJ1cyB0byB0aGUgUEhZIHVwc3RyZWFtIG5ldHdvcmsgZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTIxLSAqIEB1cHN0cmVhbTogcG9pbnRlciB0byB0aGUgcGh5IGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUyMjogKiBAYnVzOiBzZnAgYnVzIHJlcHJlc2VudGluZyBjYWdlIGJlaW5nIGF0dGFjaGVkXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTIzLSAqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTI0OiAqIFRoaXMgaXMgdXNlZCB0byBmaWxsIGluIHRoZSBzZnBfdXBzdHJlYW1fb3BzIC5hdHRhY2ggbWVtYmVyLlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUyNS0gKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1MjY6c3RhdGljIHZvaWQgcGh5X3NmcF9hdHRhY2godm9pZCAqdXBzdHJlYW0sIHN0cnVjdCBzZnBfYnVzICpidXMpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTI3LXtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMC1cXHRpZiAocGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTMxOlxcdFxcdHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTUzMjpcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXNfYXR0YWNoZWQgPSB0cnVlO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzMy19XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1MzUtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTM2OiAqIHBoeV9zZnBfZGV0YWNoIC0gZGV0YWNoIHRoZSBTRlAgYnVzIGZyb20gdGhlIFBIWSB1cHN0cmVhbSBuZXR3b3JrIGRldmljZVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzNy0gKiBAdXBzdHJlYW06IHBvaW50ZXIgdG8gdGhlIHBoeSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1Mzg6ICogQGJ1czogc2ZwIGJ1cyByZXByZXNlbnRpbmcgY2FnZSBiZWluZyBhdHRhY2hlZFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTUzOS0gKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0MDogKiBUaGlzIGlzIHVzZWQgdG8gZmlsbCBpbiB0aGUgc2ZwX3Vwc3RyZWFtX29wcyAuZGV0YWNoIG1lbWJlci5cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDEtICovXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQyOnN0YXRpYyB2b2lkIHBoeV9zZnBfZGV0YWNoKHZvaWQgKnVwc3RyZWFtLCBzdHJ1Y3Qgc2ZwX2J1cyAqYnVzKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU0My17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NDYtXFx0aWYgKHBoeWRldi1cXHUwMDNlYXR0YWNoZWRfZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU0NzpcXHRcXHRwaHlkZXYtXFx1MDAzZWF0dGFjaGVkX2Rldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTQ4OlxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1c19hdHRhY2hlZCA9IGZhbHNlO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU0OS19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTUwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU1MTpzdGF0aWMgaW50IHBoeV9zZnBfbW9kdWxlX2luc2VydCh2b2lkICp1cHN0cmVhbSwgY29uc3Qgc3RydWN0IHNmcF9lZXByb21faWQgKmlkKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Mi17XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTUzOlxcdF9fRVRIVE9PTF9ERUNMQVJFX0xJTktfTU9ERV9NQVNLKHNmcF9zdXBwb3J0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTQtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU1NTpcXHRjb25zdCBzdHJ1Y3Qgc2ZwX21vZHVsZV9jYXBzICpjYXBzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU1Ni1cXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQ7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NTktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNTYwOlxcdGxpbmttb2RlX3plcm8oc2ZwX3N1cHBvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2MS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NjI6XFx0cG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NjMtXFx0aWYgKCFwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTY1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2NjpcXHRjYXBzID0gc2ZwX2dldF9tb2R1bGVfY2FwcyhwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU2Ny1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1Njg6XFx0bGlua21vZGVfYW5kKHNmcF9zdXBwb3J0LCBwb3J0LVxcdTAwM2VzdXBwb3J0ZWQsIGNhcHMtXFx1MDAzZWxpbmtfbW9kZXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU2OTpcXHRpZiAobGlua21vZGVfZW1wdHkoc2ZwX3N1cHBvcnQpKSB7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTcwLVxcdFxcdGRldl9lcnIoXFx1MDAyNnBoeWRldi1cXHUwMDNlbWRpby5kZXYsIFxcXCJpbmNvbXBhdGlibGUgU0ZQIG1vZHVsZSBpbnNlcnRlZCwgbm8gY29tbW9uIGxpbmttb2RlXFxcXG5cXFwiKTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTU3My1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE1NzQ6XFx0aWZhY2UgPSBzZnBfc2VsZWN0X2ludGVyZmFjZShwaHlkZXYtXFx1MDAzZXNmcF9idXMsIHNmcF9zdXBwb3J0KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1NzUtXFx0aWYgKGlmYWNlID09IFBIWV9JTlRFUkZBQ0VfTU9ERV9OQSkge1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTg5LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MDpzdGF0aWMgdm9pZCBwaHlfc2ZwX21vZHVsZV9yZW1vdmUodm9pZCAqdXBzdHJlYW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTkxLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE1OTItXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTU5MzpcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNTk0LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAxLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwMjpzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfdXAodm9pZCAqdXBzdHJlYW0pXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjAzLXtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MDQtXFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiA9IHVwc3RyZWFtO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYwNTpcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfZ2V0X3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjA2LVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjEwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYxMTpzdGF0aWMgdm9pZCBwaHlfc2ZwX2xpbmtfZG93bih2b2lkICp1cHN0cmVhbSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTIte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTYxMy1cXHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2ID0gdXBzdHJlYW07XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjE0OlxcdHN0cnVjdCBwaHlfcG9ydCAqcG9ydCA9IHBoeV9nZXRfc2ZwX3BvcnQocGh5ZGV2KTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTUtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MTktXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjIwOnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2ZwX3Vwc3RyZWFtX29wcyBzZnBfcGh5ZGV2X29wcyA9IHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjE6XFx0LmF0dGFjaCA9IHBoeV9zZnBfYXR0YWNoLFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyMjpcXHQuZGV0YWNoID0gcGh5X3NmcF9kZXRhY2gsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjIzOlxcdC5tb2R1bGVfaW5zZXJ0ID0gcGh5X3NmcF9tb2R1bGVfaW5zZXJ0LFxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTYyNDpcXHQubW9kdWxlX3JlbW92ZSA9IHBoeV9zZnBfbW9kdWxlX3JlbW92ZSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2MjU6XFx0LmxpbmtfdXAgPSBwaHlfc2ZwX2xpbmtfdXAsXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNjI2OlxcdC5saW5rX2Rvd24gPSBwaHlfc2ZwX2xpbmtfZG93bixcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjc6XFx0LmNvbm5lY3RfcGh5ID0gcGh5X3NmcF9jb25uZWN0X3BoeSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2Mjg6XFx0LmRpc2Nvbm5lY3RfcGh5ID0gcGh5X3NmcF9kaXNjb25uZWN0X3BoeSxcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2MjktfTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MTY2Nj1zdGF0aWMgdm9pZCBwaHlfZGVsX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldiwgc3RydWN0IHBoeV9wb3J0ICpwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNjc1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTY3NjpzdGF0aWMgaW50IHBoeV9zZXR1cF9zZnBfcG9ydChzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTY3Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTAtXFx0cG9ydC1cXHUwMDNlaXNfbWlpID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE2OTE6XFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE2OTItXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDMtLyoqXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzA0OiAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDUtICogQHBoeWRldjogUG9pbnRlciB0byBwaHlfZGV2aWNlXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzA2LSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwNzpzdGF0aWMgaW50IHBoeV9zZnBfcHJvYmUoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MDgte1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcwOTpcXHRzdHJ1Y3Qgc2ZwX2J1cyAqYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxMC1cXHRpbnQgcmV0ID0gMDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxMi1cXHRpZiAocGh5ZGV2LVxcdTAwM2VtZGlvLmRldi5md25vZGUpIHtcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTM6XFx0XFx0YnVzID0gc2ZwX2J1c19maW5kX2Z3bm9kZShwaHlkZXYtXFx1MDAzZW1kaW8uZGV2LmZ3bm9kZSk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzE0LVxcdFxcdGlmIChJU19FUlIoYnVzKSlcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxNi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTc6XFx0XFx0cGh5ZGV2LVxcdTAwM2VzZnBfYnVzID0gYnVzO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcxOC1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MTk6XFx0XFx0cmV0ID0gc2ZwX2J1c19hZGRfdXBzdHJlYW0oYnVzLCBwaHlkZXYsIFxcdTAwMjZzZnBfcGh5ZGV2X29wcyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzIwOlxcdFxcdHNmcF9idXNfcHV0KGJ1cyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzIxLVxcdH1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE3MjItXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxNzIzOlxcdGlmICghcmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cylcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjE3MjQ6XFx0XFx0cmV0ID0gcGh5X3NldHVwX3NmcF9wb3J0KHBoeWRldik7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0xNzI1LVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNjpcXHRpZiAocmV0IFxcdTAwMjZcXHUwMDI2IHBoeWRldi1cXHUwMDNlc2ZwX2J1cykge1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyNzpcXHRcXHRzZnBfYnVzX2RlbF91cHN0cmVhbShwaHlkZXYtXFx1MDAzZXNmcF9idXMpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MTcyODpcXHRcXHRwaHlkZXYtXFx1MDAzZXNmcF9idXMgPSBOVUxMO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMTcyOS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTE3NTQ9aW50IHBoeV9hdHRhY2hfZGlyZWN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTMtXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE0OlxcdFxcdGlmIChwaHlkZXYtXFx1MDAzZXNmcF9idXNfYXR0YWNoZWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzoxODE1OlxcdFxcdFxcdGRldi1cXHUwMDNlc2ZwX2J1cyA9IHBoeWRldi1cXHUwMDNlc2ZwX2J1cztcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTE4MTYtXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jPTM1MDc9c3RhdGljIGludCBwaHlfc2V0dXBfcG9ydHMoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUxNi1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM1MTc6XFx0cmV0ID0gcGh5X3NmcF9wcm9iZShwaHlkZXYpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzUxOC1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTU2LS8qKlxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU1NzogKiBwaHlfZ2V0X3NmcF9wb3J0KCkgLSBSZXR1cm5zIHRoZSBmaXJzdCB2YWxpZCBTRlAgcG9ydCBvZiBhIFBIWVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU1OC0gKiBAcGh5ZGV2OiBwb2ludGVyIHRvIHRoZSBQSFkgZGV2aWNlIHRvIGdldCB0aGUgU0ZQIHBvcnQgZnJvbVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTYyLSAqL1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzU2MzpzdHJ1Y3QgcGh5X3BvcnQgKnBoeV9nZXRfc2ZwX3BvcnQoc3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM1NjQte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNTY3LVxcdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgXFx1MDAyNnBoeWRldi1cXHUwMDNlcG9ydHMsIGhlYWQpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTY4OlxcdFxcdGlmIChwb3J0LVxcdTAwM2VhY3RpdmUgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNlaXNfc2ZwKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU2OS1cXHRcXHRcXHRyZXR1cm4gcG9ydDtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3Mi19XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNTczOkVYUE9SVF9TWU1CT0xfR1BMKHBoeV9nZXRfc2ZwX3BvcnQpO1xcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzU3NC1cXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9MzY1Mz1zdGF0aWMgaW50IHBoeV9wcm9iZShzdHJ1Y3QgZGV2aWNlICpkZXYpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM3NjctXFx0LyogUmVnaXN0ZXIgdGhlIFBIWSBMRUQgdHJpZ2dlcnMgKi9cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jOjM3Njg6XFx0aWYgKCFwaHlkZXYtXFx1MDAzZWlzX29uX3NmcF9tb2R1bGUpXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zNzY5LVxcdFxcdHBoeV9sZWRfdHJpZ2dlcnNfcmVnaXN0ZXIocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc4Mi1vdXQ6XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozNzgzOlxcdGlmICghcGh5ZGV2LVxcdTAwM2Vpc19vbl9zZnBfbW9kdWxlKVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmMtMzc4NC1cXHRcXHRwaHlfbGVkX3RyaWdnZXJzX3VucmVnaXN0ZXIocGh5ZGV2KTtcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM9Mzc5Mj1zdGF0aWMgaW50IHBoeV9yZW1vdmUoc3RydWN0IGRldmljZSAqZGV2KVxcbi0tXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODAwLVxcbmRyaXZlcnMvbmV0L3BoeS9waHlfZGV2aWNlLmM6MzgwMTpcXHRpZiAoIXBoeWRldi1cXHUwMDNlaXNfb25fc2ZwX21vZHVsZSlcXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDItXFx0XFx0cGh5X2xlZF90cmlnZ2Vyc191bnJlZ2lzdGVyKHBoeWRldik7XFxuLS1cXG5kcml2ZXJzL25ldC9waHkvcGh5X2RldmljZS5jLTM4MDctXFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODA4OlxcdHNmcF9idXNfZGVsX3Vwc3RyZWFtKHBoeWRldi1cXHUwMDNlc2ZwX2J1cyk7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYzozODA5OlxcdHBoeWRldi1cXHUwMDNlc2ZwX2J1cyA9IE5VTEw7XFxuZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuYy0zODEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDoxNC4wNDg4Nzc1NzZaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE5NTcwNzk4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgU0ZQIEJ1cyBEcml2ZXIgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBidXMgaXMgaGFuZGxlZCBpbiB0aGlzIGtlcm5lbC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSwgYW5kIEkgYmVsaWV2ZSB0aGUgY29yZSBmdW5jdGlvbmFsaXR5IHdpbGwgYmUgbG9jYXRlZCBpbiBgZHJpdmVycy9uZXQvcGh5L3NmcC1idXMuY2AuIFRoYXQncyB0aGUgbG9naWNhbCBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciB0aGUgbG93LWxldmVsIGludGVyYWN0aW9ucy5cblxuSG93ZXZlciwgYmVmb3JlIEkgZ2V0ICp0b28qIGRlZXAsIEknbGwgdGFrZSBhIHF1aWNrLCBicm9hZGVyIHZpZXcuIEknbGwgY2hlY2sgdGhlIGBkcml2ZXJzL25ldC9waHkvTWFrZWZpbGVgLiBUaGF0IGZpbGUgc2hvdWxkIHRlbGwgbWUgaWYgSSdtIG9uIHRoZSByaWdodCB0cmFjayB3aXRoIGBzZnAtYnVzLmNgLCBhbmQgaWYgdGhlcmUgYXJlIGFueSBvdGhlciByZWxhdGVkIGZpbGVzIG9yIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhd2FyZSBvZi4gVGhlIGBNYWtlZmlsZWAgc2hvdWxkIGNsZWFybHkgZGVmaW5lIGhvdyB0aGUgYHNmcGAgbW9kdWxlIGlzIGJ1aWx0IGFuZCBpZiBpdCBpbmNsdWRlcyBvciB1c2VzIGFueSBvdGhlciBmaWxlcyB0byBidWlsZCwgb3IgYW55IGRlcGVuZGVuY2llcy4gVGhhdCdzIGEgZ29vZCBwcmVsaW1pbmFyeSBzYW5pdHkgY2hlY2sgdG8gZG8uIEl0IGFsc28gbWlnaHQgcmV2ZWFsIGFueSBuYW1pbmcgY29udmVudGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNzUzLCJPdXRwdXRUb2tlbnMiOjI5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6MTcuMjQ0NTg4MDUzWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzA0ODAwNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZnBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfTkVUV09SS19QSFlfVElNRVNUQU1QSU5HKSArPSBtaWlfdGltZXN0YW1wZXIub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZS0yNS1cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6MjY6b2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAub1xcbmRyaXZlcnMvbmV0L3BoeS9NYWtlZmlsZToyNzpzZnAtb2JqLSQoQ09ORklHX1NGUClcXHRcXHQrPSBzZnAtYnVzLm9cXG5kcml2ZXJzL25ldC9waHkvTWFrZWZpbGU6Mjg6b2JqLXlcXHRcXHRcXHRcXHQrPSAkKHNmcC1vYmoteSkgJChzZnAtb2JqLW0pXFxuZHJpdmVycy9uZXQvcGh5L01ha2VmaWxlLTI5LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDoxNy4zMTE2NDE5ODhaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjI2OTk5Mjc5NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aGUgZXhwZXJ0OlxuXG4qKkludmVzdGlnYXRpbmcgU0ZQIERyaXZlciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgQ09ORklHX1NGUGAgaXMgYSBrZXkgZGVmaW5lIGhlcmUsIHRoYXQncyB0aGUgZmlyc3QgdGhpbmcgdG8gbm90ZS4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlIFNGUCBkcml2ZXIgaXMgY29uc3RydWN0ZWQgYW5kIGl0cyBkZXBlbmRlbmNpZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCB0aGVuIHRoZSBgc2ZwLWJ1cy5jYCBzb3VyY2UgZmlsZSBpcyBjb21waWxlZCBpbnRvIHRoZSBidWlsZD8gTGV0IG1lIHZlcmlmeSB0aGlzIHF1aWNrbHkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIHNwZWNpZmljIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIHNmcCBzdWJzeXN0ZW0gYXJlIGF2YWlsYWJsZSBvciBub3QsIGV2ZW4gd2l0aCB0aGUgYmFzZSBgQ09ORklHX1NGUGAgZW5hYmxlZC4gRm9yIGV4YW1wbGUsIGlzIGBzZnBfYnVzX2RlbF91cHN0cmVhbWAgYXZhaWxhYmxlIHdpdGhvdXQgYENPTkZJR19TRlBgIGRlZmluZWQ/IEkga25vdyBJIGNhbiBxdWlja2x5IGNoZWNrIHRoaXMgYnkgbG9va2luZyB0aHJvdWdoIHRoZSBoZWFkZXIgZmlsZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgaW50byBgaW5jbHVkZS9saW51eC9zZnAuaGAuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTIwMiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjQwLjAxMTU3MjQ1WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODY4NDE4NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2ZwX2J1c19kZWxfdXBzdHJlYW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9zZnAuaFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3NmcC5oPTU5ND1pbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTUtXFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpO1xcbmluY2x1ZGUvbGludXgvc2ZwLmg6NTk2OnZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cyk7XFxuaW5jbHVkZS9saW51eC9zZnAuaC01OTctY29uc3QgY2hhciAqc2ZwX2dldF9uYW1lKHN0cnVjdCBzZnBfYnVzICpidXMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9zZnAuaD02NTM9c3RhdGljIGlubGluZSBpbnQgc2ZwX2J1c19hZGRfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cywgdm9pZCAqdXBzdHJlYW0sXFxuLS1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY1OC1cXG5pbmNsdWRlL2xpbnV4L3NmcC5oOjY1OTpzdGF0aWMgaW5saW5lIHZvaWQgc2ZwX2J1c19kZWxfdXBzdHJlYW0oc3RydWN0IHNmcF9idXMgKmJ1cylcXG5pbmNsdWRlL2xpbnV4L3NmcC5oLTY2MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjQwLjI5ODQyMjk2OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDQyNjA1OTE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqQW5hbHl6aW5nIFBvdGVudGlhbCBTRlAgRGVwZW5kZW5jeSoqXG5cblJpZ2h0LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkndmUgZ290IGEgaHVuY2gg4oCTIHRoaXMgZnVuY3Rpb24gbWlnaHQgaGF2ZSBhIHN0dWIsIG9yIHBlcmhhcHMgaXQgKm5lZWRzKiBgQ09ORklHX1NGUGAgdG8gYWN0dWFsbHkgKmRvKiBhbnl0aGluZyBtZWFuaW5nZnVsLiBJdCdzIGEgY2xhc3NpYyBzY2VuYXJpbywgd29ydGggZXhwbG9yaW5nIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbk15IG5leHQgc3RlcCBpcyBjbGVhci4gTGV0J3MgZGlnIGludG8gYGluY2x1ZGUvbGludXgvc2ZwLmhgLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDY1OS4gVGhhdCdzIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBjb25kaXRpb25hbCBjb21waWxhdGlvbiBvciByZWxldmFudCBzdHJ1Y3R1cmUgZGVmaW5pdGlvbnMgdGhhdCB3b3VsZCBzaGVkIGxpZ2h0IG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGlzIGZ1bmN0aW9uIGFuZCB0aGUgYFNGUGAgY29uZmlndXJhdGlvbiBvcHRpb24uIEknbGwgYmUgbG9va2luZyBmb3IgYCNpZmRlZmAgYmxvY2tzIG9yIHNpbWlsYXIgY29uc3RydWN0cyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTc0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU0OjUwLjcyNDQ4NDc5WiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjkwMTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluY2x1ZGUvbGludXgvc2ZwLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNjQwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjQwOlxcdHtcXG4gNjQxOlxcdH1cXG4gNjQyOlxcdFxcbiA2NDM6XFx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfcHV0KHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY0NDpcXHR7XFxuIDY0NTpcXHR9XFxuIDY0NjpcXHRcXG4gNjQ3OlxcdHN0YXRpYyBpbmxpbmUgc3RydWN0IHNmcF9idXMgKlxcbiA2NDg6XFx0c2ZwX2J1c19maW5kX2Z3bm9kZShjb25zdCBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlKVxcbiA2NDk6XFx0e1xcbiA2NTA6XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDY1MTpcXHR9XFxuIDY1MjpcXHRcXG4gNjUzOlxcdHN0YXRpYyBpbmxpbmUgaW50IHNmcF9idXNfYWRkX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMsIHZvaWQgKnVwc3RyZWFtLFxcbiA2NTQ6XFx0XFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBzZnBfdXBzdHJlYW1fb3BzICpvcHMpXFxuIDY1NTpcXHR7XFxuIDY1NjpcXHRcXHRyZXR1cm4gMDtcXG4gNjU3OlxcdH1cXG4gNjU4OlxcdFxcbiA2NTk6XFx0c3RhdGljIGlubGluZSB2b2lkIHNmcF9idXNfZGVsX3Vwc3RyZWFtKHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY2MDpcXHR7XFxuIDY2MTpcXHR9XFxuIDY2MjpcXHRcXG4gNjYzOlxcdHN0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc2ZwX2dldF9uYW1lKHN0cnVjdCBzZnBfYnVzICpidXMpXFxuIDY2NDpcXHR7XFxuIDY2NTpcXHRcXHRyZXR1cm4gTlVMTDtcXG4gNjY2OlxcdH1cXG4gNjY3OlxcdCNlbmRpZlxcbiA2Njg6XFx0XFxuIDY2OTpcXHQjZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjZUMjA6NTQ6NTAuNzI0NTc2OTlaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjgyMjM2MjQyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFNGUCBEcml2ZXIgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIFNGUCBkcml2ZXIgaW5pdGlhbGl6YXRpb24gbG9naWMsIGFuZCBpdCdzIHByZXR0eSBzdHJhaWdodGZvcndhcmQsIGJ1dCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9uYWwgYmVoYXZpb3IuIElmIGBDT05GSUdfU0ZQYCBpc24ndCBlbmFibGVkLCB0aGVuIGBzZnBfYnVzX2ZpbmRfZndub2RlYCByZXR1cm5zIGBOVUxMYC4gUmlnaHQsIHRoYXQncyBleHBlY3RlZC4gSnVtcGluZyB0byB0aGUgYHBoeV9zZnBfcHJvYmVgIGZ1bmN0aW9uLCBJIGNhbiBzZWUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIHRoYXQgaGluZ2VzIG9uIHRoZSBgZndub2RlYCBwcm9wZXJ0eSBvZiB0aGUgYHBoeWRldi1cdTAwM2VtZGlvLmRldmAuXG5cbkxldCdzIGJyZWFrIGl0IGRvd246IGluc2lkZSB0aGUgYGlmIChwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlKWAgYmxvY2ssIGl0IGNhbGxzIGBzZnBfYnVzX2ZpbmRfZndub2RlYC4gSWYgdGhhdCByZXR1cm5zIGEgdmFsaWQgYnVzLCBpdCBhc3NpZ25zIGl0IHRvIGBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AsIGFkZHMgYW4gdXBzdHJlYW0sIGFuZCB0aGVuIHJlbGVhc2VzIHRoZSBidXMuICBNYWtlcyBzZW5zZS4gQ3J1Y2lhbGx5LCBpZiBgQ09ORklHX1NGUGAgaXMgZGlzYWJsZWQgYW5kIGBzZnBfYnVzX2ZpbmRfZndub2RlYCByZXR1cm5zIGBOVUxMYCwgdGhlbiBgcGh5ZGV2LVx1MDAzZXNmcF9idXNgIHdpbGwgYmUgYXNzaWduZWQgYE5VTExgLlxuXG5Ob3csIGlmIGBDT05GSUdfU0ZQYCBpcyBkaXNhYmxlZCwgYW5kLCB0aGVyZWZvcmUsIGBidXNgIGlzIGBOVUxMYCwgdGhlIHN1YnNlcXVlbnQgY29uZGl0aW9uIGAhcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AgaXMgYWx3YXlzIGdvaW5nIHRvIGJlIGZhbHNlIGJlY2F1c2UgYHBoeWRldi1cdTAwM2VzZnBfYnVzYCBpcyBgTlVMTGAuIFNvIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGlzbid0IGNhbGxlZC4gVGhlIGZpbmFsIGNvbmRpdGlvbmFsLCBgcmV0IFx1MDAyNlx1MDAyNiBwaHlkZXYtXHUwMDNlc2ZwX2J1c2AsIHdpbGwgYWxzbyBiZSBmYWxzZSwgbWVhbmluZyB0aGUgY2xlYW51cCBibG9jayBpcyBuZXZlciBleGVjdXRlZC4gIFRoaXMgc2VlbXMgbG9naWNhbGx5IHNvdW5kLCBhcyB0aGUgYHNmcF9idXNgIGluZnJhc3RydWN0dXJlIGlzbid0IHRoZXJlLlxuXG5TbywgdGhlIG5ldyBjb2RlIGluc2lkZSB0aGUgYmxvY2ssIGluY2x1ZGluZyBgcGh5X3NldHVwX3NmcF9wb3J0YCBzaG91bGQgYmUgdW5yZWFjaGFibGUgdW5sZXNzIGBDT05GSUdfU0ZQYCBpcyBlbmFibGVkLCBvciByYXRoZXIsIG5vdCBkaXNhYmxlZC4gQnV0IHdhaXQsIGBDT05GSUdfU0ZQYCBpcyBhIHRyaXN0YXRlLCByaWdodD8gSSBuZWVkIHRvIGNsYXJpZnkgaWYgdGhpcyBpcyB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24sIG9yIGlmIHRoZSByZWxldmFudCBvcHRpb24gaXMgYWN0dWFsbHkgYENPTkZJR19TRlBfQlVTYC4gQmVzdCB0byBjaGVjayB0aGUgS2NvbmZpZyBmaWxlIGluIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AgdG8gYmUgc3VyZS4gSXQncyBhIGtleSBkZXRhaWwgdG8gY29uZmlybS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzODYsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDo1Ny41NDY5NDIwMjNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2NDA3MTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTRlBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9NjU9Y29uZmlnIFJVU1RfUEhZTElCX0FCU1RSQUNUSU9OU1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzItXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6NzM6Y29uZmlnIFNGUFxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTc0LVxcdHRyaXN0YXRlIFxcXCJTRlAgY2FnZSBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NDo1Ny42MjMzNTQzNjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTUzMDE5OTU1NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYENPTkZJR19TRlBgIGFuZCBQSFkgRnJhbWV3b3JrIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19TRlBgLiBUaGUgY29kZSB0aGF0J3MgcmVsZXZhbnQgdG8gbWUgaXMgYHBoeV9zZnBfcHJvYmVgLCBhbmQgaXQgbGl2ZXMgd2l0aGluIGBwaHlfZGV2aWNlLmNgLCB3aGljaCB0ZWxscyBtZSBJIG5lZWQgYm90aCBgQ09ORklHX1BIWUxJQmAgKmFuZCogYENPTkZJR19TRlBgIGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2UuXG5cbk5leHQsIEkgc2VlIHRoYXQgdGhlIGNvZGUgZXhwbGljaXRseSBleHBlY3RzIGBwaHlkZXYtXHUwMDNlbWRpby5kZXYuZndub2RlYCB0byBiZSBzZXQuIFRoYXQgc2NyZWFtcyBEZXZpY2UgVHJlZSBvciBBQ1BJLiBCYXNpY2FsbHksIHRoZSBQSFkgbmVlZHMgYSBub2RlIGFuZCBpdCBtdXN0IGJlIGNvbm5lY3RlZCB0byBhbiBTRlAgYnVzLlxuXG5Ob3cgdGhlIG1pbGxpb24tZG9sbGFyIHF1ZXN0aW9uOiBDYW4gdGhpcyBiZSBmdXp6ZWQgZWZmZWN0aXZlbHkgd2l0aCBzb21ldGhpbmcgbGlrZSBzeXprYWxsZXI/IEl0IHNlZW1zIGxpa2UgaXQgKnNob3VsZCogYmUgZnV6emFibGUsIGdpdmVuIHRoYXQgaXQncyBjb3JlIGtlcm5lbCBsb2dpYyByZWxhdGVkIHRvIHRoZSBQSFkgZnJhbWV3b3JrLiBJJ20gdGhpbmtpbmcgc3l6a2FsbGVyIGNhbiBsaWtlbHkgY3JlYXRlIHZpcnR1YWwgZGV2aWNlcywgb3IgcG90ZW50aWFsbHkgbGV2ZXJhZ2UgZGV2aWNlIHRyZWUgb3ZlcmxheXMsIHRob3VnaCBJJ20gbm90IGVudGlyZWx5IGNlcnRhaW4gYWJvdXQgaXRzIGFiaWxpdHkgdG8gZWFzaWx5IGNvbnN0cnVjdCBhbiBlbnRpcmUgU0ZQIGJ1cy4gU3RpbGwsIGBXb3J0aEZ1enppbmdgIHNob3VsZCBiZSBzZXQgdG8gdHJ1ZSBiZWNhdXNlIHRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyAoUEhZIGZyYW1ld29yaykuXG5cblRoZSBtb3JlIEkgdGhpbmsgYWJvdXQgaXQsIGBwaHlfc2ZwX3Byb2JlYCBpcyBjYWxsZWQgZHVyaW5nIHRoZSBQSFkgZGV2aWNlIHByb2JlLiBTbyB0aGUgbmV4dCBzdGVwIGlzIHdoZXRoZXIgSSBjYW4gZ2V0IHRvIGl0IGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoaW5ncyBsaWtlIGBtYWM4MDIxMV9od3NpbWAsIGBuZXRkZXZzaW1gLCBgdmV0aGAsIG9yIGB0dW5gIGRvbid0IHRvdWNoIFBIWXMsIHNvIHRob3NlIGFyZSBvdXQuIEhvd2V2ZXIsIHN5emthbGxlciAqY2FuKiBsb2FkIGEgZHVtbXkgUEhZIGRyaXZlciwgb3IgdXNlIGBtZGlvLW1vY2t1cGAsIG9yIHNpbWlsYXIgdG8gcHJvYmUgUEhZcy4gVGhhdCBtZWFucyBhIHBhdGggZXhpc3RzIVxuXG5XYWl0IGEgbWludXRlLCBkb2VzIHN5emthbGxlciBhY3R1YWxseSAqZnV6eiogUEhZcz8gVGhlIGFuc3dlciBpcyB5ZXMuIEl0IGRvZXMgdGhhdCB0aHJvdWdoIG5ldGxpbmsgYW5kIGJ5IHJlZ2lzdGVyaW5nIHZpcnR1YWwgTURJTyBidXNlcy4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoaXMgYSBiaXQuIExldCBtZSBjaGVjayBpZiB0aGVyZSBhcmUgYW55IE1ESU8gbW9ja3VwcyBvciBzaW1pbGFyLiBJIHNob3VsZCBjaGVjayBub3cgYW5kIHNlZSB3aGF0IE1ESU8gbW9ja3VwcyBhcmUgYXZhaWxhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzM4NSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NToxMi45MjUzNTgwOTdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyNDk5MjIxMSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpby4qbW9ja3VwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjEzLjA1MDM1OTc3OFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTgzNjY0ODk2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgTURJTyBEcml2ZXJzKipcblxuT2theSwgdGltZSB0byBnZXQgc3RhcnRlZC4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgaGVhcnQgb2YgdGhlIG1hdHRlciDigJMgdGhlIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3J5LiBUaGlzIGlzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGJlZ2luIG15IGludmVzdGlnYXRpb24gaW50byB0aGUgTWVkaWEgSW5kZXBlbmRlbnQgSW50ZXJmYWNlIChNRElPKSBkcml2ZXJzLiBHaXZlbiBteSBleHBlcnRpc2UsIEkgYWxyZWFkeSBrbm93IHRoaXMgZGlyZWN0b3J5IHdpbGwgbGlrZWx5IGhvdXNlIHRoZSBjb3JlIGZ1bmN0aW9uYWxpdHkgYW5kIGltcGxlbWVudGF0aW9uIGRldGFpbHMgZm9yIGludGVyZmFjaW5nIHdpdGggdmFyaW91cyBQSFlzIChQaHlzaWNhbCBMYXllciBUcmFuc2NlaXZlcnMpIGFuZCBNRElPLWNvbXBsaWFudCBkZXZpY2VzLiBJIGV4cGVjdCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgZGVmaW5lcyB0aGUgTURJTyBidXMgb3BlcmF0aW9ucywgZGV2aWNlIHByb2JpbmcsIHJlZ2lzdGVyIGFjY2VzcyByb3V0aW5lcywgYW5kIGludGVycnVwdCBoYW5kbGluZyBpZiBhcHBsaWNhYmxlLiBMZXQncyBzZWUgd2hhdCB3ZSBjYW4gZmluZCFcblxuXG4iLCJJbnB1dFRva2VucyI6MTQxNzEsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NToyOC44ODcwMTEyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImNvZGVzZWFyY2gtZGlyLWluZGV4IiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRGlyXCI6IFwiZHJpdmVycy9uZXQvbWRpby9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWNwaV9tZGlvLmNcIixcbiAgICBcImZ3bm9kZV9tZGlvLmNcIixcbiAgICBcIm1kaW8tYWlyb2hhLmNcIixcbiAgICBcIm1kaW8tYXNwZWVkLmNcIixcbiAgICBcIm1kaW8tYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tYmNtLXVuaW1hYy5jXCIsXG4gICAgXCJtZGlvLWJpdGJhbmcuY1wiLFxuICAgIFwibWRpby1jYXZpdW0uY1wiLFxuICAgIFwibWRpby1jYXZpdW0uaFwiLFxuICAgIFwibWRpby1ncGlvLmNcIixcbiAgICBcIm1kaW8taGlzaS1mZW1hYy5jXCIsXG4gICAgXCJtZGlvLWkyYy5jXCIsXG4gICAgXCJtZGlvLWlwcTQwMTkuY1wiLFxuICAgIFwibWRpby1pcHE4MDY0LmNcIixcbiAgICBcIm1kaW8tbW94YXJ0LmNcIixcbiAgICBcIm1kaW8tbXNjYy1taWltLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbS1pcHJvYy5jXCIsXG4gICAgXCJtZGlvLW11eC1iY202MzY4LmNcIixcbiAgICBcIm1kaW8tbXV4LWdwaW8uY1wiLFxuICAgIFwibWRpby1tdXgtbWVzb24tZzEyYS5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1neGwuY1wiLFxuICAgIFwibWRpby1tdXgtbW1pb3JlZy5jXCIsXG4gICAgXCJtZGlvLW11eC1tdWx0aXBsZXhlci5jXCIsXG4gICAgXCJtZGlvLW11eC5jXCIsXG4gICAgXCJtZGlvLW12dXNiLmNcIixcbiAgICBcIm1kaW8tb2N0ZW9uLmNcIixcbiAgICBcIm1kaW8tcGljNjRocHNjLmNcIixcbiAgICBcIm1kaW8tcmVhbHRlay1ydGw5MzAwLmNcIixcbiAgICBcIm1kaW8tcmVnbWFwLmNcIixcbiAgICBcIm1kaW8tc3VuNGkuY1wiLFxuICAgIFwibWRpby10aHVuZGVyLmNcIixcbiAgICBcIm1kaW8teGdlbmUuY1wiLFxuICAgIFwib2ZfbWRpby5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjI4Ljg4NzEyODk5MVoiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTM1NDY1NDg4NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoZXNlIHRob3VnaHRzLCBmb3JtYXR0ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipEZWNvbnN0cnVjdGluZyB0aGUgc3l6a2FsbGVyIEludGVyYWN0aW9uIHdpdGggU0ZQIFBIWXMqKlxuXG5SaWdodCwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyBzeXprYWxsZXIgaXMgaW50ZXJhY3Rpbmcgd2l0aCB0aGVzZSBTRlAgUEhZIGRldmljZXMuIFRoZSB0ZXh0IGRvZXNuJ3QgZXhwbGljaXRseSBtZW50aW9uIGEgbW9ja3VwLCB3aGljaCBpcyBhIGtleSBwb2ludC4gSXQgc2VlbXMgc3l6a2FsbGVyIG1pZ2h0IGJlIGluamVjdGluZyBkZXZpY2VzIGR5bmFtaWNhbGx5LCBlaXRoZXIgdGhyb3VnaCBuZXRsaW5rLCBzeXNmcywgb3IgcGVyaGFwcyBpdCdzIGp1c3QgcG9raW5nIGFyb3VuZCBhdCBwcmUtZXhpc3RpbmcgZHVtbXkgZGV2aWNlcywgd2hpY2ggaXMgYSBkaXN0aW5jdCBwb3NzaWJpbGl0eS5cblxuTXkgZm9jdXMgaXMgbm93IHplcm9pbmcgaW4gb24gYHBoeV9zZnBfcHJvYmVgLiBBaGEhIEl04oCZcyBjYWxsZWQgd2hlbiB0aGUgUEhZIGRldmljZSBnZXRzIHByb2JlZCwgdGhhdOKAmXMgdXNlZnVsIGNvbnRleHQuIE5vdywgdGhlIGludGVyZXN0aW5nIHBhcnQgaXMgd2hhdCBoYXBwZW5zIGlmIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZhaWxzLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgaWYgaXQgZmFpbHMsIGl0IGhhcyBzb21lIHNvcnQgb2YgY2xlYW51cCBwcm9jZXNzLCB0aGF0IGNvdWxkIGJlIGEgYnVnLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBob3cgYHBoeV9zZXR1cF9zZnBfcG9ydGAgKmNhbiogZmFpbCwgdG8gdW5kZXJzdGFuZCB0aGUgcG90ZW50aWFsIGVycm9yIGNvbmRpdGlvbnMgYW5kIGlmIHRoZXkncmUgaGFuZGxlZCBwcm9wZXJseS4gVGltZSB0byBkaXZlIGludG8gdGhlIGNvZGUgZm9yIHRoYXQgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NzU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJjb2Rlc2VhcmNoLWRpci1pbmRleCJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU1OjUwLjI0MTc4NjEzN1oiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzM0OTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L3BoeV9kZXZpY2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNjc2LFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNjc2OlxcdHN0YXRpYyBpbnQgcGh5X3NldHVwX3NmcF9wb3J0KHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpXFxuMTY3NzpcXHR7XFxuMTY3ODpcXHRcXHRzdHJ1Y3QgcGh5X3BvcnQgKnBvcnQgPSBwaHlfcG9ydF9hbGxvYygpO1xcbjE2Nzk6XFx0XFx0aW50IHJldDtcXG4xNjgwOlxcdFxcbjE2ODE6XFx0XFx0aWYgKCFwb3J0KVxcbjE2ODI6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMTY4MzpcXHRcXG4xNjg0OlxcdFxcdHBvcnQtXFx1MDAzZXBhcmVudF90eXBlID0gUEhZX1BPUlRfUEhZO1xcbjE2ODU6XFx0XFx0cG9ydC1cXHUwMDNlcGh5ID0gcGh5ZGV2O1xcbjE2ODY6XFx0XFxuMTY4NzpcXHRcXHQvKiBUaGUgUEhZIGlzIGEgbWVkaWEgY29udmVydGVyLCB0aGUgcG9ydCBjb25uZWN0ZWQgdG8gdGhlIFNGUCBjYWdlXFxuMTY4ODpcXHRcXHQgKiBpcyBhIE1JSSBwb3J0LlxcbjE2ODk6XFx0XFx0ICovXFxuMTY5MDpcXHRcXHRwb3J0LVxcdTAwM2Vpc19taWkgPSB0cnVlO1xcbjE2OTE6XFx0XFx0cG9ydC1cXHUwMDNlaXNfc2ZwID0gdHJ1ZTtcXG4xNjkyOlxcdFxcbjE2OTM6XFx0XFx0LyogVGhlIHBvcnQtXFx1MDAzZXN1cHBvcnRlZCBhbmQgcG9ydC1cXHUwMDNlaW50ZXJmYWNlcyBsaXN0IHdpbGwgYmUgcG9wdWxhdGVkXFxuMTY5NDpcXHRcXHQgKiB3aGVuIGF0dGFjaGluZyB0aGUgcG9ydCB0byB0aGUgcGh5ZGV2LlxcbjE2OTU6XFx0XFx0ICovXFxuMTY5NjpcXHRcXHRyZXQgPSBwaHlfYWRkX3BvcnQocGh5ZGV2LCBwb3J0KTtcXG4xNjk3OlxcdFxcdGlmIChyZXQpXFxuMTY5ODpcXHRcXHRcXHRwaHlfcG9ydF9kZXN0cm95KHBvcnQpO1xcbjE2OTk6XFx0XFxuMTcwMDpcXHRcXHRyZXR1cm4gcmV0O1xcbjE3MDE6XFx0fVxcbjE3MDI6XFx0XFxuMTcwMzpcXHQvKipcXG4xNzA0OlxcdCAqIHBoeV9zZnBfcHJvYmUgLSBwcm9iZSBmb3IgYSBTRlAgY2FnZSBhdHRhY2hlZCB0byB0aGlzIFBIWSBkZXZpY2VcXG4xNzA1OlxcdCAqIEBwaHlkZXY6IFBvaW50ZXIgdG8gcGh5X2RldmljZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NTo1MC4yNDIwMjEzMjdaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzE4MzgzMjM4MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBIWS9TRlAgSW5pdGlhbGl6YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIGNvZGUgYmxvY2sgaXMgcmVzcG9uc2libGUgZm9yIGluaXRpYWxpemluZyB0aGUgUEhZIChQaHlzaWNhbCBMYXllcikgZm9yIGEgcG9ydC4gTXkgaW5pdGlhbCBjb25jZXJuIGlzIGFsd2F5cyBwb3RlbnRpYWwgZmFpbHVyZSBwb2ludHMg4oCTIGhlcmUsIGl0IGxvb2tzIGxpa2UgYHBoeV9wb3J0X2FsbG9jYCBvciBgcGh5X2FkZF9wb3J0YCBjb3VsZCBjYXVzZSBpc3N1ZXMuIFRoaXMgc2VlbXMgbGlrZSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBmdW5jdGlvbmFsIGNvZGUuXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgbGlrZSBJJ2xsIG5lZWQgYFBIWUxJQmAgYW5kIGBTRlBgLCBidXQgaG9sZCBvbiwgYFNGUGAgdHJhbnNsYXRlcyB0byBgQ09ORklHX1NGUGAuIEkgc2hvdWxkIHZlcmlmeSB0aGF0LlxuXG5MZXQncyBkaXZlIGRlZXBlci4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBjYWxsIHN0cnVjdHVyZSBhcm91bmQgYHBoeV9zZnBfcHJvYmVgIGFuZCBgcGh5X3NldHVwX3NmcF9wb3J0YCBmb3IgdGhlIGNvcmUgc3ltYm9scy4gT2theSwgaXQncyBgcGh5X3NmcF9wcm9iZWAsIGBwaHlfc2V0dXBfc2ZwX3BvcnRgLCBgcGh5X3NldHVwX3BvcnRzYCwgYW5kIGBwaHlfcHJvYmVgLlxuXG5HaXZlbiB0aGUgY29udGV4dCwgSSB0aGluayB0aGUgbW9zdCByZWxldmFudCBvbmVzIGFyZSBwcm9iYWJseSBqdXN0IGBwaHlfc2ZwX3Byb2JlYCBhbmQgYHBoeV9zZXR1cF9wb3J0c2AuXG5cbldhaXQsIGlzbid0IGBwaHlfcHJvYmVgIGEgaG90LXBhdGggZnVuY3Rpb24/IE5vcGUsIGl0J3MgYSBkZXZpY2UgcHJvYmUgZnVuY3Rpb24sIG1lYW5pbmcgaXQncyBvbmx5IGNhbGxlZCBvbmNlIHBlciBkZXZpY2UuIEhvd2V2ZXIsIGBwaHlfc2ZwX3Byb2JlYCBpcyBtb3JlIHNwZWNpZmljIHRvIHRoZSBTRlAgbW9kdWxlLCBzbyBpdCBzaG91bGQgYmUgaW5jbHVkZWQuIEknbGwgYWRkIGBwaHlfc2ZwX3Byb2JlYCB0byB0aGUgXCJGb2N1c1N5bWJvbHNcIiBsaXN0IHRvIGtlZXAgaXQgZnJvbnQgb2YgbWluZC5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9ucy4gV2UndmUgZ290IGBDT05GSUdfUEhZTElCYCBhbmQgYENPTkZJR19TRlBgLiBJIGJldCBgQ09ORklHX1BIWUxJQmAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkLiBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIEtjb25maWcgZmlsZXMgZm9yIGFueSBvdGhlciByZWxldmFudCBzZXR0aW5ncy4gSSdsbCBoZWFkIG92ZXIgdG8gYGRyaXZlcnMvbmV0L3BoeS9LY29uZmlnYCB0byBsb29rIGZvciBhbnkgb3RoZXIgYFNGUGAgb3B0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU1NDIsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNlQyMDo1NjoyMi4wODAzNDgxOTlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMTE4NzM5MDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFNGUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9waHkvS2NvbmZpZz02NT1jb25maWcgUlVTVF9QSFlMSUJfQUJTVFJBQ1RJT05TXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy03Mi1cXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZzo3Mzpjb25maWcgU0ZQXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctNzQtXFx0dHJpc3RhdGUgXFxcIlNGUCBjYWdlIHN1cHBvcnRcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjIzLjI5MjIyNzY2NVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDY3MDgxNTA1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOlxuXG4qKkludmVzdGlnYXRpbmcgUEhZTElCIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gZmlsZXMuIEdpdmVuIHRoYXQgYFBIWUxJQmAgZGVhbHMgd2l0aCB0aGUgcGh5c2ljYWwgbGF5ZXIgb2YgbmV0d29ya2luZywgSSdtIHByZXR0eSBzdXJlIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgd2lsbCBiZSBzb21ld2hlcmUgd2l0aGluIHRoZSBuZXR3b3JrIGRyaXZlciBkaXJlY3RvcnkuIFNwZWNpZmljYWxseSwgSSdtIGJldHRpbmcgaXQncyBpbiBgZHJpdmVycy9uZXQvcGh5L2AuIExldCdzIGNvbmZpcm0gdGhhdCBoeXBvdGhlc2lzIGJ5IGltbWVkaWF0ZWx5IGNoZWNraW5nIGBkcml2ZXJzL25ldC9waHkvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBJJ2QgZXhwZWN0IHRvIGZpbmQgdGhlIGRlcGVuZGVuY2llcywgYm9vbGVhbiBmbGFncywgYW5kIGRlZmF1bHQgc2V0dGluZ3MgdGhhdCBkZWZpbmUgaG93IGBQSFlMSUJgIGFuZCBpdHMgYXNzb2NpYXRlZCBmZWF0dXJlcyBhcmUgY29uZmlndXJlZCB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZCBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMyNiwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjQ3Ljk2MzA0NDg3NloiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzA3OTgwMDk5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQSFlMSUJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvcGh5L0tjb25maWc9Nj1jb25maWcgUEhZTElOS1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWctMTQtXFxuZHJpdmVycy9uZXQvcGh5L0tjb25maWc6MTU6bWVudWNvbmZpZyBQSFlMSUJcXG5kcml2ZXJzL25ldC9waHkvS2NvbmZpZy0xNi1cXHR0cmlzdGF0ZSBcXFwiUEhZIERldmljZSBzdXBwb3J0IGFuZCBpbmZyYXN0cnVjdHVyZVxcXCJcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnPTQ2PWNvbmZpZyBPUEVOX0FMTElBTkNFX0hFTFBFUlNcXG4tLVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTQ4LVxcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnOjQ5OmNvbmZpZyBQSFlMSUJfTEVEU1xcbmRyaXZlcnMvbmV0L3BoeS9LY29uZmlnLTUwLVxcdGRlZl9ib29sIE9GXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjQ4LjI3MTAzMTAxNVoiLCJTZXEiOjM1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0OTU3MjQzOTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIENvbmZpZ3VyYXRpb24ncyBJbXBhY3QqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGF0IGNvbmZpZ3VyYXRpb25zIHJlbGF0ZWQgdG8gYFBIWUxJQmAgYW5kIGBTRlBgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcXVpY2tseSB2ZXJpZnkgaWYgdGhlc2UgdHdvIGFyZSB0aGUgb25seSBkZXBlbmRlbmNpZXMgYXQgcGxheS4gVGhlIGRlcGVuZGVuY3kgdHJlZSBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCBmb3IgYW55IGZ1enppbmcgYXBwcm9hY2guXG5cbkFoYSwgbG9va3MgbGlrZSBgTURJT19ERVZJQ0VgIGlzIGRpcmVjdGx5IHNlbGVjdGVkIGJ5IGBQSFlMSUJgLCBzbyB3ZSBjYW4gYmUgY29uZmlkZW50IHRoYXQgZm9jdXNpbmcgb24gYFBIWUxJQmAgYW5kIGBTRlBgIGNvdmVycyBhbGwgdGhlIHJlbGV2YW50IGJhc2UgY29tcG9uZW50cy4gTm8gZnVydGhlciBkaWdnaW5nIG5lY2Vzc2FyeSBoZXJlLlxuXG5Ob3csIGxldCdzIGNvbnNvbGlkYXRlIHRoaXM6XG5cbioqV29ydGhGdXp6aW5nOiBUcnVlKiogLSBHaXZlbiB0aGF0IHRoaXMgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyBlcnJvciBoYW5kbGluZyB3aXRoaW4gYSBjb3JlIGZ1bmN0aW9uIGZvciBTRlAgcHJvYmUsIHdlIGhhdmUgYSBjbGVhciBhcmVhIGZvciBwb3RlbnRpYWwgdnVsbmVyYWJpbGl0eSBkaXNjb3ZlcnkuXG5cbioqRm9jdXNTeW1ib2xzOiBgcGh5X3NmcF9wcm9iZWAqKiAtIFRoaXMgaXMgdGhlIHByaW1hcnkgZnVuY3Rpb24gdG8gdGFyZ2V0LCBzaW5jZSBpdCdzIHRoZSBzcGVjaWZpYyBhcmVhIG9mIGVycm9yIGhhbmRsaW5nIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCB0aGF0IHJlcXVpcmVzIGNsb3NlIGF0dGVudGlvbi5cblxuKipFbmFibGVDb25maWdzOiBgUEhZTElCYCwgYFNGUGAqKiAtIFRoZXNlIGNvbmZpZ3VyYXRpb25zIGFyZSB0aGUgbWluaW11bSByZXF1aXJlZCB0byByZXByb2R1Y2UgdGhlIHRhcmdldCBmdW5jdGlvbidzIGxvZ2ljLlxuXG4qKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2gncyBmb2N1cyBvbiBlcnJvciBoYW5kbGluZyB3aXRoaW4gYHBoeV9zZnBfcHJvYmVgIHJlbGF0ZWQgdG8gdGhlIGBwaHlfc2V0dXBfc2ZwX3BvcnRgIGZ1bmN0aW9uLiBUaGlzIGluZGljYXRlcyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBvdGhlciBpc3N1ZSB0aGF0IGNhbiBiZSB0cmlnZ2VyZWQgd2hlbiBzZXR1cCBmYWlscywgYW5kIG5vdyB3ZSBhcmUgZGVhbGluZyB3aXRoIGNsZWFudXAgb3BlcmF0aW9ucyB0byBlbnN1cmUgdGhlIFNGUCBidXMgZG9lc24ndCBnZXQgbWVzc2VkIHVwLiBBcyBhIGNvbnNlcXVlbmNlLCB3ZSBtYXkgdW5jb3ZlciBsb2dpYyBlcnJvcnMgd2l0aGluIHRoZSBQSFkgZnJhbWV3b3JrIGlmIHdlIGNhbiB0cmlnZ2VyIHRoZSBmYWlsdXJlcyBhZGRyZXNzZWQgYnkgdGhpcyBwYXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2OTgsIk91dHB1dFRva2VucyI6MTAyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI2VDIwOjU2OjUzLjIyODI3ODE2OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgyNzk5MDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQSFlMSUJcIixcbiAgICBcIlNGUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInBoeV9zZnBfcHJvYmVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGVycm9yIGhhbmRsaW5nIGluIGBwaHlfc2ZwX3Byb2JlYCB0byBjbGVhbiB1cCB0aGUgU0ZQIGJ1cyByZWZlcmVuY2UgaWYgYHBoeV9zZXR1cF9zZnBfcG9ydGAgZmFpbHMuIFRoaXMgaXMgZnVuY3Rpb25hbCBjb3JlIGtlcm5lbCBsb2dpYyBpbiB0aGUgUEhZIGZyYW1ld29yayBhbmQgY2FuIGJlIHJlYWNoZWQgZHVyaW5nIFBIWSBkZXZpY2UgcHJvYmluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowkqcln[1] Phase: Succeeded StartedAt: 2026-06-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 20:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 20:57:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2] Phase: Succeeded StartedAt: 2026-06-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-06-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 20:57:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 20:57:04 +0000 UTC FinishedAt: 2026-06-26 20:57:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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-workflowkqcln/series-workflowkqcln-convert-artifact-421845012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 20:57:14 +0000 UTC FinishedAt: 2026-06-26 21:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 20:57:14 +0000 UTC FinishedAt: 2026-06-26 21:29:53 +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:*b6c31533-a0d5-447b-814c-af922df7dbd8,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-workflowkqcln/series-workflowkqcln-convert-artifact-421845012/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": "51544e87-6ab9-4b31-a135-6caea5ca6ac6", "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-workflowkqcln/series-workflowkqcln-build-action-2290640018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 20:57:14 +0000 UTC FinishedAt: 2026-06-26 21:29: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:*b6c31533-a0d5-447b-814c-af922df7dbd8,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-workflowkqcln/series-workflowkqcln-convert-artifact-421845012/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": "51544e87-6ab9-4b31-a135-6caea5ca6ac6", "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-workflowkqcln/series-workflowkqcln-build-action-2290640018/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:29:53 +0000 UTC FinishedAt: 2026-06-26 21:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:29:53 +0000 UTC FinishedAt: 2026-06-26 21:29:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:29:53 +0000 UTC FinishedAt: 2026-06-26 21:30:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:29:53 +0000 UTC FinishedAt: 2026-06-26 21:30:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-workflowkqcln/series-workflowkqcln-convert-artifact-2690194387/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:30:13 +0000 UTC FinishedAt: 2026-06-26 21:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:30:13 +0000 UTC FinishedAt: 2026-06-26 21:32:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51544e87-6ab9-4b31-a135-6caea5ca6ac6,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-workflowkqcln/series-workflowkqcln-build-action-2290640018/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-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:32:17 +0000 UTC FinishedAt: 2026-06-26 21:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:32:17 +0000 UTC FinishedAt: 2026-06-26 21:32:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:32:17 +0000 UTC FinishedAt: 2026-06-26 22:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:32:17 +0000 UTC FinishedAt: 2026-06-26 22:04:49 +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:*b6c31533-a0d5-447b-814c-af922df7dbd8,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-workflowkqcln/series-workflowkqcln-convert-artifact-2690194387/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": "899d3342-efcc-4815-a121-66caeb3ec97e", "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-workflowkqcln/series-workflowkqcln-build-action-3578745095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 21:32:17 +0000 UTC FinishedAt: 2026-06-26 22:04:39 +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:*b6c31533-a0d5-447b-814c-af922df7dbd8,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-workflowkqcln/series-workflowkqcln-convert-artifact-2690194387/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": "899d3342-efcc-4815-a121-66caeb3ec97e", "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-workflowkqcln/series-workflowkqcln-build-action-3578745095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:04:49 +0000 UTC FinishedAt: 2026-06-26 22:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:04:49 +0000 UTC FinishedAt: 2026-06-26 22:04:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:04:49 +0000 UTC FinishedAt: 2026-06-26 22:06:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:04:49 +0000 UTC FinishedAt: 2026-06-26 22:06:48 +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:*899d3342-efcc-4815-a121-66caeb3ec97e,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-workflowkqcln/series-workflowkqcln-build-action-3578745095/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-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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: Failed StartedAt: 2026-06-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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: Failed StartedAt: 2026-06-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +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":["phy_sfp_probe"],"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:*51544e87-6ab9-4b31-a135-6caea5ca6ac6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*899d3342-efcc-4815-a121-66caeb3ec97e,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-workflowkqcln/series-workflowkqcln-build-action-2290640018/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-workflowkqcln/series-workflowkqcln-build-action-3578745095/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:07:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:07:08 +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":["phy_sfp_probe"],"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-workflowkqcln/series-workflowkqcln-convert-artifact-2379173196/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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-26 22:07:00 +0000 UTC FinishedAt: 2026-06-26 22:07:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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: Failed StartedAt: 2026-06-26 22:07:11 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowkqcln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"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":["phy_sfp_probe"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"bb365a506b1e6fb050c0fceaad354fe395385ef0","config_name":"upstream-apparmor-kasan.config","enable_configs":["PHYLIB","SFP"],"series_id":"5f396780-54d4-40f0-97d4-83448839b2ae","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: Error StartedAt: 2026-06-26 22:07:11 +0000 UTC FinishedAt: 2026-06-26 22:39:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*51544e87-6ab9-4b31-a135-6caea5ca6ac6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*899d3342-efcc-4815-a121-66caeb3ec97e,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-workflowkqcln/series-workflowkqcln-build-action-2290640018/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-workflowkqcln/series-workflowkqcln-build-action-3578745095/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-workflowkqcln/series-workflowkqcln-convert-artifact-2379173196/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil